2
0

webgl2.pas 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. unit WebGL2;
  2. {$mode objfpc}
  3. {$modeswitch externalclass}
  4. interface
  5. uses
  6. WebGL, JS, Web;
  7. type
  8. GLenumDynArray = array of GLenum;
  9. GLuintDynArray = array of GLuint;
  10. type
  11. GLint64 = nativeint; // long long
  12. GLuint64 = longword; // unsigned long long
  13. type
  14. TJSWebGLQuery = class external name 'WebGLQuery' (TJSWebGLObject);
  15. TJSWebGLSampler = class external name 'WebGLSampler' (TJSWebGLObject);
  16. TJSWebGLSync = class external name 'WebGLSync' (TJSWebGLObject);
  17. TJSWebGLTransformFeedback = class external name 'WebGLTransformFeedback' (TJSWebGLObject);
  18. TJSWebGLVertexArrayObject = class external name 'WebGLVertexArrayObject' (TJSWebGLObject);
  19. type
  20. TJSWebGL2RenderingContextBase = class external name 'WebGL2RenderingContextBase' (TJSWebGLRenderingContextBase)
  21. public
  22. const
  23. READ_BUFFER: nativeint;
  24. UNPACK_ROW_LENGTH: nativeint;
  25. UNPACK_SKIP_ROWS: nativeint;
  26. UNPACK_SKIP_PIXELS: nativeint;
  27. PACK_ROW_LENGTH: nativeint;
  28. PACK_SKIP_ROWS: nativeint;
  29. PACK_SKIP_PIXELS: nativeint;
  30. COLOR: nativeint;
  31. DEPTH: nativeint;
  32. STENCIL: nativeint;
  33. RED: nativeint;
  34. RGB8: nativeint;
  35. RGBA8: nativeint;
  36. RGB10_A2: nativeint;
  37. TEXTURE_BINDING_3D: nativeint;
  38. UNPACK_SKIP_IMAGES: nativeint;
  39. UNPACK_IMAGE_HEIGHT: nativeint;
  40. TEXTURE_3D: nativeint;
  41. TEXTURE_WRAP_R: nativeint;
  42. MAX_3D_TEXTURE_SIZE: nativeint;
  43. UNSIGNED_INT_2_10_10_10_REV: nativeint;
  44. MAX_ELEMENTS_VERTICES: nativeint;
  45. MAX_ELEMENTS_INDICES: nativeint;
  46. TEXTURE_MIN_LOD: nativeint;
  47. TEXTURE_MAX_LOD: nativeint;
  48. TEXTURE_BASE_LEVEL: nativeint;
  49. TEXTURE_MAX_LEVEL: nativeint;
  50. MIN: nativeint;
  51. MAX: nativeint;
  52. DEPTH_COMPONENT24: nativeint;
  53. MAX_TEXTURE_LOD_BIAS: nativeint;
  54. TEXTURE_COMPARE_MODE: nativeint;
  55. TEXTURE_COMPARE_FUNC: nativeint;
  56. CURRENT_QUERY: nativeint;
  57. QUERY_RESULT: nativeint;
  58. QUERY_RESULT_AVAILABLE: nativeint;
  59. STREAM_READ: nativeint;
  60. STREAM_COPY: nativeint;
  61. STATIC_READ: nativeint;
  62. STATIC_COPY: nativeint;
  63. DYNAMIC_READ: nativeint;
  64. DYNAMIC_COPY: nativeint;
  65. MAX_DRAW_BUFFERS: nativeint;
  66. DRAW_BUFFER0: nativeint;
  67. DRAW_BUFFER1: nativeint;
  68. DRAW_BUFFER2: nativeint;
  69. DRAW_BUFFER3: nativeint;
  70. DRAW_BUFFER4: nativeint;
  71. DRAW_BUFFER5: nativeint;
  72. DRAW_BUFFER6: nativeint;
  73. DRAW_BUFFER7: nativeint;
  74. DRAW_BUFFER8: nativeint;
  75. DRAW_BUFFER9: nativeint;
  76. DRAW_BUFFER10: nativeint;
  77. DRAW_BUFFER11: nativeint;
  78. DRAW_BUFFER12: nativeint;
  79. DRAW_BUFFER13: nativeint;
  80. DRAW_BUFFER14: nativeint;
  81. DRAW_BUFFER15: nativeint;
  82. MAX_FRAGMENT_UNIFORM_COMPONENTS: nativeint;
  83. MAX_VERTEX_UNIFORM_COMPONENTS: nativeint;
  84. SAMPLER_3D: nativeint;
  85. SAMPLER_2D_SHADOW: nativeint;
  86. FRAGMENT_SHADER_DERIVATIVE_HINT: nativeint;
  87. PIXEL_PACK_BUFFER: nativeint;
  88. PIXEL_UNPACK_BUFFER: nativeint;
  89. PIXEL_PACK_BUFFER_BINDING: nativeint;
  90. PIXEL_UNPACK_BUFFER_BINDING: nativeint;
  91. FLOAT_MAT2x3: nativeint;
  92. FLOAT_MAT2x4: nativeint;
  93. FLOAT_MAT3x2: nativeint;
  94. FLOAT_MAT3x4: nativeint;
  95. FLOAT_MAT4x2: nativeint;
  96. FLOAT_MAT4x3: nativeint;
  97. SRGB: nativeint;
  98. SRGB8: nativeint;
  99. SRGB8_ALPHA8: nativeint;
  100. COMPARE_REF_TO_TEXTURE: nativeint;
  101. RGBA32F: nativeint;
  102. RGB32F: nativeint;
  103. RGBA16F: nativeint;
  104. RGB16F: nativeint;
  105. VERTEX_ATTRIB_ARRAY_INTEGER: nativeint;
  106. MAX_ARRAY_TEXTURE_LAYERS: nativeint;
  107. MIN_PROGRAM_TEXEL_OFFSET: nativeint;
  108. MAX_PROGRAM_TEXEL_OFFSET: nativeint;
  109. MAX_VARYING_COMPONENTS: nativeint;
  110. TEXTURE_2D_ARRAY: nativeint;
  111. TEXTURE_BINDING_2D_ARRAY: nativeint;
  112. R11F_G11F_B10F: nativeint;
  113. UNSIGNED_INT_10F_11F_11F_REV: nativeint;
  114. RGB9_E5: nativeint;
  115. UNSIGNED_INT_5_9_9_9_REV: nativeint;
  116. TRANSFORM_FEEDBACK_BUFFER_MODE: nativeint;
  117. MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: nativeint;
  118. TRANSFORM_FEEDBACK_VARYINGS: nativeint;
  119. TRANSFORM_FEEDBACK_BUFFER_START: nativeint;
  120. TRANSFORM_FEEDBACK_BUFFER_SIZE: nativeint;
  121. TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: nativeint;
  122. RASTERIZER_DISCARD: nativeint;
  123. MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: nativeint;
  124. MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: nativeint;
  125. INTERLEAVED_ATTRIBS: nativeint;
  126. SEPARATE_ATTRIBS: nativeint;
  127. TRANSFORM_FEEDBACK_BUFFER: nativeint;
  128. TRANSFORM_FEEDBACK_BUFFER_BINDING: nativeint;
  129. RGBA32UI: nativeint;
  130. RGB32UI: nativeint;
  131. RGBA16UI: nativeint;
  132. RGB16UI: nativeint;
  133. RGBA8UI: nativeint;
  134. RGB8UI: nativeint;
  135. RGBA32I: nativeint;
  136. RGB32I: nativeint;
  137. RGBA16I: nativeint;
  138. RGB16I: nativeint;
  139. RGBA8I: nativeint;
  140. RGB8I: nativeint;
  141. RED_INTEGER: nativeint;
  142. RGB_INTEGER: nativeint;
  143. RGBA_INTEGER: nativeint;
  144. SAMPLER_2D_ARRAY: nativeint;
  145. SAMPLER_2D_ARRAY_SHADOW: nativeint;
  146. SAMPLER_CUBE_SHADOW: nativeint;
  147. UNSIGNED_INT_VEC2: nativeint;
  148. UNSIGNED_INT_VEC3: nativeint;
  149. UNSIGNED_INT_VEC4: nativeint;
  150. INT_SAMPLER_2D: nativeint;
  151. INT_SAMPLER_3D: nativeint;
  152. INT_SAMPLER_CUBE: nativeint;
  153. INT_SAMPLER_2D_ARRAY: nativeint;
  154. UNSIGNED_INT_SAMPLER_2D: nativeint;
  155. UNSIGNED_INT_SAMPLER_3D: nativeint;
  156. UNSIGNED_INT_SAMPLER_CUBE: nativeint;
  157. UNSIGNED_INT_SAMPLER_2D_ARRAY: nativeint;
  158. DEPTH_COMPONENT32F: nativeint;
  159. DEPTH32F_STENCIL8: nativeint;
  160. FLOAT_32_UNSIGNED_INT_24_8_REV: nativeint;
  161. FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: nativeint;
  162. FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: nativeint;
  163. FRAMEBUFFER_ATTACHMENT_RED_SIZE: nativeint;
  164. FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: nativeint;
  165. FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: nativeint;
  166. FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: nativeint;
  167. FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: nativeint;
  168. FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: nativeint;
  169. FRAMEBUFFER_DEFAULT: nativeint;
  170. //DEPTH_STENCIL_ATTACHMENT: nativeint;
  171. //DEPTH_STENCIL: nativeint;
  172. UNSIGNED_INT_24_8: nativeint;
  173. DEPTH24_STENCIL8: nativeint;
  174. UNSIGNED_NORMALIZED: nativeint;
  175. DRAW_FRAMEBUFFER_BINDING: nativeint;
  176. READ_FRAMEBUFFER: nativeint;
  177. DRAW_FRAMEBUFFER: nativeint;
  178. READ_FRAMEBUFFER_BINDING: nativeint;
  179. RENDERBUFFER_SAMPLES: nativeint;
  180. FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: nativeint;
  181. MAX_COLOR_ATTACHMENTS: nativeint;
  182. COLOR_ATTACHMENT1: nativeint;
  183. COLOR_ATTACHMENT2: nativeint;
  184. COLOR_ATTACHMENT3: nativeint;
  185. COLOR_ATTACHMENT4: nativeint;
  186. COLOR_ATTACHMENT5: nativeint;
  187. COLOR_ATTACHMENT6: nativeint;
  188. COLOR_ATTACHMENT7: nativeint;
  189. COLOR_ATTACHMENT8: nativeint;
  190. COLOR_ATTACHMENT9: nativeint;
  191. COLOR_ATTACHMENT10: nativeint;
  192. COLOR_ATTACHMENT11: nativeint;
  193. COLOR_ATTACHMENT12: nativeint;
  194. COLOR_ATTACHMENT13: nativeint;
  195. COLOR_ATTACHMENT14: nativeint;
  196. COLOR_ATTACHMENT15: nativeint;
  197. FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: nativeint;
  198. MAX_SAMPLES: nativeint;
  199. HALF_FLOAT: nativeint;
  200. RG: nativeint;
  201. RG_INTEGER: nativeint;
  202. R8: nativeint;
  203. RG8: nativeint;
  204. R16F: nativeint;
  205. R32F: nativeint;
  206. RG16F: nativeint;
  207. RG32F: nativeint;
  208. R8I: nativeint;
  209. R8UI: nativeint;
  210. R16I: nativeint;
  211. R16UI: nativeint;
  212. R32I: nativeint;
  213. R32UI: nativeint;
  214. RG8I: nativeint;
  215. RG8UI: nativeint;
  216. RG16I: nativeint;
  217. RG16UI: nativeint;
  218. RG32I: nativeint;
  219. RG32UI: nativeint;
  220. VERTEX_ARRAY_BINDING: nativeint;
  221. R8_SNORM: nativeint;
  222. RG8_SNORM: nativeint;
  223. RGB8_SNORM: nativeint;
  224. RGBA8_SNORM: nativeint;
  225. SIGNED_NORMALIZED: nativeint;
  226. COPY_READ_BUFFER: nativeint;
  227. COPY_WRITE_BUFFER: nativeint;
  228. COPY_READ_BUFFER_BINDING: nativeint;
  229. COPY_WRITE_BUFFER_BINDING: nativeint;
  230. UNIFORM_BUFFER: nativeint;
  231. UNIFORM_BUFFER_BINDING: nativeint;
  232. UNIFORM_BUFFER_START: nativeint;
  233. UNIFORM_BUFFER_SIZE: nativeint;
  234. MAX_VERTEX_UNIFORM_BLOCKS: nativeint;
  235. MAX_FRAGMENT_UNIFORM_BLOCKS: nativeint;
  236. MAX_COMBINED_UNIFORM_BLOCKS: nativeint;
  237. MAX_UNIFORM_BUFFER_BINDINGS: nativeint;
  238. MAX_UNIFORM_BLOCK_SIZE: nativeint;
  239. MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: nativeint;
  240. MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: nativeint;
  241. UNIFORM_BUFFER_OFFSET_ALIGNMENT: nativeint;
  242. ACTIVE_UNIFORM_BLOCKS: nativeint;
  243. UNIFORM_TYPE: nativeint;
  244. UNIFORM_SIZE: nativeint;
  245. UNIFORM_BLOCK_INDEX: nativeint;
  246. UNIFORM_OFFSET: nativeint;
  247. UNIFORM_ARRAY_STRIDE: nativeint;
  248. UNIFORM_MATRIX_STRIDE: nativeint;
  249. UNIFORM_IS_ROW_MAJOR: nativeint;
  250. UNIFORM_BLOCK_BINDING: nativeint;
  251. UNIFORM_BLOCK_DATA_SIZE: nativeint;
  252. UNIFORM_BLOCK_ACTIVE_UNIFORMS: nativeint;
  253. UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: nativeint;
  254. UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: nativeint;
  255. UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: nativeint;
  256. INVALID_INDEX: nativeint;
  257. MAX_VERTEX_OUTPUT_COMPONENTS: nativeint;
  258. MAX_FRAGMENT_INPUT_COMPONENTS: nativeint;
  259. MAX_SERVER_WAIT_TIMEOUT: nativeint;
  260. OBJECT_TYPE: nativeint;
  261. SYNC_CONDITION: nativeint;
  262. SYNC_STATUS: nativeint;
  263. SYNC_FLAGS: nativeint;
  264. SYNC_FENCE: nativeint;
  265. SYNC_GPU_COMMANDS_COMPLETE: nativeint;
  266. UNSIGNALED: nativeint;
  267. SIGNALED: nativeint;
  268. ALREADY_SIGNALED: nativeint;
  269. TIMEOUT_EXPIRED: nativeint;
  270. CONDITION_SATISFIED: nativeint;
  271. WAIT_FAILED: nativeint;
  272. SYNC_FLUSH_COMMANDS_BIT: nativeint;
  273. VERTEX_ATTRIB_ARRAY_DIVISOR: nativeint;
  274. ANY_SAMPLES_PASSED: nativeint;
  275. ANY_SAMPLES_PASSED_CONSERVATIVE: nativeint;
  276. SAMPLER_BINDING: nativeint;
  277. RGB10_A2UI: nativeint;
  278. INT_2_10_10_10_REV: nativeint;
  279. TRANSFORM_FEEDBACK: nativeint;
  280. TRANSFORM_FEEDBACK_PAUSED: nativeint;
  281. TRANSFORM_FEEDBACK_ACTIVE: nativeint;
  282. TRANSFORM_FEEDBACK_BINDING: nativeint;
  283. TEXTURE_IMMUTABLE_FORMAT: nativeint;
  284. MAX_ELEMENT_INDEX: nativeint;
  285. TEXTURE_IMMUTABLE_LEVELS: nativeint;
  286. MAX_CLIENT_WAIT_TIMEOUT_WEBGL: nativeint;
  287. public
  288. // Buffer objects
  289. procedure bufferData (target: GLenum; size: GLsizeiptr; usage: GLenum);
  290. procedure bufferData (target: GLenum; srcData: TJSBufferSource; usage: GLenum);
  291. procedure bufferSubData (target: GLenum; dstByteOffset: GLintptr; srcData: TJSBufferSource);
  292. // WebGL2
  293. procedure bufferData (target: GLenum; srcData: TJSArrayBufferView; usage: GLenum; srcOffset: GLuint; length: GLuint);
  294. procedure bufferSubData (target: GLenum; dstByteOffset: GLintptr; srcData: TJSArrayBufferView; length: GLuint);
  295. procedure copyBufferSubData (readTarget: GLenum; writeTarget: GLenum; readOffset: GLintptr; size: GLsizeiptr);
  296. // MapBufferRange, in particular its read-only and write-only modes,
  297. // can not be exposed safely to JavaScript. GetBufferSubData
  298. // replaces it for the purpose of fetching data back from the GPU.
  299. procedure getBufferSubData (target: GLenum; srcByteOffset: GLintptr; dstBuffer: TJSArrayBufferView; dstOffset: GLuint; length: GLuint);
  300. // Framebuffer objects
  301. procedure blitFramebuffer (srcX0: GLint; srcY0: GLint; srcX1: GLint; srcY1: GLint; dstX0: GLint; dstY0: GLint; dstY1: GLint; mask: GLbitfield; filter: GLenum);
  302. procedure framebufferTextureLayer (target: GLenum; attachment: GLenum; texture: TJSWebGLTexture; level: GLint);
  303. procedure invalidateFramebuffer (target: GLenum; attachments: GLenumDynArray);
  304. procedure invalidateSubFramebuffer (target: GLenum; attachments: GLenumDynArray; y: GLint; width: GLsizei; height: GLsizei);
  305. procedure readBuffer (src: GLenum);
  306. // Renderbuffer objects
  307. function getInternalformatParameter (target: GLenum; internalformat: GLenum; pname: GLenum): JSValue;
  308. procedure renderbufferStorageMultisample (target: GLenum; samples: GLsizei; internalformat: GLenum; height: GLsizei);
  309. // Texture objects
  310. procedure texStorage2D (target: GLenum; levels: GLsizei; internalformat: GLenum; width: GLsizei);
  311. procedure texStorage3D (target: GLenum; levels: GLsizei; internalformat: GLenum; width: GLsizei; depth: GLsizei);
  312. // WebGL1 legacy entrypoints:
  313. procedure texImage2D (target: GLenum; level: GLint; internalformat: GLint; height: GLsizei; border: GLint; format: GLenum; pixels: TJSArrayBufferView);
  314. procedure texImage2D (target: GLenum; level: GLint; internalformat: GLint; _type: GLenum; source: TJSTexImageSource);
  315. procedure texSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; height: GLsizei; _type: GLenum; pixels: TJSArrayBufferView);
  316. procedure texSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; _type: GLenum; source: TJSTexImageSource);
  317. // WebGL2 entrypoints:
  318. procedure texImage2D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; pboOffset: GLintptr);
  319. procedure texImage2D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum);
  320. procedure texImage2D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; srcData: TJSArrayBufferView);
  321. procedure texImage3D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; border: GLint; format: GLenum; _type: GLenum; pboOffset: GLintptr);
  322. procedure texImage3D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; border: GLint; format: GLenum; _type: GLenum);
  323. procedure texImage3D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; border: GLint; format: GLenum; _type: GLenum; srcData: TJSArrayBufferView);
  324. //procedure texImage3D (target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; border: GLint; format: GLenum; _type: GLenum; srcData: TJSArrayBufferView);
  325. procedure texSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; format: GLenum; _type: GLenum; pboOffset: GLintptr);
  326. procedure texSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; format: GLenum; _type: GLenum);
  327. procedure texSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; format: GLenum; _type: GLenum; srcData: TJSArrayBufferView);
  328. procedure texSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; height: GLsizei; depth: GLsizei; format: GLenum; _type: GLenum);
  329. //procedure texSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; height: GLsizei; depth: GLsizei; format: GLenum; _type: GLenum);
  330. procedure texSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; height: GLsizei; depth: GLsizei; format: GLenum; _type: GLenum; srcOffset: GLuint);
  331. procedure copyTexSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; y: GLint; width: GLsizei; height: GLsizei);
  332. procedure compressedTexImage2D (target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; border: GLint; imageSize: GLsizei; offset: GLintptr);
  333. procedure compressedTexImage2D (target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; border: GLint; srcData: TJSArrayBufferView; srcOffset: GLuint; srcLengthOverride: GLuint);
  334. procedure compressedTexImage3D (target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; depth: GLsizei; border: GLint; imageSize: GLsizei; offset: GLintptr);
  335. procedure compressedTexImage3D (target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; depth: GLsizei; border: GLint; srcData: TJSArrayBufferView; srcOffset: GLuint; srcLengthOverride: GLuint);
  336. procedure compressedTexSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; height: GLsizei; format: GLenum; imageSize: GLsizei; offset: GLintptr);
  337. procedure compressedTexSubImage2D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; height: GLsizei; format: GLenum; srcOffset: GLuint; srcLengthOverride: GLuint);
  338. procedure compressedTexSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; imageSize: GLsizei; offset: GLintptr);
  339. procedure compressedTexSubImage3D (target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; srcData: TJSArrayBufferView; srcOffset: GLuint; srcLengthOverride: GLuint);
  340. // Programs and shaders
  341. function getFragDataLocation (_program: TJSWebGLProgram; name: TJSDOMString): GLint;
  342. // Uniforms
  343. procedure uniform1ui (location: TJSWebGLUniformLocation; v0: GLuint);
  344. procedure uniform2ui (location: TJSWebGLUniformLocation; v0: GLuint; v1: GLuint);
  345. procedure uniform3ui (location: TJSWebGLUniformLocation; v0: GLuint; v1: GLuint; v2: GLuint);
  346. procedure uniform4ui (location: TJSWebGLUniformLocation; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint);
  347. procedure uniform1fv (location: TJSWebGLUniformLocation; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  348. procedure uniform2fv (location: TJSWebGLUniformLocation; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  349. procedure uniform3fv (location: TJSWebGLUniformLocation; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  350. procedure uniform4fv (location: TJSWebGLUniformLocation; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  351. procedure uniform1iv (location: TJSWebGLUniformLocation; data: TJSInt32List; srcOffset: GLuint; srcLength: GLuint);
  352. procedure uniform2iv (location: TJSWebGLUniformLocation; data: TJSInt32List; srcOffset: GLuint; srcLength: GLuint);
  353. procedure uniform3iv (location: TJSWebGLUniformLocation; data: TJSInt32List; srcOffset: GLuint; srcLength: GLuint);
  354. procedure uniform4iv (location: TJSWebGLUniformLocation; data: TJSInt32List; srcOffset: GLuint; srcLength: GLuint);
  355. procedure uniform1uiv (location: TJSWebGLUniformLocation; data: TJSUint32List; srcOffset: GLuint; srcLength: GLuint);
  356. procedure uniform2uiv (location: TJSWebGLUniformLocation; data: TJSUint32List; srcOffset: GLuint; srcLength: GLuint);
  357. procedure uniform3uiv (location: TJSWebGLUniformLocation; data: TJSUint32List; srcOffset: GLuint; srcLength: GLuint);
  358. procedure uniform4uiv (location: TJSWebGLUniformLocation; data: TJSUint32List; srcOffset: GLuint; srcLength: GLuint);
  359. procedure uniformMatrix2fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  360. procedure uniformMatrix3x2fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  361. procedure uniformMatrix4x2fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  362. procedure uniformMatrix2x3fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  363. procedure uniformMatrix3fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  364. procedure uniformMatrix4x3fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  365. procedure uniformMatrix2x4fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  366. procedure uniformMatrix3x4fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  367. procedure uniformMatrix4fv (location: TJSWebGLUniformLocation; transpose: GLboolean; data: TJSFloat32List; srcOffset: GLuint; srcLength: GLuint);
  368. // Vertex attribs
  369. procedure vertexAttribI4i (index: GLuint; x: GLint; y: GLint; z: GLint; w: GLint);
  370. procedure vertexAttribI4iv (index: GLuint; values: TJSInt32List);
  371. procedure vertexAttribI4ui (index: GLuint; x: GLuint; y: GLuint; z: GLuint; w: GLuint);
  372. procedure vertexAttribI4uiv (index: GLuint; values: TJSUint32List);
  373. procedure vertexAttribIPointer (index: GLuint; size: GLint; _type: GLenum; stride: GLsizei; offset: GLintptr);
  374. // Writing to the drawing buffer
  375. procedure vertexAttribDivisor (index: GLuint; divisor: GLuint);
  376. procedure drawArraysInstanced (mode: GLenum; first: GLint; count: GLsizei; instanceCount: GLsizei);
  377. procedure drawElementsInstanced (mode: GLenum; count: GLsizei; _type: GLenum; offset: GLintptr; instanceCount: GLsizei);
  378. procedure drawRangeElements (mode: GLenum; start: GLuint; _end: GLuint; count: GLsizei; _type: GLenum; offset: GLintptr);
  379. // Reading back pixels
  380. // WebGL1:
  381. procedure readPixels (x: GLint; y: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum);
  382. // WebGL2:
  383. //procedure readPixels (x: GLint; y: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum);
  384. procedure readPixels (x: GLint; y: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; dstOffset: GLuint);
  385. // Multiple Render Targets */
  386. procedure drawBuffers (buffers: GLenumDynArray);
  387. procedure clearBufferfv (buffer: GLenum; drawbuffer: GLint; values: TJSFloat32List; srcOffset: GLuint);
  388. procedure clearBufferiv (buffer: GLenum; drawbuffer: GLint; values: TJSInt32List; srcOffset: GLuint);
  389. procedure clearBufferuiv (buffer: GLenum; drawbuffer: GLint; values: TJSUint32List; srcOffset: GLuint);
  390. procedure clearBufferfi (buffer: GLenum; drawbuffer: GLint; depth: GLfloat; stencil: GLint);
  391. // Query Objects
  392. function createQuery: TJSWebGLQuery;
  393. procedure deleteQuery (query: TJSWebGLQuery);
  394. function isQuery (query: TJSWebGLQuery): GLboolean;
  395. procedure beginQuery (target: GLenum; query: TJSWebGLQuery);
  396. procedure endQuery (target: GLenum);
  397. function getQuery (target: GLenum; pname: GLenum): TJSWebGLQuery;
  398. function getQueryParameter (query: TJSWebGLQuery; pname: GLenum): JSValue;
  399. // Sampler Objects
  400. function createSampler: TJSWebGLSampler;
  401. procedure deleteSampler (sampler: TJSWebGLSampler);
  402. function isSampler (sampler: TJSWebGLSampler): GLboolean;
  403. procedure bindSampler (_unit: GLuint; sampler: TJSWebGLSampler);
  404. procedure samplerParameteri (sampler: TJSWebGLSampler; pname: GLenum; param: GLint);
  405. procedure samplerParameterf (sampler: TJSWebGLSampler; pname: GLenum; param: GLfloat);
  406. function getSamplerParameter (sampler: TJSWebGLSampler; pname: GLenum): JSValue;
  407. // Sync objects
  408. function fenceSync (condition: GLenum; flags: GLbitfield): TJSWebGLSync;
  409. function isSync (sync: TJSWebGLSync): GLboolean;
  410. procedure deleteSync (sync: TJSWebGLSync);
  411. function clientWaitSync (sync: TJSWebGLSync; flags: GLbitfield; timeout: GLuint64): GLenum;
  412. procedure waitSync (sync: TJSWebGLSync; flags: GLbitfield; timeout: GLint64);
  413. function getSyncParameter (sync: TJSWebGLSync; pname: GLenum): JSValue;
  414. // Transform Feedback
  415. function createTransformFeedback: TJSWebGLTransformFeedback;
  416. procedure deleteTransformFeedback (tf: TJSWebGLTransformFeedback);
  417. function isTransformFeedback (tf: TJSWebGLTransformFeedback): GLboolean;
  418. procedure bindTransformFeedback (target: GLenum; tf: TJSWebGLTransformFeedback);
  419. procedure beginTransformFeedback (primitiveMode: GLenum);
  420. procedure endTransformFeedback;
  421. procedure transformFeedbackVaryings (_program: TJSWebGLProgram; varyings: array of TJSDOMString; bufferMode: GLenum);
  422. function getTransformFeedbackVarying (_program: TJSWebGLProgram; index: GLuint): TJSWebGLActiveInfo;
  423. procedure pauseTransformFeedback;
  424. procedure resumeTransformFeedback;
  425. // Uniform Buffer Objects and Transform Feedback Buffers
  426. procedure bindBufferBase (target: GLenum; index: GLuint; buffer: TJSWebGLBuffer);
  427. procedure bindBufferRange (target: GLenum; index: GLuint; buffer: TJSWebGLBuffer; offset: GLintptr; size: GLsizeiptr);
  428. function getIndexedParameter (target: GLenum; index: GLuint): JSValue;
  429. function getUniformIndices (_program: TJSWebGLProgram; uniformNames: array of TJSDOMString): GLuintDynArray;
  430. function getActiveUniforms (_program: TJSWebGLProgram; uniformIndices: GLuintDynArray; pname: GLenum): JSValue;
  431. function getUniformBlockIndex (_program: TJSWebGLProgram; uniformBlockName: TJSDOMString): GLuint;
  432. function getActiveUniformBlockParameter (_program: TJSWebGLProgram; uniformBlockIndex: GLuint; pname: GLenum): JSValue;
  433. function getActiveUniformBlockName (_program: TJSWebGLProgram; uniformBlockIndex: GLuint): TJSDOMString;
  434. procedure uniformBlockBinding (_program: TJSWebGLProgram; uniformBlockIndex: GLuint; uniformBlockBinding: GLuint);
  435. // Vertex Array Objects
  436. function createVertexArray: TJSWebGLVertexArrayObject;
  437. procedure deleteVertexArray (vertexArray: TJSWebGLVertexArrayObject);
  438. function isVertexArray (vertexArray: TJSWebGLVertexArrayObject): GLboolean;
  439. procedure bindVertexArray (_array: TJSWebGLVertexArrayObject);
  440. end;
  441. TJSWebGL2RenderingContext = class external name 'WebGL2RenderingContext' (TJSWebGL2RenderingContextBase);
  442. implementation
  443. end.