| // Copyright 2015 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build darwin linux |
| |
| #include <stdlib.h> |
| #include "_cgo_export.h" |
| #include "work.h" |
| |
| uintptr_t processFn(struct fnargs* args) { |
| uintptr_t ret = 0; |
| switch (args->fn) { |
| case glfnUNDEFINED: |
| abort(); // bad glfn |
| break; |
| case glfnActiveTexture: |
| glActiveTexture((GLenum)args->a0); |
| break; |
| case glfnAttachShader: |
| glAttachShader((GLint)args->a0, (GLint)args->a1); |
| break; |
| case glfnBindAttribLocation: |
| glBindAttribLocation((GLint)args->a0, (GLint)args->a1, (GLchar*)args->a2); |
| free((void*)args->a2); |
| break; |
| case glfnBindBuffer: |
| glBindBuffer((GLenum)args->a0, (GLuint)args->a1); |
| break; |
| case glfnBindFramebuffer: |
| glBindFramebuffer((GLenum)args->a0, (GLint)args->a1); |
| break; |
| case glfnBindRenderbuffer: |
| glBindRenderbuffer((GLenum)args->a0, (GLint)args->a1); |
| break; |
| case glfnBindTexture: |
| glBindTexture((GLenum)args->a0, (GLint)args->a1); |
| break; |
| case glfnBlendColor: |
| glBlendColor(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); |
| break; |
| case glfnBlendEquation: |
| glBlendEquation((GLenum)args->a0); |
| break; |
| case glfnBlendEquationSeparate: |
| glBlendEquationSeparate((GLenum)args->a0, (GLenum)args->a1); |
| break; |
| case glfnBlendFunc: |
| glBlendFunc((GLenum)args->a0, (GLenum)args->a1); |
| break; |
| case glfnBlendFuncSeparate: |
| glBlendFuncSeparate((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLenum)args->a3); |
| break; |
| case glfnBufferData: |
| glBufferData((GLenum)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2, (GLenum)args->a3); |
| break; |
| case glfnBufferSubData: |
| glBufferSubData((GLenum)args->a0, (GLint)args->a1, (GLsizeiptr)args->a2, (GLvoid*)args->a3); |
| break; |
| case glfnCheckFramebufferStatus: |
| ret = glCheckFramebufferStatus((GLenum)args->a0); |
| break; |
| case glfnClear: |
| glClear((GLenum)args->a0); |
| break; |
| case glfnClearColor: |
| glClearColor(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); |
| break; |
| case glfnClearDepthf: |
| glClearDepthf(*(GLfloat*)&args->a0); |
| break; |
| case glfnClearStencil: |
| glClearStencil((GLint)args->a0); |
| break; |
| case glfnColorMask: |
| glColorMask((GLboolean)args->a0, (GLboolean)args->a1, (GLboolean)args->a2, (GLboolean)args->a3); |
| break; |
| case glfnCompileShader: |
| glCompileShader((GLint)args->a0); |
| break; |
| case glfnCompressedTexImage2D: |
| glCompressedTexImage2D((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLsizeiptr)args->a6, (GLvoid*)args->a7); |
| break; |
| case glfnCompressedTexSubImage2D: |
| glCompressedTexSubImage2D((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLenum)args->a6, (GLsizeiptr)args->a7, (GLvoid*)args->a8); |
| break; |
| case glfnCopyTexImage2D: |
| glCopyTexImage2D((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLint)args->a6, (GLint)args->a7); |
| break; |
| case glfnCopyTexSubImage2D: |
| glCopyTexSubImage2D((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4, (GLint)args->a5, (GLint)args->a6, (GLint)args->a7); |
| break; |
| case glfnCreateProgram: |
| ret = glCreateProgram(); |
| break; |
| case glfnCreateShader: |
| ret = glCreateShader((GLenum)args->a0); |
| break; |
| case glfnCullFace: |
| glCullFace((GLenum)args->a0); |
| break; |
| case glfnDeleteBuffer: |
| glDeleteBuffers(1, (const GLuint*)(&args->a0)); |
| break; |
| case glfnDeleteFramebuffer: |
| glDeleteFramebuffers(1, (const GLuint*)(&args->a0)); |
| break; |
| case glfnDeleteProgram: |
| glDeleteProgram((GLint)args->a0); |
| break; |
| case glfnDeleteRenderbuffer: |
| glDeleteRenderbuffers(1, (const GLuint*)(&args->a0)); |
| break; |
| case glfnDeleteShader: |
| glDeleteShader((GLint)args->a0); |
| break; |
| case glfnDeleteTexture: |
| glDeleteTextures(1, (const GLuint*)(&args->a0)); |
| break; |
| case glfnDepthFunc: |
| glDepthFunc((GLenum)args->a0); |
| break; |
| case glfnDepthMask: |
| glDepthMask((GLboolean)args->a0); |
| break; |
| case glfnDepthRangef: |
| glDepthRangef(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1); |
| break; |
| case glfnDetachShader: |
| glDetachShader((GLint)args->a0, (GLint)args->a1); |
| break; |
| case glfnDisable: |
| glDisable((GLenum)args->a0); |
| break; |
| case glfnDisableVertexAttribArray: |
| glDisableVertexAttribArray((GLint)args->a0); |
| break; |
| case glfnDrawArrays: |
| glDrawArrays((GLenum)args->a0, (GLint)args->a1, (GLint)args->a2); |
| break; |
| case glfnDrawElements: |
| glDrawElements((GLenum)args->a0, (GLint)args->a1, (GLenum)args->a2, (void*)args->a3); |
| break; |
| case glfnEnable: |
| glEnable((GLenum)args->a0); |
| break; |
| case glfnEnableVertexAttribArray: |
| glEnableVertexAttribArray((GLint)args->a0); |
| break; |
| case glfnFinish: |
| glFinish(); |
| break; |
| case glfnFlush: |
| glFlush(); |
| break; |
| case glfnFramebufferRenderbuffer: |
| glFramebufferRenderbuffer((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint)args->a3); |
| break; |
| case glfnFramebufferTexture2D: |
| glFramebufferTexture2D((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint)args->a3, (GLint)args->a4); |
| break; |
| case glfnFrontFace: |
| glFrontFace((GLenum)args->a0); |
| break; |
| case glfnGenBuffer: |
| glGenBuffers(1, (GLuint*)&ret); |
| break; |
| case glfnGenFramebuffer: |
| glGenFramebuffers(1, (GLuint*)&ret); |
| break; |
| case glfnGenRenderbuffer: |
| glGenRenderbuffers(1, (GLuint*)&ret); |
| break; |
| case glfnGenTexture: |
| glGenTextures(1, (GLuint*)&ret); |
| break; |
| case glfnGenerateMipmap: |
| glGenerateMipmap((GLenum)args->a0); |
| break; |
| case glfnGetActiveAttrib: |
| glGetActiveAttrib( |
| (GLuint)args->a0, |
| (GLuint)args->a1, |
| (GLsizei)args->a2, |
| NULL, |
| (GLint*)args->a4, |
| (GLenum*)args->a5, |
| (GLchar*)args->a6); |
| break; |
| case glfnGetActiveUniform: |
| glGetActiveUniform( |
| (GLuint)args->a0, |
| (GLuint)args->a1, |
| (GLsizei)args->a2, |
| NULL, |
| (GLint*)args->a4, |
| (GLenum*)args->a5, |
| (GLchar*)args->a6); |
| break; |
| case glfnGetAttachedShaders: |
| glGetAttachedShaders((GLuint)args->a0, (GLsizei)args->a1, (GLsizei*)args->a2, (GLuint*)args->a3); |
| break; |
| case glfnGetAttribLocation: |
| ret = glGetAttribLocation((GLint)args->a0, (GLchar*)args->a1); |
| free((void*)args->a1); |
| break; |
| case glfnGetBooleanv: |
| glGetBooleanv((GLenum)args->a0, (GLboolean*)args->a1); |
| break; |
| case glfnGetBufferParameteri: |
| glGetBufferParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)&ret); |
| break; |
| case glfnGetFloatv: |
| glGetFloatv((GLenum)args->a0, (GLfloat*)args->a1); |
| break; |
| case glfnGetIntegerv: |
| glGetIntegerv((GLenum)args->a0, (GLint*)args->a1); |
| break; |
| case glfnGetError: |
| ret = glGetError(); |
| break; |
| case glfnGetFramebufferAttachmentParameteriv: |
| glGetFramebufferAttachmentParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLint*)&ret); |
| break; |
| case glfnGetProgramiv: |
| glGetProgramiv((GLint)args->a0, (GLenum)args->a1, (GLint*)&ret); |
| break; |
| case glfnGetProgramInfoLog: |
| glGetProgramInfoLog((GLuint)args->a0, (GLsizei)args->a1, (GLsizei*)args->a2, (GLchar*)args->a3); |
| break; |
| case glfnGetRenderbufferParameteriv: |
| glGetRenderbufferParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)&ret); |
| break; |
| case glfnGetShaderiv: |
| glGetShaderiv((GLint)args->a0, (GLenum)args->a1, (GLint*)&ret); |
| break; |
| case glfnGetShaderInfoLog: |
| glGetShaderInfoLog((GLuint)args->a0, (GLsizei)args->a1, (GLsizei*)args->a2, (GLchar*)args->a3); |
| break; |
| case glfnGetShaderPrecisionFormat: |
| glGetShaderPrecisionFormat((GLenum)args->a0, (GLenum)args->a1, (GLint*)args->a2, (GLint*)args->a3); |
| break; |
| case glfnGetShaderSource: |
| glGetShaderSource((GLuint)args->a0, (GLsizei)args->a1, (GLsizei*)args->a2, (GLchar*)args->a3); |
| break; |
| case glfnGetString: |
| ret = (uintptr_t)glGetString((GLenum)args->a0); |
| break; |
| case glfnGetTexParameterfv: |
| glGetTexParameterfv((GLenum)args->a0, (GLenum)args->a1, (GLfloat*)args->a2); |
| break; |
| case glfnGetTexParameteriv: |
| glGetTexParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)args->a2); |
| break; |
| case glfnGetUniformfv: |
| glGetUniformfv((GLuint)args->a0, (GLint)args->a1, (GLfloat*)args->a2); |
| break; |
| case glfnGetUniformiv: |
| glGetUniformiv((GLuint)args->a0, (GLint)args->a1, (GLint*)args->a2); |
| break; |
| case glfnGetUniformLocation: |
| ret = glGetUniformLocation((GLint)args->a0, (GLchar*)args->a1); |
| free((void*)args->a1); |
| break; |
| case glfnGetVertexAttribfv: |
| glGetVertexAttribfv((GLuint)args->a0, (GLenum)args->a1, (GLfloat*)args->a2); |
| break; |
| case glfnGetVertexAttribiv: |
| glGetVertexAttribiv((GLuint)args->a0, (GLenum)args->a1, (GLint*)args->a2); |
| break; |
| case glfnHint: |
| glHint((GLenum)args->a0, (GLenum)args->a1); |
| break; |
| case glfnIsBuffer: |
| ret = glIsBuffer((GLint)args->a0); |
| break; |
| case glfnIsEnabled: |
| ret = glIsEnabled((GLenum)args->a0); |
| break; |
| case glfnIsFramebuffer: |
| ret = glIsFramebuffer((GLint)args->a0); |
| break; |
| case glfnIsProgram: |
| ret = glIsProgram((GLint)args->a0); |
| break; |
| case glfnIsRenderbuffer: |
| ret = glIsRenderbuffer((GLint)args->a0); |
| break; |
| case glfnIsShader: |
| ret = glIsShader((GLint)args->a0); |
| break; |
| case glfnIsTexture: |
| ret = glIsTexture((GLint)args->a0); |
| break; |
| case glfnLineWidth: |
| glLineWidth(*(GLfloat*)&args->a0); |
| break; |
| case glfnLinkProgram: |
| glLinkProgram((GLint)args->a0); |
| break; |
| case glfnPixelStorei: |
| glPixelStorei((GLenum)args->a0, (GLint)args->a1); |
| break; |
| case glfnPolygonOffset: |
| glPolygonOffset(*(GLfloat*)&args->a0, *(GLfloat*)&args->a1); |
| break; |
| case glfnReadPixels: |
| glReadPixels((GLint)args->a0, (GLint)args->a1, (GLsizei)args->a2, (GLsizei)args->a3, (GLenum)args->a4, (GLenum)args->a5, (void*)args->a6); |
| break; |
| case glfnReleaseShaderCompiler: |
| glReleaseShaderCompiler(); |
| break; |
| case glfnRenderbufferStorage: |
| glRenderbufferStorage((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2, (GLint)args->a3); |
| break; |
| case glfnSampleCoverage: |
| glSampleCoverage(*(GLfloat*)&args->a0, (GLboolean)args->a1); |
| break; |
| case glfnScissor: |
| glScissor((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); |
| break; |
| case glfnShaderSource: |
| #if defined(os_ios) || defined(os_osx) |
| glShaderSource((GLuint)args->a0, (GLsizei)args->a1, (const GLchar *const *)args->a2, NULL); |
| #else |
| glShaderSource((GLuint)args->a0, (GLsizei)args->a1, (const GLchar **)args->a2, NULL); |
| #endif |
| free(*(void**)args->a2); |
| free((void*)args->a2); |
| break; |
| case glfnStencilFunc: |
| glStencilFunc((GLenum)args->a0, (GLint)args->a1, (GLuint)args->a2); |
| break; |
| case glfnStencilFuncSeparate: |
| glStencilFuncSeparate((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2, (GLuint)args->a3); |
| break; |
| case glfnStencilMask: |
| glStencilMask((GLuint)args->a0); |
| break; |
| case glfnStencilMaskSeparate: |
| glStencilMaskSeparate((GLenum)args->a0, (GLuint)args->a1); |
| break; |
| case glfnStencilOp: |
| glStencilOp((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2); |
| break; |
| case glfnStencilOpSeparate: |
| glStencilOpSeparate((GLenum)args->a0, (GLenum)args->a1, (GLenum)args->a2, (GLenum)args->a3); |
| break; |
| case glfnTexImage2D: |
| glTexImage2D( |
| (GLenum)args->a0, |
| (GLint)args->a1, |
| (GLint)args->a2, |
| (GLsizei)args->a3, |
| (GLsizei)args->a4, |
| 0, // border |
| (GLenum)args->a5, |
| (GLenum)args->a6, |
| (const GLvoid*)args->a7); |
| break; |
| case glfnTexSubImage2D: |
| glTexSubImage2D( |
| (GLenum)args->a0, |
| (GLint)args->a1, |
| (GLint)args->a2, |
| (GLint)args->a3, |
| (GLsizei)args->a4, |
| (GLsizei)args->a5, |
| (GLenum)args->a6, |
| (GLenum)args->a7, |
| (const GLvoid*)args->a8); |
| break; |
| case glfnTexParameterf: |
| glTexParameterf((GLenum)args->a0, (GLenum)args->a1, *(GLfloat*)&args->a2); |
| break; |
| case glfnTexParameterfv: |
| glTexParameterfv((GLenum)args->a0, (GLenum)args->a1, (GLfloat*)args->a2); |
| break; |
| case glfnTexParameteri: |
| glTexParameteri((GLenum)args->a0, (GLenum)args->a1, (GLint)args->a2); |
| break; |
| case glfnTexParameteriv: |
| glTexParameteriv((GLenum)args->a0, (GLenum)args->a1, (GLint*)args->a2); |
| break; |
| case glfnUniform1f: |
| glUniform1f((GLint)args->a0, *(GLfloat*)&args->a1); |
| break; |
| case glfnUniform1fv: |
| glUniform1fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform1i: |
| glUniform1i((GLint)args->a0, (GLint)args->a1); |
| break; |
| case glfnUniform1iv: |
| glUniform1iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform2f: |
| glUniform2f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2); |
| break; |
| case glfnUniform2fv: |
| glUniform2fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform2i: |
| glUniform2i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2); |
| break; |
| case glfnUniform2iv: |
| glUniform2iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform3f: |
| glUniform3f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); |
| break; |
| case glfnUniform3fv: |
| glUniform3fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform3i: |
| glUniform3i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); |
| break; |
| case glfnUniform3iv: |
| glUniform3iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform4f: |
| glUniform4f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3, *(GLfloat*)&args->a4); |
| break; |
| case glfnUniform4fv: |
| glUniform4fv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniform4i: |
| glUniform4i((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3, (GLint)args->a4); |
| break; |
| case glfnUniform4iv: |
| glUniform4iv((GLint)args->a0, (GLsizeiptr)args->a1, (GLvoid*)args->a2); |
| break; |
| case glfnUniformMatrix2fv: |
| glUniformMatrix2fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)args->a2); |
| break; |
| case glfnUniformMatrix3fv: |
| glUniformMatrix3fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)args->a2); |
| break; |
| case glfnUniformMatrix4fv: |
| glUniformMatrix4fv((GLint)args->a0, (GLsizeiptr)args->a1, 0, (GLvoid*)args->a2); |
| break; |
| case glfnUseProgram: |
| glUseProgram((GLint)args->a0); |
| break; |
| case glfnValidateProgram: |
| glValidateProgram((GLint)args->a0); |
| break; |
| case glfnVertexAttrib1f: |
| glVertexAttrib1f((GLint)args->a0, *(GLfloat*)&args->a1); |
| break; |
| case glfnVertexAttrib1fv: |
| glVertexAttrib1fv((GLint)args->a0, (GLfloat*)args->a1); |
| break; |
| case glfnVertexAttrib2f: |
| glVertexAttrib2f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2); |
| break; |
| case glfnVertexAttrib2fv: |
| glVertexAttrib2fv((GLint)args->a0, (GLfloat*)args->a1); |
| break; |
| case glfnVertexAttrib3f: |
| glVertexAttrib3f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3); |
| break; |
| case glfnVertexAttrib3fv: |
| glVertexAttrib3fv((GLint)args->a0, (GLfloat*)args->a1); |
| break; |
| case glfnVertexAttrib4f: |
| glVertexAttrib4f((GLint)args->a0, *(GLfloat*)&args->a1, *(GLfloat*)&args->a2, *(GLfloat*)&args->a3, *(GLfloat*)&args->a4); |
| break; |
| case glfnVertexAttrib4fv: |
| glVertexAttrib4fv((GLint)args->a0, (GLfloat*)args->a1); |
| break; |
| case glfnVertexAttribPointer: |
| glVertexAttribPointer((GLuint)args->a0, (GLint)args->a1, (GLenum)args->a2, (GLboolean)args->a3, (GLsizei)args->a4, (const GLvoid*)args->a5); |
| break; |
| case glfnViewport: |
| glViewport((GLint)args->a0, (GLint)args->a1, (GLint)args->a2, (GLint)args->a3); |
| break; |
| } |
| return ret; |
| } |