work.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. // Copyright 2015 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. #ifdef os_android
  5. // TODO(crawshaw): We could include <android/api-level.h> and
  6. // condition on __ANDROID_API__ to get GLES3 headers. However
  7. // we also need to add -lGLESv3 to LDFLAGS, which we cannot do
  8. // from inside an ifdef.
  9. #include <GLES2/gl2.h>
  10. #elif os_linux
  11. #include <GLES3/gl3.h> // install on Ubuntu with: sudo apt-get install libegl1-mesa-dev libgles2-mesa-dev libx11-dev
  12. #elif os_openbsd
  13. #include <GLES3/gl3.h>
  14. #endif
  15. #ifdef os_ios
  16. #include <OpenGLES/ES2/glext.h>
  17. #endif
  18. #ifdef os_macos
  19. #include <OpenGL/gl3.h>
  20. #define GL_ES_VERSION_3_0 1
  21. #endif
  22. #if defined(GL_ES_VERSION_3_0) && GL_ES_VERSION_3_0
  23. #define GLES_VERSION "GL_ES_3_0"
  24. #else
  25. #define GLES_VERSION "GL_ES_2_0"
  26. #endif
  27. #include <stdint.h>
  28. #include <stdlib.h>
  29. // TODO: generate this enum from fn.go.
  30. typedef enum {
  31. glfnUNDEFINED,
  32. glfnActiveTexture,
  33. glfnAttachShader,
  34. glfnBindAttribLocation,
  35. glfnBindBuffer,
  36. glfnBindFramebuffer,
  37. glfnBindRenderbuffer,
  38. glfnBindTexture,
  39. glfnBindVertexArray,
  40. glfnBlendColor,
  41. glfnBlendEquation,
  42. glfnBlendEquationSeparate,
  43. glfnBlendFunc,
  44. glfnBlendFuncSeparate,
  45. glfnBufferData,
  46. glfnBufferSubData,
  47. glfnCheckFramebufferStatus,
  48. glfnClear,
  49. glfnClearColor,
  50. glfnClearDepthf,
  51. glfnClearStencil,
  52. glfnColorMask,
  53. glfnCompileShader,
  54. glfnCompressedTexImage2D,
  55. glfnCompressedTexSubImage2D,
  56. glfnCopyTexImage2D,
  57. glfnCopyTexSubImage2D,
  58. glfnCreateProgram,
  59. glfnCreateShader,
  60. glfnCullFace,
  61. glfnDeleteBuffer,
  62. glfnDeleteFramebuffer,
  63. glfnDeleteProgram,
  64. glfnDeleteRenderbuffer,
  65. glfnDeleteShader,
  66. glfnDeleteTexture,
  67. glfnDeleteVertexArray,
  68. glfnDepthFunc,
  69. glfnDepthRangef,
  70. glfnDepthMask,
  71. glfnDetachShader,
  72. glfnDisable,
  73. glfnDisableVertexAttribArray,
  74. glfnDrawArrays,
  75. glfnDrawElements,
  76. glfnEnable,
  77. glfnEnableVertexAttribArray,
  78. glfnFinish,
  79. glfnFlush,
  80. glfnFramebufferRenderbuffer,
  81. glfnFramebufferTexture2D,
  82. glfnFrontFace,
  83. glfnGenBuffer,
  84. glfnGenFramebuffer,
  85. glfnGenRenderbuffer,
  86. glfnGenTexture,
  87. glfnGenVertexArray,
  88. glfnGenerateMipmap,
  89. glfnGetActiveAttrib,
  90. glfnGetActiveUniform,
  91. glfnGetAttachedShaders,
  92. glfnGetAttribLocation,
  93. glfnGetBooleanv,
  94. glfnGetBufferParameteri,
  95. glfnGetError,
  96. glfnGetFloatv,
  97. glfnGetFramebufferAttachmentParameteriv,
  98. glfnGetIntegerv,
  99. glfnGetProgramInfoLog,
  100. glfnGetProgramiv,
  101. glfnGetRenderbufferParameteriv,
  102. glfnGetShaderInfoLog,
  103. glfnGetShaderPrecisionFormat,
  104. glfnGetShaderSource,
  105. glfnGetShaderiv,
  106. glfnGetString,
  107. glfnGetTexParameterfv,
  108. glfnGetTexParameteriv,
  109. glfnGetUniformLocation,
  110. glfnGetUniformfv,
  111. glfnGetUniformiv,
  112. glfnGetVertexAttribfv,
  113. glfnGetVertexAttribiv,
  114. glfnHint,
  115. glfnIsBuffer,
  116. glfnIsEnabled,
  117. glfnIsFramebuffer,
  118. glfnIsProgram,
  119. glfnIsRenderbuffer,
  120. glfnIsShader,
  121. glfnIsTexture,
  122. glfnLineWidth,
  123. glfnLinkProgram,
  124. glfnPixelStorei,
  125. glfnPolygonOffset,
  126. glfnReadPixels,
  127. glfnReleaseShaderCompiler,
  128. glfnRenderbufferStorage,
  129. glfnSampleCoverage,
  130. glfnScissor,
  131. glfnShaderSource,
  132. glfnStencilFunc,
  133. glfnStencilFuncSeparate,
  134. glfnStencilMask,
  135. glfnStencilMaskSeparate,
  136. glfnStencilOp,
  137. glfnStencilOpSeparate,
  138. glfnTexImage2D,
  139. glfnTexParameterf,
  140. glfnTexParameterfv,
  141. glfnTexParameteri,
  142. glfnTexParameteriv,
  143. glfnTexSubImage2D,
  144. glfnUniform1f,
  145. glfnUniform1fv,
  146. glfnUniform1i,
  147. glfnUniform1iv,
  148. glfnUniform2f,
  149. glfnUniform2fv,
  150. glfnUniform2i,
  151. glfnUniform2iv,
  152. glfnUniform3f,
  153. glfnUniform3fv,
  154. glfnUniform3i,
  155. glfnUniform3iv,
  156. glfnUniform4f,
  157. glfnUniform4fv,
  158. glfnUniform4i,
  159. glfnUniform4iv,
  160. glfnUniformMatrix2fv,
  161. glfnUniformMatrix3fv,
  162. glfnUniformMatrix4fv,
  163. glfnUseProgram,
  164. glfnValidateProgram,
  165. glfnVertexAttrib1f,
  166. glfnVertexAttrib1fv,
  167. glfnVertexAttrib2f,
  168. glfnVertexAttrib2fv,
  169. glfnVertexAttrib3f,
  170. glfnVertexAttrib3fv,
  171. glfnVertexAttrib4f,
  172. glfnVertexAttrib4fv,
  173. glfnVertexAttribPointer,
  174. glfnViewport,
  175. // ES 3.0 functions
  176. glfnUniformMatrix2x3fv,
  177. glfnUniformMatrix3x2fv,
  178. glfnUniformMatrix2x4fv,
  179. glfnUniformMatrix4x2fv,
  180. glfnUniformMatrix3x4fv,
  181. glfnUniformMatrix4x3fv,
  182. glfnBlitFramebuffer,
  183. glfnUniform1ui,
  184. glfnUniform2ui,
  185. glfnUniform3ui,
  186. glfnUniform4ui,
  187. glfnUniform1uiv,
  188. glfnUniform2uiv,
  189. glfnUniform3uiv,
  190. glfnUniform4uiv,
  191. } glfn;
  192. // TODO: generate this type from fn.go.
  193. struct fnargs {
  194. glfn fn;
  195. uintptr_t a0;
  196. uintptr_t a1;
  197. uintptr_t a2;
  198. uintptr_t a3;
  199. uintptr_t a4;
  200. uintptr_t a5;
  201. uintptr_t a6;
  202. uintptr_t a7;
  203. uintptr_t a8;
  204. uintptr_t a9;
  205. };
  206. extern uintptr_t processFn(struct fnargs* args, char* parg);