twitchapon-anim

Basic Twitchapon Receiver/Visuals
git clone git://bsandro.tech/twitchapon-anim
Log | Files | Refs | README | LICENSE

package_notwindows.go (43670B)


      1 // SPDX-License-Identifier: MIT
      2 
      3 // +build !windows
      4 
      5 package gl
      6 
      7 // #cgo darwin LDFLAGS: -framework OpenGL
      8 // #cgo linux freebsd pkg-config: gl
      9 //
     10 // #ifndef APIENTRY
     11 //   #define APIENTRY
     12 // #endif
     13 //
     14 // #ifndef APIENTRYP
     15 //   #define APIENTRYP APIENTRY *
     16 // #endif
     17 //
     18 // #ifndef GLAPI
     19 //   #define GLAPI extern
     20 // #endif
     21 //
     22 // #include <stddef.h>
     23 //
     24 // #ifndef GLEXT_64_TYPES_DEFINED
     25 //   /* This code block is duplicated in glxext.h, so must be protected */
     26 //   #define GLEXT_64_TYPES_DEFINED
     27 //   /* Define int32_t, int64_t, and uint64_t types for UST/MSC */
     28 //   /* (as used in the GL_EXT_timer_query extension). */
     29 //   #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     30 //     #include <inttypes.h>
     31 //   #elif defined(__sun__) || defined(__digital__)
     32 //     #include <inttypes.h>
     33 //     #if defined(__STDC__)
     34 //       #if defined(__arch64__) || defined(_LP64)
     35 //         typedef long int int64_t;
     36 //         typedef unsigned long int uint64_t;
     37 //       #else
     38 //         typedef long long int int64_t;
     39 //         typedef unsigned long long int uint64_t;
     40 //       #endif /* __arch64__ */
     41 //     #endif /* __STDC__ */
     42 //   #elif defined( __VMS ) || defined(__sgi)
     43 //     #include <inttypes.h>
     44 //   #elif defined(__SCO__) || defined(__USLC__)
     45 //     #include <stdint.h>
     46 //   #elif defined(__UNIXOS2__) || defined(__SOL64__)
     47 //     typedef long int int32_t;
     48 //     typedef long long int int64_t;
     49 //     typedef unsigned long long int uint64_t;
     50 //   #else
     51 //     /* Fallback if nothing above works */
     52 //     #include <inttypes.h>
     53 //   #endif
     54 // #endif
     55 //
     56 // typedef unsigned int GLenum;
     57 // typedef unsigned char GLboolean;
     58 // typedef unsigned int GLbitfield;
     59 // typedef signed char GLbyte;
     60 // typedef short GLshort;
     61 // typedef int GLint;
     62 // typedef int GLclampx;
     63 // typedef unsigned char GLubyte;
     64 // typedef unsigned short GLushort;
     65 // typedef unsigned int GLuint;
     66 // typedef int GLsizei;
     67 // typedef float GLfloat;
     68 // typedef float GLclampf;
     69 // typedef double GLdouble;
     70 // typedef double GLclampd;
     71 // typedef void *GLeglClientBufferEXT;
     72 // typedef void *GLeglImageOES;
     73 // typedef char GLchar;
     74 // typedef char GLcharARB;
     75 // #ifdef __APPLE__
     76 // typedef void *GLhandleARB;
     77 // #else
     78 // typedef unsigned int GLhandleARB;
     79 // #endif
     80 // typedef GLint GLfixed;
     81 // typedef ptrdiff_t GLintptr;
     82 // typedef ptrdiff_t GLsizeiptr;
     83 // typedef int64_t GLint64;
     84 // typedef uint64_t GLuint64;
     85 // typedef ptrdiff_t GLintptrARB;
     86 // typedef ptrdiff_t GLsizeiptrARB;
     87 // typedef int64_t GLint64EXT;
     88 // typedef uint64_t GLuint64EXT;
     89 // typedef uintptr_t GLsync;
     90 //
     91 // typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
     92 // typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
     93 // typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
     94 // typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
     95 // typedef unsigned short GLhalfNV;
     96 // typedef GLintptr GLvdpauSurfaceNV;
     97 //
     98 // typedef void  (APIENTRYP GPACTIVETEXTURE)(GLenum  texture);
     99 // typedef void  (APIENTRYP GPATTACHSHADER)(GLuint  program, GLuint  shader);
    100 // typedef void  (APIENTRYP GPBINDATTRIBLOCATION)(GLuint  program, GLuint  index, const GLchar * name);
    101 // typedef void  (APIENTRYP GPBINDBUFFER)(GLenum  target, GLuint  buffer);
    102 // typedef void  (APIENTRYP GPBINDFRAMEBUFFEREXT)(GLenum  target, GLuint  framebuffer);
    103 // typedef void  (APIENTRYP GPBINDTEXTURE)(GLenum  target, GLuint  texture);
    104 // typedef void  (APIENTRYP GPBLENDFUNC)(GLenum  sfactor, GLenum  dfactor);
    105 // typedef void  (APIENTRYP GPBUFFERDATA)(GLenum  target, GLsizeiptr  size, const void * data, GLenum  usage);
    106 // typedef void  (APIENTRYP GPBUFFERSUBDATA)(GLenum  target, GLintptr  offset, GLsizeiptr  size, const void * data);
    107 // typedef GLenum  (APIENTRYP GPCHECKFRAMEBUFFERSTATUSEXT)(GLenum  target);
    108 // typedef void  (APIENTRYP GPCOMPILESHADER)(GLuint  shader);
    109 // typedef GLuint  (APIENTRYP GPCREATEPROGRAM)();
    110 // typedef GLuint  (APIENTRYP GPCREATESHADER)(GLenum  type);
    111 // typedef void  (APIENTRYP GPDELETEBUFFERS)(GLsizei  n, const GLuint * buffers);
    112 // typedef void  (APIENTRYP GPDELETEFRAMEBUFFERSEXT)(GLsizei  n, const GLuint * framebuffers);
    113 // typedef void  (APIENTRYP GPDELETEPROGRAM)(GLuint  program);
    114 // typedef void  (APIENTRYP GPDELETESHADER)(GLuint  shader);
    115 // typedef void  (APIENTRYP GPDELETETEXTURES)(GLsizei  n, const GLuint * textures);
    116 // typedef void  (APIENTRYP GPDISABLEVERTEXATTRIBARRAY)(GLuint  index);
    117 // typedef void  (APIENTRYP GPDRAWELEMENTS)(GLenum  mode, GLsizei  count, GLenum  type, const uintptr_t indices);
    118 // typedef void  (APIENTRYP GPENABLE)(GLenum  cap);
    119 // typedef void  (APIENTRYP GPENABLEVERTEXATTRIBARRAY)(GLuint  index);
    120 // typedef void  (APIENTRYP GPFLUSH)();
    121 // typedef void  (APIENTRYP GPFRAMEBUFFERTEXTURE2DEXT)(GLenum  target, GLenum  attachment, GLenum  textarget, GLuint  texture, GLint  level);
    122 // typedef void  (APIENTRYP GPGENBUFFERS)(GLsizei  n, GLuint * buffers);
    123 // typedef void  (APIENTRYP GPGENFRAMEBUFFERSEXT)(GLsizei  n, GLuint * framebuffers);
    124 // typedef void  (APIENTRYP GPGENTEXTURES)(GLsizei  n, GLuint * textures);
    125 // typedef void  (APIENTRYP GPGETDOUBLEI_V)(GLenum  target, GLuint  index, GLdouble * data);
    126 // typedef void  (APIENTRYP GPGETDOUBLEI_VEXT)(GLenum  pname, GLuint  index, GLdouble * params);
    127 // typedef GLenum  (APIENTRYP GPGETERROR)();
    128 // typedef void  (APIENTRYP GPGETFLOATI_V)(GLenum  target, GLuint  index, GLfloat * data);
    129 // typedef void  (APIENTRYP GPGETFLOATI_VEXT)(GLenum  pname, GLuint  index, GLfloat * params);
    130 // typedef void  (APIENTRYP GPGETINTEGERI_V)(GLenum  target, GLuint  index, GLint * data);
    131 // typedef void  (APIENTRYP GPGETINTEGERUI64I_VNV)(GLenum  value, GLuint  index, GLuint64EXT * result);
    132 // typedef void  (APIENTRYP GPGETINTEGERV)(GLenum  pname, GLint * data);
    133 // typedef void  (APIENTRYP GPGETPOINTERI_VEXT)(GLenum  pname, GLuint  index, void ** params);
    134 // typedef void  (APIENTRYP GPGETPROGRAMINFOLOG)(GLuint  program, GLsizei  bufSize, GLsizei * length, GLchar * infoLog);
    135 // typedef void  (APIENTRYP GPGETPROGRAMIV)(GLuint  program, GLenum  pname, GLint * params);
    136 // typedef void  (APIENTRYP GPGETSHADERINFOLOG)(GLuint  shader, GLsizei  bufSize, GLsizei * length, GLchar * infoLog);
    137 // typedef void  (APIENTRYP GPGETSHADERIV)(GLuint  shader, GLenum  pname, GLint * params);
    138 // typedef void  (APIENTRYP GPGETTRANSFORMFEEDBACKI64_V)(GLuint  xfb, GLenum  pname, GLuint  index, GLint64 * param);
    139 // typedef void  (APIENTRYP GPGETTRANSFORMFEEDBACKI_V)(GLuint  xfb, GLenum  pname, GLuint  index, GLint * param);
    140 // typedef GLint  (APIENTRYP GPGETUNIFORMLOCATION)(GLuint  program, const GLchar * name);
    141 // typedef void  (APIENTRYP GPGETUNSIGNEDBYTEI_VEXT)(GLenum  target, GLuint  index, GLubyte * data);
    142 // typedef void  (APIENTRYP GPGETVERTEXARRAYINTEGERI_VEXT)(GLuint  vaobj, GLuint  index, GLenum  pname, GLint * param);
    143 // typedef void  (APIENTRYP GPGETVERTEXARRAYPOINTERI_VEXT)(GLuint  vaobj, GLuint  index, GLenum  pname, void ** param);
    144 // typedef GLboolean  (APIENTRYP GPISFRAMEBUFFEREXT)(GLuint  framebuffer);
    145 // typedef GLboolean  (APIENTRYP GPISPROGRAM)(GLuint  program);
    146 // typedef GLboolean  (APIENTRYP GPISTEXTURE)(GLuint  texture);
    147 // typedef void  (APIENTRYP GPLINKPROGRAM)(GLuint  program);
    148 // typedef void  (APIENTRYP GPPIXELSTOREI)(GLenum  pname, GLint  param);
    149 // typedef void  (APIENTRYP GPREADPIXELS)(GLint  x, GLint  y, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, void * pixels);
    150 // typedef void  (APIENTRYP GPSHADERSOURCE)(GLuint  shader, GLsizei  count, const GLchar *const* string, const GLint * length);
    151 // typedef void  (APIENTRYP GPTEXIMAGE2D)(GLenum  target, GLint  level, GLint  internalformat, GLsizei  width, GLsizei  height, GLint  border, GLenum  format, GLenum  type, const void * pixels);
    152 // typedef void  (APIENTRYP GPTEXPARAMETERI)(GLenum  target, GLenum  pname, GLint  param);
    153 // typedef void  (APIENTRYP GPTEXSUBIMAGE2D)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, const void * pixels);
    154 // typedef void  (APIENTRYP GPUNIFORM1F)(GLint  location, GLfloat  v0);
    155 // typedef void  (APIENTRYP GPUNIFORM1I)(GLint  location, GLint  v0);
    156 // typedef void  (APIENTRYP GPUNIFORM1FV)(GLint  location, GLsizei  count, const GLfloat * value);
    157 // typedef void  (APIENTRYP GPUNIFORM2FV)(GLint  location, GLsizei  count, const GLfloat * value);
    158 // typedef void  (APIENTRYP GPUNIFORM3FV)(GLint  location, GLsizei  count, const GLfloat * value);
    159 // typedef void  (APIENTRYP GPUNIFORM4FV)(GLint  location, GLsizei  count, const GLfloat * value);
    160 // typedef void  (APIENTRYP GPUNIFORMMATRIX2FV)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value);
    161 // typedef void  (APIENTRYP GPUNIFORMMATRIX3FV)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value);
    162 // typedef void  (APIENTRYP GPUNIFORMMATRIX4FV)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value);
    163 // typedef void  (APIENTRYP GPUSEPROGRAM)(GLuint  program);
    164 // typedef void  (APIENTRYP GPVERTEXATTRIBPOINTER)(GLuint  index, GLint  size, GLenum  type, GLboolean  normalized, GLsizei  stride, const uintptr_t pointer);
    165 // typedef void  (APIENTRYP GPVIEWPORT)(GLint  x, GLint  y, GLsizei  width, GLsizei  height);
    166 //
    167 // static void  glowActiveTexture(GPACTIVETEXTURE fnptr, GLenum  texture) {
    168 //   (*fnptr)(texture);
    169 // }
    170 // static void  glowAttachShader(GPATTACHSHADER fnptr, GLuint  program, GLuint  shader) {
    171 //   (*fnptr)(program, shader);
    172 // }
    173 // static void  glowBindAttribLocation(GPBINDATTRIBLOCATION fnptr, GLuint  program, GLuint  index, const GLchar * name) {
    174 //   (*fnptr)(program, index, name);
    175 // }
    176 // static void  glowBindBuffer(GPBINDBUFFER fnptr, GLenum  target, GLuint  buffer) {
    177 //   (*fnptr)(target, buffer);
    178 // }
    179 // static void  glowBindFramebufferEXT(GPBINDFRAMEBUFFEREXT fnptr, GLenum  target, GLuint  framebuffer) {
    180 //   (*fnptr)(target, framebuffer);
    181 // }
    182 // static void  glowBindTexture(GPBINDTEXTURE fnptr, GLenum  target, GLuint  texture) {
    183 //   (*fnptr)(target, texture);
    184 // }
    185 // static void  glowBlendFunc(GPBLENDFUNC fnptr, GLenum  sfactor, GLenum  dfactor) {
    186 //   (*fnptr)(sfactor, dfactor);
    187 // }
    188 // static void  glowBufferData(GPBUFFERDATA fnptr, GLenum  target, GLsizeiptr  size, const void * data, GLenum  usage) {
    189 //   (*fnptr)(target, size, data, usage);
    190 // }
    191 // static void  glowBufferSubData(GPBUFFERSUBDATA fnptr, GLenum  target, GLintptr  offset, GLsizeiptr  size, const void * data) {
    192 //   (*fnptr)(target, offset, size, data);
    193 // }
    194 // static GLenum  glowCheckFramebufferStatusEXT(GPCHECKFRAMEBUFFERSTATUSEXT fnptr, GLenum  target) {
    195 //   return (*fnptr)(target);
    196 // }
    197 // static void  glowCompileShader(GPCOMPILESHADER fnptr, GLuint  shader) {
    198 //   (*fnptr)(shader);
    199 // }
    200 // static GLuint  glowCreateProgram(GPCREATEPROGRAM fnptr) {
    201 //   return (*fnptr)();
    202 // }
    203 // static GLuint  glowCreateShader(GPCREATESHADER fnptr, GLenum  type) {
    204 //   return (*fnptr)(type);
    205 // }
    206 // static void  glowDeleteBuffers(GPDELETEBUFFERS fnptr, GLsizei  n, const GLuint * buffers) {
    207 //   (*fnptr)(n, buffers);
    208 // }
    209 // static void  glowDeleteFramebuffersEXT(GPDELETEFRAMEBUFFERSEXT fnptr, GLsizei  n, const GLuint * framebuffers) {
    210 //   (*fnptr)(n, framebuffers);
    211 // }
    212 // static void  glowDeleteProgram(GPDELETEPROGRAM fnptr, GLuint  program) {
    213 //   (*fnptr)(program);
    214 // }
    215 // static void  glowDeleteShader(GPDELETESHADER fnptr, GLuint  shader) {
    216 //   (*fnptr)(shader);
    217 // }
    218 // static void  glowDeleteTextures(GPDELETETEXTURES fnptr, GLsizei  n, const GLuint * textures) {
    219 //   (*fnptr)(n, textures);
    220 // }
    221 // static void  glowDisableVertexAttribArray(GPDISABLEVERTEXATTRIBARRAY fnptr, GLuint  index) {
    222 //   (*fnptr)(index);
    223 // }
    224 // static void  glowDrawElements(GPDRAWELEMENTS fnptr, GLenum  mode, GLsizei  count, GLenum  type, const uintptr_t indices) {
    225 //   (*fnptr)(mode, count, type, indices);
    226 // }
    227 // static void  glowEnable(GPENABLE fnptr, GLenum  cap) {
    228 //   (*fnptr)(cap);
    229 // }
    230 // static void  glowEnableVertexAttribArray(GPENABLEVERTEXATTRIBARRAY fnptr, GLuint  index) {
    231 //   (*fnptr)(index);
    232 // }
    233 // static void  glowFlush(GPFLUSH fnptr) {
    234 //   (*fnptr)();
    235 // }
    236 // static void  glowFramebufferTexture2DEXT(GPFRAMEBUFFERTEXTURE2DEXT fnptr, GLenum  target, GLenum  attachment, GLenum  textarget, GLuint  texture, GLint  level) {
    237 //   (*fnptr)(target, attachment, textarget, texture, level);
    238 // }
    239 // static void  glowGenBuffers(GPGENBUFFERS fnptr, GLsizei  n, GLuint * buffers) {
    240 //   (*fnptr)(n, buffers);
    241 // }
    242 // static void  glowGenFramebuffersEXT(GPGENFRAMEBUFFERSEXT fnptr, GLsizei  n, GLuint * framebuffers) {
    243 //   (*fnptr)(n, framebuffers);
    244 // }
    245 // static void  glowGenTextures(GPGENTEXTURES fnptr, GLsizei  n, GLuint * textures) {
    246 //   (*fnptr)(n, textures);
    247 // }
    248 // static void  glowGetDoublei_v(GPGETDOUBLEI_V fnptr, GLenum  target, GLuint  index, GLdouble * data) {
    249 //   (*fnptr)(target, index, data);
    250 // }
    251 // static void  glowGetDoublei_vEXT(GPGETDOUBLEI_VEXT fnptr, GLenum  pname, GLuint  index, GLdouble * params) {
    252 //   (*fnptr)(pname, index, params);
    253 // }
    254 // static GLenum  glowGetError(GPGETERROR fnptr) {
    255 //   return (*fnptr)();
    256 // }
    257 // static void  glowGetFloati_v(GPGETFLOATI_V fnptr, GLenum  target, GLuint  index, GLfloat * data) {
    258 //   (*fnptr)(target, index, data);
    259 // }
    260 // static void  glowGetFloati_vEXT(GPGETFLOATI_VEXT fnptr, GLenum  pname, GLuint  index, GLfloat * params) {
    261 //   (*fnptr)(pname, index, params);
    262 // }
    263 // static void  glowGetIntegeri_v(GPGETINTEGERI_V fnptr, GLenum  target, GLuint  index, GLint * data) {
    264 //   (*fnptr)(target, index, data);
    265 // }
    266 // static void  glowGetIntegerui64i_vNV(GPGETINTEGERUI64I_VNV fnptr, GLenum  value, GLuint  index, GLuint64EXT * result) {
    267 //   (*fnptr)(value, index, result);
    268 // }
    269 // static void  glowGetIntegerv(GPGETINTEGERV fnptr, GLenum  pname, GLint * data) {
    270 //   (*fnptr)(pname, data);
    271 // }
    272 // static void  glowGetPointeri_vEXT(GPGETPOINTERI_VEXT fnptr, GLenum  pname, GLuint  index, void ** params) {
    273 //   (*fnptr)(pname, index, params);
    274 // }
    275 // static void  glowGetProgramInfoLog(GPGETPROGRAMINFOLOG fnptr, GLuint  program, GLsizei  bufSize, GLsizei * length, GLchar * infoLog) {
    276 //   (*fnptr)(program, bufSize, length, infoLog);
    277 // }
    278 // static void  glowGetProgramiv(GPGETPROGRAMIV fnptr, GLuint  program, GLenum  pname, GLint * params) {
    279 //   (*fnptr)(program, pname, params);
    280 // }
    281 // static void  glowGetShaderInfoLog(GPGETSHADERINFOLOG fnptr, GLuint  shader, GLsizei  bufSize, GLsizei * length, GLchar * infoLog) {
    282 //   (*fnptr)(shader, bufSize, length, infoLog);
    283 // }
    284 // static void  glowGetShaderiv(GPGETSHADERIV fnptr, GLuint  shader, GLenum  pname, GLint * params) {
    285 //   (*fnptr)(shader, pname, params);
    286 // }
    287 // static void  glowGetTransformFeedbacki64_v(GPGETTRANSFORMFEEDBACKI64_V fnptr, GLuint  xfb, GLenum  pname, GLuint  index, GLint64 * param) {
    288 //   (*fnptr)(xfb, pname, index, param);
    289 // }
    290 // static void  glowGetTransformFeedbacki_v(GPGETTRANSFORMFEEDBACKI_V fnptr, GLuint  xfb, GLenum  pname, GLuint  index, GLint * param) {
    291 //   (*fnptr)(xfb, pname, index, param);
    292 // }
    293 // static GLint  glowGetUniformLocation(GPGETUNIFORMLOCATION fnptr, GLuint  program, const GLchar * name) {
    294 //   return (*fnptr)(program, name);
    295 // }
    296 // static void  glowGetUnsignedBytei_vEXT(GPGETUNSIGNEDBYTEI_VEXT fnptr, GLenum  target, GLuint  index, GLubyte * data) {
    297 //   (*fnptr)(target, index, data);
    298 // }
    299 // static void  glowGetVertexArrayIntegeri_vEXT(GPGETVERTEXARRAYINTEGERI_VEXT fnptr, GLuint  vaobj, GLuint  index, GLenum  pname, GLint * param) {
    300 //   (*fnptr)(vaobj, index, pname, param);
    301 // }
    302 // static void  glowGetVertexArrayPointeri_vEXT(GPGETVERTEXARRAYPOINTERI_VEXT fnptr, GLuint  vaobj, GLuint  index, GLenum  pname, void ** param) {
    303 //   (*fnptr)(vaobj, index, pname, param);
    304 // }
    305 // static GLboolean  glowIsFramebufferEXT(GPISFRAMEBUFFEREXT fnptr, GLuint  framebuffer) {
    306 //   return (*fnptr)(framebuffer);
    307 // }
    308 // static GLboolean  glowIsProgram(GPISPROGRAM fnptr, GLuint  program) {
    309 //   return (*fnptr)(program);
    310 // }
    311 // static GLboolean  glowIsTexture(GPISTEXTURE fnptr, GLuint  texture) {
    312 //   return (*fnptr)(texture);
    313 // }
    314 // static void  glowLinkProgram(GPLINKPROGRAM fnptr, GLuint  program) {
    315 //   (*fnptr)(program);
    316 // }
    317 // static void  glowPixelStorei(GPPIXELSTOREI fnptr, GLenum  pname, GLint  param) {
    318 //   (*fnptr)(pname, param);
    319 // }
    320 // static void  glowReadPixels(GPREADPIXELS fnptr, GLint  x, GLint  y, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, void * pixels) {
    321 //   (*fnptr)(x, y, width, height, format, type, pixels);
    322 // }
    323 // static void  glowShaderSource(GPSHADERSOURCE fnptr, GLuint  shader, GLsizei  count, const GLchar *const* string, const GLint * length) {
    324 //   (*fnptr)(shader, count, string, length);
    325 // }
    326 // static void  glowTexImage2D(GPTEXIMAGE2D fnptr, GLenum  target, GLint  level, GLint  internalformat, GLsizei  width, GLsizei  height, GLint  border, GLenum  format, GLenum  type, const void * pixels) {
    327 //   (*fnptr)(target, level, internalformat, width, height, border, format, type, pixels);
    328 // }
    329 // static void  glowTexParameteri(GPTEXPARAMETERI fnptr, GLenum  target, GLenum  pname, GLint  param) {
    330 //   (*fnptr)(target, pname, param);
    331 // }
    332 // static void  glowTexSubImage2D(GPTEXSUBIMAGE2D fnptr, GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, const void * pixels) {
    333 //   (*fnptr)(target, level, xoffset, yoffset, width, height, format, type, pixels);
    334 // }
    335 // static void  glowUniform1f(GPUNIFORM1F fnptr, GLint  location, GLfloat  v0) {
    336 //   (*fnptr)(location, v0);
    337 // }
    338 // static void  glowUniform1i(GPUNIFORM1I fnptr, GLint  location, GLint  v0) {
    339 //   (*fnptr)(location, v0);
    340 // }
    341 // static void  glowUniform1fv(GPUNIFORM1FV fnptr, GLint  location, GLsizei  count, const GLfloat * value) {
    342 //   (*fnptr)(location, count, value);
    343 // }
    344 // static void  glowUniform2fv(GPUNIFORM2FV fnptr, GLint  location, GLsizei  count, const GLfloat * value) {
    345 //   (*fnptr)(location, count, value);
    346 // }
    347 // static void  glowUniform3fv(GPUNIFORM3FV fnptr, GLint  location, GLsizei  count, const GLfloat * value) {
    348 //   (*fnptr)(location, count, value);
    349 // }
    350 // static void  glowUniform4fv(GPUNIFORM4FV fnptr, GLint  location, GLsizei  count, const GLfloat * value) {
    351 //   (*fnptr)(location, count, value);
    352 // }
    353 // static void  glowUniformMatrix2fv(GPUNIFORMMATRIX2FV fnptr, GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) {
    354 //   (*fnptr)(location, count, transpose, value);
    355 // }
    356 // static void  glowUniformMatrix3fv(GPUNIFORMMATRIX3FV fnptr, GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) {
    357 //   (*fnptr)(location, count, transpose, value);
    358 // }
    359 // static void  glowUniformMatrix4fv(GPUNIFORMMATRIX4FV fnptr, GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) {
    360 //   (*fnptr)(location, count, transpose, value);
    361 // }
    362 // static void  glowUseProgram(GPUSEPROGRAM fnptr, GLuint  program) {
    363 //   (*fnptr)(program);
    364 // }
    365 // static void  glowVertexAttribPointer(GPVERTEXATTRIBPOINTER fnptr, GLuint  index, GLint  size, GLenum  type, GLboolean  normalized, GLsizei  stride, const uintptr_t pointer) {
    366 //   (*fnptr)(index, size, type, normalized, stride, pointer);
    367 // }
    368 // static void  glowViewport(GPVIEWPORT fnptr, GLint  x, GLint  y, GLsizei  width, GLsizei  height) {
    369 //   (*fnptr)(x, y, width, height);
    370 // }
    371 import "C"
    372 
    373 import (
    374 	"errors"
    375 	"unsafe"
    376 )
    377 
    378 var (
    379 	gpActiveTexture               C.GPACTIVETEXTURE
    380 	gpAttachShader                C.GPATTACHSHADER
    381 	gpBindAttribLocation          C.GPBINDATTRIBLOCATION
    382 	gpBindBuffer                  C.GPBINDBUFFER
    383 	gpBindFramebufferEXT          C.GPBINDFRAMEBUFFEREXT
    384 	gpBindTexture                 C.GPBINDTEXTURE
    385 	gpBlendFunc                   C.GPBLENDFUNC
    386 	gpBufferData                  C.GPBUFFERDATA
    387 	gpBufferSubData               C.GPBUFFERSUBDATA
    388 	gpCheckFramebufferStatusEXT   C.GPCHECKFRAMEBUFFERSTATUSEXT
    389 	gpCompileShader               C.GPCOMPILESHADER
    390 	gpCreateProgram               C.GPCREATEPROGRAM
    391 	gpCreateShader                C.GPCREATESHADER
    392 	gpDeleteBuffers               C.GPDELETEBUFFERS
    393 	gpDeleteFramebuffersEXT       C.GPDELETEFRAMEBUFFERSEXT
    394 	gpDeleteProgram               C.GPDELETEPROGRAM
    395 	gpDeleteShader                C.GPDELETESHADER
    396 	gpDeleteTextures              C.GPDELETETEXTURES
    397 	gpDisableVertexAttribArray    C.GPDISABLEVERTEXATTRIBARRAY
    398 	gpDrawElements                C.GPDRAWELEMENTS
    399 	gpEnable                      C.GPENABLE
    400 	gpEnableVertexAttribArray     C.GPENABLEVERTEXATTRIBARRAY
    401 	gpFlush                       C.GPFLUSH
    402 	gpFramebufferTexture2DEXT     C.GPFRAMEBUFFERTEXTURE2DEXT
    403 	gpGenBuffers                  C.GPGENBUFFERS
    404 	gpGenFramebuffersEXT          C.GPGENFRAMEBUFFERSEXT
    405 	gpGenTextures                 C.GPGENTEXTURES
    406 	gpGetDoublei_v                C.GPGETDOUBLEI_V
    407 	gpGetDoublei_vEXT             C.GPGETDOUBLEI_VEXT
    408 	gpGetError                    C.GPGETERROR
    409 	gpGetFloati_v                 C.GPGETFLOATI_V
    410 	gpGetFloati_vEXT              C.GPGETFLOATI_VEXT
    411 	gpGetIntegeri_v               C.GPGETINTEGERI_V
    412 	gpGetIntegerui64i_vNV         C.GPGETINTEGERUI64I_VNV
    413 	gpGetIntegerv                 C.GPGETINTEGERV
    414 	gpGetPointeri_vEXT            C.GPGETPOINTERI_VEXT
    415 	gpGetProgramInfoLog           C.GPGETPROGRAMINFOLOG
    416 	gpGetProgramiv                C.GPGETPROGRAMIV
    417 	gpGetShaderInfoLog            C.GPGETSHADERINFOLOG
    418 	gpGetShaderiv                 C.GPGETSHADERIV
    419 	gpGetTransformFeedbacki64_v   C.GPGETTRANSFORMFEEDBACKI64_V
    420 	gpGetTransformFeedbacki_v     C.GPGETTRANSFORMFEEDBACKI_V
    421 	gpGetUniformLocation          C.GPGETUNIFORMLOCATION
    422 	gpGetUnsignedBytei_vEXT       C.GPGETUNSIGNEDBYTEI_VEXT
    423 	gpGetVertexArrayIntegeri_vEXT C.GPGETVERTEXARRAYINTEGERI_VEXT
    424 	gpGetVertexArrayPointeri_vEXT C.GPGETVERTEXARRAYPOINTERI_VEXT
    425 	gpIsFramebufferEXT            C.GPISFRAMEBUFFEREXT
    426 	gpIsProgram                   C.GPISPROGRAM
    427 	gpIsTexture                   C.GPISTEXTURE
    428 	gpLinkProgram                 C.GPLINKPROGRAM
    429 	gpPixelStorei                 C.GPPIXELSTOREI
    430 	gpReadPixels                  C.GPREADPIXELS
    431 	gpShaderSource                C.GPSHADERSOURCE
    432 	gpTexImage2D                  C.GPTEXIMAGE2D
    433 	gpTexParameteri               C.GPTEXPARAMETERI
    434 	gpTexSubImage2D               C.GPTEXSUBIMAGE2D
    435 	gpUniform1f                   C.GPUNIFORM1F
    436 	gpUniform1i                   C.GPUNIFORM1I
    437 	gpUniform1fv                  C.GPUNIFORM1FV
    438 	gpUniform2fv                  C.GPUNIFORM2FV
    439 	gpUniform3fv                  C.GPUNIFORM3FV
    440 	gpUniform4fv                  C.GPUNIFORM4FV
    441 	gpUniformMatrix2fv            C.GPUNIFORMMATRIX2FV
    442 	gpUniformMatrix3fv            C.GPUNIFORMMATRIX3FV
    443 	gpUniformMatrix4fv            C.GPUNIFORMMATRIX4FV
    444 	gpUseProgram                  C.GPUSEPROGRAM
    445 	gpVertexAttribPointer         C.GPVERTEXATTRIBPOINTER
    446 	gpViewport                    C.GPVIEWPORT
    447 )
    448 
    449 func boolToInt(b bool) int {
    450 	if b {
    451 		return 1
    452 	}
    453 	return 0
    454 }
    455 
    456 func ActiveTexture(texture uint32) {
    457 	C.glowActiveTexture(gpActiveTexture, (C.GLenum)(texture))
    458 }
    459 
    460 func AttachShader(program uint32, shader uint32) {
    461 	C.glowAttachShader(gpAttachShader, (C.GLuint)(program), (C.GLuint)(shader))
    462 }
    463 
    464 func BindAttribLocation(program uint32, index uint32, name *uint8) {
    465 	C.glowBindAttribLocation(gpBindAttribLocation, (C.GLuint)(program), (C.GLuint)(index), (*C.GLchar)(unsafe.Pointer(name)))
    466 }
    467 
    468 func BindBuffer(target uint32, buffer uint32) {
    469 	C.glowBindBuffer(gpBindBuffer, (C.GLenum)(target), (C.GLuint)(buffer))
    470 }
    471 
    472 func BindFramebufferEXT(target uint32, framebuffer uint32) {
    473 	C.glowBindFramebufferEXT(gpBindFramebufferEXT, (C.GLenum)(target), (C.GLuint)(framebuffer))
    474 }
    475 
    476 func BindTexture(target uint32, texture uint32) {
    477 	C.glowBindTexture(gpBindTexture, (C.GLenum)(target), (C.GLuint)(texture))
    478 }
    479 
    480 func BlendFunc(sfactor uint32, dfactor uint32) {
    481 	C.glowBlendFunc(gpBlendFunc, (C.GLenum)(sfactor), (C.GLenum)(dfactor))
    482 }
    483 
    484 func BufferData(target uint32, size int, data unsafe.Pointer, usage uint32) {
    485 	C.glowBufferData(gpBufferData, (C.GLenum)(target), (C.GLsizeiptr)(size), data, (C.GLenum)(usage))
    486 }
    487 
    488 func BufferSubData(target uint32, offset int, size int, data unsafe.Pointer) {
    489 	C.glowBufferSubData(gpBufferSubData, (C.GLenum)(target), (C.GLintptr)(offset), (C.GLsizeiptr)(size), data)
    490 }
    491 
    492 func CheckFramebufferStatusEXT(target uint32) uint32 {
    493 	ret := C.glowCheckFramebufferStatusEXT(gpCheckFramebufferStatusEXT, (C.GLenum)(target))
    494 	return (uint32)(ret)
    495 }
    496 
    497 func CompileShader(shader uint32) {
    498 	C.glowCompileShader(gpCompileShader, (C.GLuint)(shader))
    499 }
    500 
    501 func CreateProgram() uint32 {
    502 	ret := C.glowCreateProgram(gpCreateProgram)
    503 	return (uint32)(ret)
    504 }
    505 
    506 func CreateShader(xtype uint32) uint32 {
    507 	ret := C.glowCreateShader(gpCreateShader, (C.GLenum)(xtype))
    508 	return (uint32)(ret)
    509 }
    510 
    511 func DeleteBuffers(n int32, buffers *uint32) {
    512 	C.glowDeleteBuffers(gpDeleteBuffers, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(buffers)))
    513 }
    514 
    515 func DeleteFramebuffersEXT(n int32, framebuffers *uint32) {
    516 	C.glowDeleteFramebuffersEXT(gpDeleteFramebuffersEXT, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(framebuffers)))
    517 }
    518 
    519 func DeleteProgram(program uint32) {
    520 	C.glowDeleteProgram(gpDeleteProgram, (C.GLuint)(program))
    521 }
    522 
    523 func DeleteShader(shader uint32) {
    524 	C.glowDeleteShader(gpDeleteShader, (C.GLuint)(shader))
    525 }
    526 
    527 func DeleteTextures(n int32, textures *uint32) {
    528 	C.glowDeleteTextures(gpDeleteTextures, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(textures)))
    529 }
    530 
    531 func DisableVertexAttribArray(index uint32) {
    532 	C.glowDisableVertexAttribArray(gpDisableVertexAttribArray, (C.GLuint)(index))
    533 }
    534 
    535 func DrawElements(mode uint32, count int32, xtype uint32, indices uintptr) {
    536 	C.glowDrawElements(gpDrawElements, (C.GLenum)(mode), (C.GLsizei)(count), (C.GLenum)(xtype), C.uintptr_t(indices))
    537 }
    538 
    539 func Enable(cap uint32) {
    540 	C.glowEnable(gpEnable, (C.GLenum)(cap))
    541 }
    542 
    543 func EnableVertexAttribArray(index uint32) {
    544 	C.glowEnableVertexAttribArray(gpEnableVertexAttribArray, (C.GLuint)(index))
    545 }
    546 
    547 func Flush() {
    548 	C.glowFlush(gpFlush)
    549 }
    550 
    551 func FramebufferTexture2DEXT(target uint32, attachment uint32, textarget uint32, texture uint32, level int32) {
    552 	C.glowFramebufferTexture2DEXT(gpFramebufferTexture2DEXT, (C.GLenum)(target), (C.GLenum)(attachment), (C.GLenum)(textarget), (C.GLuint)(texture), (C.GLint)(level))
    553 }
    554 
    555 func GenBuffers(n int32, buffers *uint32) {
    556 	C.glowGenBuffers(gpGenBuffers, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(buffers)))
    557 }
    558 
    559 func GenFramebuffersEXT(n int32, framebuffers *uint32) {
    560 	C.glowGenFramebuffersEXT(gpGenFramebuffersEXT, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(framebuffers)))
    561 }
    562 
    563 func GenTextures(n int32, textures *uint32) {
    564 	C.glowGenTextures(gpGenTextures, (C.GLsizei)(n), (*C.GLuint)(unsafe.Pointer(textures)))
    565 }
    566 
    567 func GetDoublei_v(target uint32, index uint32, data *float64) {
    568 	C.glowGetDoublei_v(gpGetDoublei_v, (C.GLenum)(target), (C.GLuint)(index), (*C.GLdouble)(unsafe.Pointer(data)))
    569 }
    570 func GetDoublei_vEXT(pname uint32, index uint32, params *float64) {
    571 	C.glowGetDoublei_vEXT(gpGetDoublei_vEXT, (C.GLenum)(pname), (C.GLuint)(index), (*C.GLdouble)(unsafe.Pointer(params)))
    572 }
    573 
    574 func GetError() uint32 {
    575 	ret := C.glowGetError(gpGetError)
    576 	return (uint32)(ret)
    577 }
    578 func GetFloati_v(target uint32, index uint32, data *float32) {
    579 	C.glowGetFloati_v(gpGetFloati_v, (C.GLenum)(target), (C.GLuint)(index), (*C.GLfloat)(unsafe.Pointer(data)))
    580 }
    581 func GetFloati_vEXT(pname uint32, index uint32, params *float32) {
    582 	C.glowGetFloati_vEXT(gpGetFloati_vEXT, (C.GLenum)(pname), (C.GLuint)(index), (*C.GLfloat)(unsafe.Pointer(params)))
    583 }
    584 
    585 func GetIntegeri_v(target uint32, index uint32, data *int32) {
    586 	C.glowGetIntegeri_v(gpGetIntegeri_v, (C.GLenum)(target), (C.GLuint)(index), (*C.GLint)(unsafe.Pointer(data)))
    587 }
    588 func GetIntegerui64i_vNV(value uint32, index uint32, result *uint64) {
    589 	C.glowGetIntegerui64i_vNV(gpGetIntegerui64i_vNV, (C.GLenum)(value), (C.GLuint)(index), (*C.GLuint64EXT)(unsafe.Pointer(result)))
    590 }
    591 func GetIntegerv(pname uint32, data *int32) {
    592 	C.glowGetIntegerv(gpGetIntegerv, (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(data)))
    593 }
    594 
    595 func GetPointeri_vEXT(pname uint32, index uint32, params *unsafe.Pointer) {
    596 	C.glowGetPointeri_vEXT(gpGetPointeri_vEXT, (C.GLenum)(pname), (C.GLuint)(index), params)
    597 }
    598 
    599 func GetProgramInfoLog(program uint32, bufSize int32, length *int32, infoLog *uint8) {
    600 	C.glowGetProgramInfoLog(gpGetProgramInfoLog, (C.GLuint)(program), (C.GLsizei)(bufSize), (*C.GLsizei)(unsafe.Pointer(length)), (*C.GLchar)(unsafe.Pointer(infoLog)))
    601 }
    602 
    603 func GetProgramiv(program uint32, pname uint32, params *int32) {
    604 	C.glowGetProgramiv(gpGetProgramiv, (C.GLuint)(program), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(params)))
    605 }
    606 
    607 func GetShaderInfoLog(shader uint32, bufSize int32, length *int32, infoLog *uint8) {
    608 	C.glowGetShaderInfoLog(gpGetShaderInfoLog, (C.GLuint)(shader), (C.GLsizei)(bufSize), (*C.GLsizei)(unsafe.Pointer(length)), (*C.GLchar)(unsafe.Pointer(infoLog)))
    609 }
    610 
    611 func GetShaderiv(shader uint32, pname uint32, params *int32) {
    612 	C.glowGetShaderiv(gpGetShaderiv, (C.GLuint)(shader), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(params)))
    613 }
    614 
    615 func GetTransformFeedbacki64_v(xfb uint32, pname uint32, index uint32, param *int64) {
    616 	C.glowGetTransformFeedbacki64_v(gpGetTransformFeedbacki64_v, (C.GLuint)(xfb), (C.GLenum)(pname), (C.GLuint)(index), (*C.GLint64)(unsafe.Pointer(param)))
    617 }
    618 func GetTransformFeedbacki_v(xfb uint32, pname uint32, index uint32, param *int32) {
    619 	C.glowGetTransformFeedbacki_v(gpGetTransformFeedbacki_v, (C.GLuint)(xfb), (C.GLenum)(pname), (C.GLuint)(index), (*C.GLint)(unsafe.Pointer(param)))
    620 }
    621 
    622 func GetUniformLocation(program uint32, name *uint8) int32 {
    623 	ret := C.glowGetUniformLocation(gpGetUniformLocation, (C.GLuint)(program), (*C.GLchar)(unsafe.Pointer(name)))
    624 	return (int32)(ret)
    625 }
    626 
    627 func GetUnsignedBytei_vEXT(target uint32, index uint32, data *uint8) {
    628 	C.glowGetUnsignedBytei_vEXT(gpGetUnsignedBytei_vEXT, (C.GLenum)(target), (C.GLuint)(index), (*C.GLubyte)(unsafe.Pointer(data)))
    629 }
    630 func GetVertexArrayIntegeri_vEXT(vaobj uint32, index uint32, pname uint32, param *int32) {
    631 	C.glowGetVertexArrayIntegeri_vEXT(gpGetVertexArrayIntegeri_vEXT, (C.GLuint)(vaobj), (C.GLuint)(index), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(param)))
    632 }
    633 func GetVertexArrayPointeri_vEXT(vaobj uint32, index uint32, pname uint32, param *unsafe.Pointer) {
    634 	C.glowGetVertexArrayPointeri_vEXT(gpGetVertexArrayPointeri_vEXT, (C.GLuint)(vaobj), (C.GLuint)(index), (C.GLenum)(pname), param)
    635 }
    636 
    637 func IsFramebufferEXT(framebuffer uint32) bool {
    638 	ret := C.glowIsFramebufferEXT(gpIsFramebufferEXT, (C.GLuint)(framebuffer))
    639 	return ret == TRUE
    640 }
    641 
    642 func IsProgram(program uint32) bool {
    643 	ret := C.glowIsProgram(gpIsProgram, (C.GLuint)(program))
    644 	return ret == TRUE
    645 }
    646 
    647 func IsTexture(texture uint32) bool {
    648 	ret := C.glowIsTexture(gpIsTexture, (C.GLuint)(texture))
    649 	return ret == TRUE
    650 }
    651 
    652 func LinkProgram(program uint32) {
    653 	C.glowLinkProgram(gpLinkProgram, (C.GLuint)(program))
    654 }
    655 
    656 func PixelStorei(pname uint32, param int32) {
    657 	C.glowPixelStorei(gpPixelStorei, (C.GLenum)(pname), (C.GLint)(param))
    658 }
    659 
    660 func ReadPixels(x int32, y int32, width int32, height int32, format uint32, xtype uint32, pixels unsafe.Pointer) {
    661 	C.glowReadPixels(gpReadPixels, (C.GLint)(x), (C.GLint)(y), (C.GLsizei)(width), (C.GLsizei)(height), (C.GLenum)(format), (C.GLenum)(xtype), pixels)
    662 }
    663 
    664 func ShaderSource(shader uint32, count int32, xstring **uint8, length *int32) {
    665 	C.glowShaderSource(gpShaderSource, (C.GLuint)(shader), (C.GLsizei)(count), (**C.GLchar)(unsafe.Pointer(xstring)), (*C.GLint)(unsafe.Pointer(length)))
    666 }
    667 
    668 func TexImage2D(target uint32, level int32, internalformat int32, width int32, height int32, border int32, format uint32, xtype uint32, pixels unsafe.Pointer) {
    669 	C.glowTexImage2D(gpTexImage2D, (C.GLenum)(target), (C.GLint)(level), (C.GLint)(internalformat), (C.GLsizei)(width), (C.GLsizei)(height), (C.GLint)(border), (C.GLenum)(format), (C.GLenum)(xtype), pixels)
    670 }
    671 
    672 func TexParameteri(target uint32, pname uint32, param int32) {
    673 	C.glowTexParameteri(gpTexParameteri, (C.GLenum)(target), (C.GLenum)(pname), (C.GLint)(param))
    674 }
    675 
    676 func TexSubImage2D(target uint32, level int32, xoffset int32, yoffset int32, width int32, height int32, format uint32, xtype uint32, pixels unsafe.Pointer) {
    677 	C.glowTexSubImage2D(gpTexSubImage2D, (C.GLenum)(target), (C.GLint)(level), (C.GLint)(xoffset), (C.GLint)(yoffset), (C.GLsizei)(width), (C.GLsizei)(height), (C.GLenum)(format), (C.GLenum)(xtype), pixels)
    678 }
    679 
    680 func Uniform1f(location int32, v0 float32) {
    681 	C.glowUniform1f(gpUniform1f, (C.GLint)(location), (C.GLfloat)(v0))
    682 }
    683 
    684 func Uniform1i(location int32, v0 int32) {
    685 	C.glowUniform1i(gpUniform1i, (C.GLint)(location), (C.GLint)(v0))
    686 }
    687 
    688 func Uniform1fv(location int32, count int32, value *float32) {
    689 	C.glowUniform1fv(gpUniform1fv, (C.GLint)(location), (C.GLsizei)(count), (*C.GLfloat)(unsafe.Pointer(value)))
    690 }
    691 
    692 func Uniform2fv(location int32, count int32, value *float32) {
    693 	C.glowUniform2fv(gpUniform2fv, (C.GLint)(location), (C.GLsizei)(count), (*C.GLfloat)(unsafe.Pointer(value)))
    694 }
    695 
    696 func Uniform3fv(location int32, count int32, value *float32) {
    697 	C.glowUniform3fv(gpUniform3fv, (C.GLint)(location), (C.GLsizei)(count), (*C.GLfloat)(unsafe.Pointer(value)))
    698 }
    699 
    700 func Uniform4fv(location int32, count int32, value *float32) {
    701 	C.glowUniform4fv(gpUniform4fv, (C.GLint)(location), (C.GLsizei)(count), (*C.GLfloat)(unsafe.Pointer(value)))
    702 }
    703 
    704 func UniformMatrix2fv(location int32, count int32, transpose bool, value *float32) {
    705 	C.glowUniformMatrix2fv(gpUniformMatrix2fv, (C.GLint)(location), (C.GLsizei)(count), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(value)))
    706 }
    707 
    708 func UniformMatrix3fv(location int32, count int32, transpose bool, value *float32) {
    709 	C.glowUniformMatrix3fv(gpUniformMatrix3fv, (C.GLint)(location), (C.GLsizei)(count), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(value)))
    710 }
    711 
    712 func UniformMatrix4fv(location int32, count int32, transpose bool, value *float32) {
    713 	C.glowUniformMatrix4fv(gpUniformMatrix4fv, (C.GLint)(location), (C.GLsizei)(count), (C.GLboolean)(boolToInt(transpose)), (*C.GLfloat)(unsafe.Pointer(value)))
    714 }
    715 
    716 func UseProgram(program uint32) {
    717 	C.glowUseProgram(gpUseProgram, (C.GLuint)(program))
    718 }
    719 
    720 func VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, pointer uintptr) {
    721 	C.glowVertexAttribPointer(gpVertexAttribPointer, (C.GLuint)(index), (C.GLint)(size), (C.GLenum)(xtype), (C.GLboolean)(boolToInt(normalized)), (C.GLsizei)(stride), C.uintptr_t(pointer))
    722 }
    723 
    724 func Viewport(x int32, y int32, width int32, height int32) {
    725 	C.glowViewport(gpViewport, (C.GLint)(x), (C.GLint)(y), (C.GLsizei)(width), (C.GLsizei)(height))
    726 }
    727 
    728 // InitWithProcAddrFunc intializes the package using the specified OpenGL
    729 // function pointer loading function.
    730 //
    731 // For more cases Init should be used.
    732 func InitWithProcAddrFunc(getProcAddr func(name string) unsafe.Pointer) error {
    733 	gpActiveTexture = (C.GPACTIVETEXTURE)(getProcAddr("glActiveTexture"))
    734 	if gpActiveTexture == nil {
    735 		return errors.New("glActiveTexture")
    736 	}
    737 	gpAttachShader = (C.GPATTACHSHADER)(getProcAddr("glAttachShader"))
    738 	if gpAttachShader == nil {
    739 		return errors.New("glAttachShader")
    740 	}
    741 	gpBindAttribLocation = (C.GPBINDATTRIBLOCATION)(getProcAddr("glBindAttribLocation"))
    742 	if gpBindAttribLocation == nil {
    743 		return errors.New("glBindAttribLocation")
    744 	}
    745 	gpBindBuffer = (C.GPBINDBUFFER)(getProcAddr("glBindBuffer"))
    746 	if gpBindBuffer == nil {
    747 		return errors.New("glBindBuffer")
    748 	}
    749 	gpBindFramebufferEXT = (C.GPBINDFRAMEBUFFEREXT)(getProcAddr("glBindFramebufferEXT"))
    750 	gpBindTexture = (C.GPBINDTEXTURE)(getProcAddr("glBindTexture"))
    751 	if gpBindTexture == nil {
    752 		return errors.New("glBindTexture")
    753 	}
    754 	gpBlendFunc = (C.GPBLENDFUNC)(getProcAddr("glBlendFunc"))
    755 	if gpBlendFunc == nil {
    756 		return errors.New("glBlendFunc")
    757 	}
    758 	gpBufferData = (C.GPBUFFERDATA)(getProcAddr("glBufferData"))
    759 	if gpBufferData == nil {
    760 		return errors.New("glBufferData")
    761 	}
    762 	gpBufferSubData = (C.GPBUFFERSUBDATA)(getProcAddr("glBufferSubData"))
    763 	if gpBufferSubData == nil {
    764 		return errors.New("glBufferSubData")
    765 	}
    766 	gpCheckFramebufferStatusEXT = (C.GPCHECKFRAMEBUFFERSTATUSEXT)(getProcAddr("glCheckFramebufferStatusEXT"))
    767 	gpCompileShader = (C.GPCOMPILESHADER)(getProcAddr("glCompileShader"))
    768 	if gpCompileShader == nil {
    769 		return errors.New("glCompileShader")
    770 	}
    771 	gpCreateProgram = (C.GPCREATEPROGRAM)(getProcAddr("glCreateProgram"))
    772 	if gpCreateProgram == nil {
    773 		return errors.New("glCreateProgram")
    774 	}
    775 	gpCreateShader = (C.GPCREATESHADER)(getProcAddr("glCreateShader"))
    776 	if gpCreateShader == nil {
    777 		return errors.New("glCreateShader")
    778 	}
    779 	gpDeleteBuffers = (C.GPDELETEBUFFERS)(getProcAddr("glDeleteBuffers"))
    780 	if gpDeleteBuffers == nil {
    781 		return errors.New("glDeleteBuffers")
    782 	}
    783 	gpDeleteFramebuffersEXT = (C.GPDELETEFRAMEBUFFERSEXT)(getProcAddr("glDeleteFramebuffersEXT"))
    784 	gpDeleteProgram = (C.GPDELETEPROGRAM)(getProcAddr("glDeleteProgram"))
    785 	if gpDeleteProgram == nil {
    786 		return errors.New("glDeleteProgram")
    787 	}
    788 	gpDeleteShader = (C.GPDELETESHADER)(getProcAddr("glDeleteShader"))
    789 	if gpDeleteShader == nil {
    790 		return errors.New("glDeleteShader")
    791 	}
    792 	gpDeleteTextures = (C.GPDELETETEXTURES)(getProcAddr("glDeleteTextures"))
    793 	if gpDeleteTextures == nil {
    794 		return errors.New("glDeleteTextures")
    795 	}
    796 	gpDisableVertexAttribArray = (C.GPDISABLEVERTEXATTRIBARRAY)(getProcAddr("glDisableVertexAttribArray"))
    797 	if gpDisableVertexAttribArray == nil {
    798 		return errors.New("glDisableVertexAttribArray")
    799 	}
    800 	gpDrawElements = (C.GPDRAWELEMENTS)(getProcAddr("glDrawElements"))
    801 	if gpDrawElements == nil {
    802 		return errors.New("glDrawElements")
    803 	}
    804 	gpEnable = (C.GPENABLE)(getProcAddr("glEnable"))
    805 	if gpEnable == nil {
    806 		return errors.New("glEnable")
    807 	}
    808 	gpEnableVertexAttribArray = (C.GPENABLEVERTEXATTRIBARRAY)(getProcAddr("glEnableVertexAttribArray"))
    809 	if gpEnableVertexAttribArray == nil {
    810 		return errors.New("glEnableVertexAttribArray")
    811 	}
    812 	gpFlush = (C.GPFLUSH)(getProcAddr("glFlush"))
    813 	if gpFlush == nil {
    814 		return errors.New("glFlush")
    815 	}
    816 	gpFramebufferTexture2DEXT = (C.GPFRAMEBUFFERTEXTURE2DEXT)(getProcAddr("glFramebufferTexture2DEXT"))
    817 	gpGenBuffers = (C.GPGENBUFFERS)(getProcAddr("glGenBuffers"))
    818 	if gpGenBuffers == nil {
    819 		return errors.New("glGenBuffers")
    820 	}
    821 	gpGenFramebuffersEXT = (C.GPGENFRAMEBUFFERSEXT)(getProcAddr("glGenFramebuffersEXT"))
    822 	gpGenTextures = (C.GPGENTEXTURES)(getProcAddr("glGenTextures"))
    823 	if gpGenTextures == nil {
    824 		return errors.New("glGenTextures")
    825 	}
    826 	gpGetDoublei_v = (C.GPGETDOUBLEI_V)(getProcAddr("glGetDoublei_v"))
    827 	gpGetDoublei_vEXT = (C.GPGETDOUBLEI_VEXT)(getProcAddr("glGetDoublei_vEXT"))
    828 	gpGetError = (C.GPGETERROR)(getProcAddr("glGetError"))
    829 	if gpGetError == nil {
    830 		return errors.New("glGetError")
    831 	}
    832 	gpGetFloati_v = (C.GPGETFLOATI_V)(getProcAddr("glGetFloati_v"))
    833 	gpGetFloati_vEXT = (C.GPGETFLOATI_VEXT)(getProcAddr("glGetFloati_vEXT"))
    834 	gpGetIntegeri_v = (C.GPGETINTEGERI_V)(getProcAddr("glGetIntegeri_v"))
    835 	gpGetIntegerui64i_vNV = (C.GPGETINTEGERUI64I_VNV)(getProcAddr("glGetIntegerui64i_vNV"))
    836 	gpGetIntegerv = (C.GPGETINTEGERV)(getProcAddr("glGetIntegerv"))
    837 	if gpGetIntegerv == nil {
    838 		return errors.New("glGetIntegerv")
    839 	}
    840 	gpGetPointeri_vEXT = (C.GPGETPOINTERI_VEXT)(getProcAddr("glGetPointeri_vEXT"))
    841 	gpGetProgramInfoLog = (C.GPGETPROGRAMINFOLOG)(getProcAddr("glGetProgramInfoLog"))
    842 	if gpGetProgramInfoLog == nil {
    843 		return errors.New("glGetProgramInfoLog")
    844 	}
    845 	gpGetProgramiv = (C.GPGETPROGRAMIV)(getProcAddr("glGetProgramiv"))
    846 	if gpGetProgramiv == nil {
    847 		return errors.New("glGetProgramiv")
    848 	}
    849 	gpGetShaderInfoLog = (C.GPGETSHADERINFOLOG)(getProcAddr("glGetShaderInfoLog"))
    850 	if gpGetShaderInfoLog == nil {
    851 		return errors.New("glGetShaderInfoLog")
    852 	}
    853 	gpGetShaderiv = (C.GPGETSHADERIV)(getProcAddr("glGetShaderiv"))
    854 	if gpGetShaderiv == nil {
    855 		return errors.New("glGetShaderiv")
    856 	}
    857 	gpGetTransformFeedbacki64_v = (C.GPGETTRANSFORMFEEDBACKI64_V)(getProcAddr("glGetTransformFeedbacki64_v"))
    858 	gpGetTransformFeedbacki_v = (C.GPGETTRANSFORMFEEDBACKI_V)(getProcAddr("glGetTransformFeedbacki_v"))
    859 	gpGetUniformLocation = (C.GPGETUNIFORMLOCATION)(getProcAddr("glGetUniformLocation"))
    860 	if gpGetUniformLocation == nil {
    861 		return errors.New("glGetUniformLocation")
    862 	}
    863 	gpGetUnsignedBytei_vEXT = (C.GPGETUNSIGNEDBYTEI_VEXT)(getProcAddr("glGetUnsignedBytei_vEXT"))
    864 	gpGetVertexArrayIntegeri_vEXT = (C.GPGETVERTEXARRAYINTEGERI_VEXT)(getProcAddr("glGetVertexArrayIntegeri_vEXT"))
    865 	gpGetVertexArrayPointeri_vEXT = (C.GPGETVERTEXARRAYPOINTERI_VEXT)(getProcAddr("glGetVertexArrayPointeri_vEXT"))
    866 	gpIsFramebufferEXT = (C.GPISFRAMEBUFFEREXT)(getProcAddr("glIsFramebufferEXT"))
    867 	gpIsProgram = (C.GPISPROGRAM)(getProcAddr("glIsProgram"))
    868 	if gpIsProgram == nil {
    869 		return errors.New("glIsProgram")
    870 	}
    871 	gpIsTexture = (C.GPISTEXTURE)(getProcAddr("glIsTexture"))
    872 	if gpIsTexture == nil {
    873 		return errors.New("glIsTexture")
    874 	}
    875 	gpLinkProgram = (C.GPLINKPROGRAM)(getProcAddr("glLinkProgram"))
    876 	if gpLinkProgram == nil {
    877 		return errors.New("glLinkProgram")
    878 	}
    879 	gpPixelStorei = (C.GPPIXELSTOREI)(getProcAddr("glPixelStorei"))
    880 	if gpPixelStorei == nil {
    881 		return errors.New("glPixelStorei")
    882 	}
    883 	gpReadPixels = (C.GPREADPIXELS)(getProcAddr("glReadPixels"))
    884 	if gpReadPixels == nil {
    885 		return errors.New("glReadPixels")
    886 	}
    887 	gpShaderSource = (C.GPSHADERSOURCE)(getProcAddr("glShaderSource"))
    888 	if gpShaderSource == nil {
    889 		return errors.New("glShaderSource")
    890 	}
    891 	gpTexImage2D = (C.GPTEXIMAGE2D)(getProcAddr("glTexImage2D"))
    892 	if gpTexImage2D == nil {
    893 		return errors.New("glTexImage2D")
    894 	}
    895 	gpTexParameteri = (C.GPTEXPARAMETERI)(getProcAddr("glTexParameteri"))
    896 	if gpTexParameteri == nil {
    897 		return errors.New("glTexParameteri")
    898 	}
    899 	gpTexSubImage2D = (C.GPTEXSUBIMAGE2D)(getProcAddr("glTexSubImage2D"))
    900 	if gpTexSubImage2D == nil {
    901 		return errors.New("glTexSubImage2D")
    902 	}
    903 	gpUniform1f = (C.GPUNIFORM1F)(getProcAddr("glUniform1f"))
    904 	if gpUniform1f == nil {
    905 		return errors.New("glUniform1f")
    906 	}
    907 	gpUniform1i = (C.GPUNIFORM1I)(getProcAddr("glUniform1i"))
    908 	if gpUniform1i == nil {
    909 		return errors.New("glUniform1i")
    910 	}
    911 	gpUniform1fv = (C.GPUNIFORM1FV)(getProcAddr("glUniform1fv"))
    912 	if gpUniform1fv == nil {
    913 		return errors.New("glUniform1fv")
    914 	}
    915 	gpUniform2fv = (C.GPUNIFORM2FV)(getProcAddr("glUniform2fv"))
    916 	if gpUniform2fv == nil {
    917 		return errors.New("glUniform2fv")
    918 	}
    919 	gpUniform3fv = (C.GPUNIFORM3FV)(getProcAddr("glUniform3fv"))
    920 	if gpUniform3fv == nil {
    921 		return errors.New("glUniform3fv")
    922 	}
    923 	gpUniform4fv = (C.GPUNIFORM4FV)(getProcAddr("glUniform4fv"))
    924 	if gpUniform4fv == nil {
    925 		return errors.New("glUniform4fv")
    926 	}
    927 	gpUniformMatrix2fv = (C.GPUNIFORMMATRIX2FV)(getProcAddr("glUniformMatrix2fv"))
    928 	if gpUniformMatrix2fv == nil {
    929 		return errors.New("glUniformMatrix2fv")
    930 	}
    931 	gpUniformMatrix3fv = (C.GPUNIFORMMATRIX3FV)(getProcAddr("glUniformMatrix3fv"))
    932 	if gpUniformMatrix3fv == nil {
    933 		return errors.New("glUniformMatrix3fv")
    934 	}
    935 	gpUniformMatrix4fv = (C.GPUNIFORMMATRIX4FV)(getProcAddr("glUniformMatrix4fv"))
    936 	if gpUniformMatrix4fv == nil {
    937 		return errors.New("glUniformMatrix4fv")
    938 	}
    939 	gpUseProgram = (C.GPUSEPROGRAM)(getProcAddr("glUseProgram"))
    940 	if gpUseProgram == nil {
    941 		return errors.New("glUseProgram")
    942 	}
    943 	gpVertexAttribPointer = (C.GPVERTEXATTRIBPOINTER)(getProcAddr("glVertexAttribPointer"))
    944 	if gpVertexAttribPointer == nil {
    945 		return errors.New("glVertexAttribPointer")
    946 	}
    947 	gpViewport = (C.GPVIEWPORT)(getProcAddr("glViewport"))
    948 	if gpViewport == nil {
    949 		return errors.New("glViewport")
    950 	}
    951 	return nil
    952 }