Script Library: 1238 scripts
 

gles-egl-h.r

REBOL [ title: "GLES and EGL library interface" Purpose: "Use modern OpenGL with shaders" Notes: { I think this is quite an impressive achievement (for Rebol 2 ;) ) PLEASE READ THESE NOTES or you will miss some important things and Rebol will crush more often. IMPORTANT: Change GLES_this_version, EGL_this_version and libs paths as needed by your libraries. I tried Regal, GLFW+(recompiled) GLEW, Firefox32bit EGL+mozglue+GLES with no success and then... ...Chrome32bit version 50 EGL+GLES and bang! . Also 32bit version 79 is working. After I made hello_triangle work also Firefox32bit is working. A few differences between Chrome32bit and Firefox32bit. Chrome32bit: Shaders version is only #version 100 Setting EGL_CONTEXT_CLIENT_VERSION to 1 will disable shaders (and enable old begin/end API ? I have not tried) The possible framebuffer configs allowed are very reduced. No multi-sampling support. Its EGL reports version 1.4 but there are also 1.5 functions inside it Initialization is fast Firefox32bit: Shaders version is #version 100 or #version 300 es Setting EGL_CONTEXT_CLIENT_VERSION to 2 or 1 is allowed. A lot of possible framebuffer configs allowed. Yes multi-sampling support. Its EGL reports version 1.4 but there are also 1.5 functions inside it Initialization is _slow_ (about 1 second !) Beware to properly use float32 and/or convert to/from float32/decimal! Using pointers to send and receive data is not simple. Sometimes it is simpler to use integer! other times struct! other times binary! other times string! ! The provided function '&' (yes only ampersand) is made to be similar to "C" version: use it on a binary!, string! or struct! to pass a pointer made with the provided int-ptr function and use path notation .../value to acces its member. If there is need to store more then one element (e.g. an array of pointers to strings) use block-to-struct instead of int-ptr and use .../_1 or .../_2 etc. to get a member. All this means that some functions expect a parameter to be integer! others expect it to be struct! etc. If Rebol crashes look for the parameter type. Of course you can change all this if you prefer ! As noted above only 32bit version of Chrome and Firefox libraries will work (I have not tried other browsers). This means that if you have, say, Chrome 64bit installed and want to try its 32bit libraries you probably will have to uninstall it, intall 32bit version, copy libEGL and libGLES somewhere, uninstall it and re-install 64bit version. This is what I have done. Unless you find pre-compiled libraries somewhere, or you are able to recompile them from sources. One last thing: the libGLES library of Firefox32bit also opens "mozglue.dll" that must be put in the same directory of this script. DISCLAIMER: USE AT YOUR OWN RISK! It works on my system: OpenGL renderer string: ATI Mobility Radeon HD 4570 OpenGL version string: 3.3.11653 Compatibility Profile Context AMD Athlon II Dual-Core M300 2.00 GHz Windows 7 64 bit } file: %gles-egl-h.r author: "Marco Antoniazzi" email: [luce80 AT libero DOT it] Copyright: "(C) 2020 Marco Antoniazzi." date: 25-04-2020 version: 0.6.2 comment: {ONLY A FEW FUNCTIONS TESTED !!!! Use example code to test others. See Rebol specific functions at the end. } History: [ 0.0.1 [21-12-2019 "Started"] 0.0.2 [02-01-2020 "IT... COULD... WORK!!"] 0.4.0 [03-01-2020 "UPD: various clean-up and helper functions"] 0.5.0 [06-01-2020 "UPD: nice fragment shader from http://glslsandbox.com/e#59828.0"] 0.5.1 [19-01-2020 "UPD: another nice fragment shader from http://glslsandbox.com/e#58416.0"] 0.5.2 [26-01-2020 "UPD: improved gles-make-buffer with glBindBuffer type 0"] 0.5.3 [26-01-2020 "UPD: simplified main rendering loop deleting unecessary glBindBuffer and modifing last parameter of glDrawElements"] 0.5.4 [03-04-2020 "FIX: gles-free-program , FIX: fall down to a possible config in egl-Start"] 0.5.5 [05-04-2020 "FIX: gles-set-vertex-attribute , UPD: moved example shaders and func inside examples's 'do"] 0.5.6 [05-04-2020 "FIX: gles-free-program, UPD: gles-make-program, ADD: gles-set-uniform"] 0.6.1 [10-04-2020 "ADD: gles-make-texture, FIX: gles-make-shader error string"] 0.6.2 [25-04-2020 "FIX: gles-set-uniform, FIX: egl-start verbose printing GL strings"] ] Category: [library graphics] library: [ level: 'advanced platform: 'win type: [module tool] domain: [graphics external-library] tested-under: [View 2.7.8.3.1] support: none license: 'BSD see-also: none ] ] ; Please adjust these values and the path GLES_this_version: 3.2.0 ; change as needed ; FIXME: or adjust by getting it from GL context EGL_this_version: 1.5.0 ; change as needed ; FIXME: or adjust by getting it from EGL lib ;lib-path: to-rebol-file "E:\Programmi\Web\FireFox32bit" lib-path: to-rebol-file "E:\Programmi\Prog\Rebol\local\libs\GL\Chrome32bit_v79" ; misc funcs form-error: func [ "Forms a disarmed error" err [object!] /local arg1 arg2 arg3 message ][;derived from 11-Feb-2007 Guest2 arg1: any [attempt [get in err 'arg1] 'unset] arg2: any [attempt [get in err 'arg2] 'unset] arg3: any [attempt [get in err 'arg3] 'unset] message: get err/id if block? message [bind message 'arg1] message: rejoin ["** " get in get in system/error err/type 'type ": " form reduce message newline "** Near:" either block? err/near [mold/only err/near][err/near] newline] ] form-on-error: func [ "Evaluates a block, which if it results in an error, forms that error." blk [block!] ][ if error? set/any 'blk try blk [form-error disarm blk] ] fill: func [ "Duplicates an append a specified number of times. (modifies)" series [series!] value count [integer!] ][ head insert/dup tail series value count ] ;;; ;;;REBOL-NOTE: use this function to access pointers ;;; int-ptr: does [make struct! [value [integer!]] none] flt-ptr: does [make struct! [value [float]] none] dbl-ptr: does [make struct! [value [double]] none] coords-ptr: does [make struct! [x [float] y [float] z [float] w [float]] none] int32: make struct! [num [integer!]] none to-int32: func [value][int32/num: value copy third int32] ; endianess aware from-int32: func [value [binary!]][change third int32 copy/part value 4 int32/num] *int: make struct! [[save] ptr [struct! [value [integer!]]]] none addr: func [ptr [binary! string! struct!]] [if struct? ptr [ptr: third ptr] third make struct! [s [string!]] reduce [ptr]] get&: func [ptr] [change third *int addr ptr *int/ptr/value] ;&: func [ptr] [ptr: addr ptr to-integer either 'little = get-modes system:// 'endian [head reverse copy ptr][ptr]] ;;; ;;;REBOL-NOTE: use this function to pass a binary!, string! or struct! as an integer! to a routine! ;;; &: func [ptr [binary! string! struct!]] [from-int32 addr ptr] ;;; ;;;REBOL-NOTE: use this function to map data to a struct! to be able to access its members ;;; addr-to-struct: func [ "returns the given struct! initialized with content of memory at given address" addr [integer! ] struct [struct!] /local int-ptr tstruct ][ int-ptr: make struct! [value [integer!]] reduce [addr] tstruct: make struct! compose/deep/only [ptr [struct! (first struct)]] none change third tstruct third int-ptr change third struct third tstruct/ptr struct ] ;;; ;;;REBOL-NOTE: use this function to convert a block to an initialized struct! (and use eg. as: probe third block-to-struct/floats [1.5 3]) ;;; block-to-struct: func [ "Construct a struct! and initialize it based on given block" block [block!] /no-ints /floats /local spec type n ] [ block: reduce block replace/all block 'none 0 spec: copy [] n: 1 forall block [ append spec compose/deep/only [(to-word join '_ n) [( type: type?/word first block if all [no-ints equal? type 'integer!] [block/1: to decimal! block/1 type: 'decimal!] either all [equal? type 'decimal! floats]['float][type] )]] n: n + 1 ] make struct! spec block ] assign-struct: func [ "Assign src struct data to dst" dst [struct!] src [struct!] ] [ change third dst third src ] get-mem?: func [; author: Ladislav Mecir "get the data from a memory address. Default is to return a byte" address [integer!] /nts "a null-terminated string" /part length [integer!] "a binary with a specified length" /local address_ m c r ] [ address_: make struct! [i [integer!]] reduce [address] if nts [ m: make struct! [s [string!]] none change third m third address_ return m/s ] if part [ m: make struct! compose/deep [bin [char-array (length)]] none change third m third address_ return as-binary any [m/bin #{}] ] m: make struct! [c [struct! [chr [char!]]]] none change third m third address_ m/c/chr ] ; ; load libs lib: switch/default System/version/4 [ 2 [%libGLES.dylib] ;OSX 3 [%libGLESv2.dll] ;Windows ] [%libGLES.so.2] ;probe exists? lib-path/:lib if not attempt [gles32-lib: load/library lib-path/:lib] [alert rejoin ["Unable to find or open " lib " . Quit"] quit] lib: switch/default System/version/4 [ 2 [%libEGL.dylib] ;OSX 3 [%libEGL.dll] ;Windows ] [%libEGL.so] ;probe exists? lib-path/:lib if not attempt [egl-lib: load/library lib-path/:lib] [alert rejoin ["Unable to find or open " lib " . Quit"] quit] ; {** Copyright (c) 2013-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. } {************************************************************ ** gles.h ************************************************************} ; types GLbyte: char! ; khronos_int8_t ;GLclampf: decimal! ; NO !! must use float; khronos_float_t GLfixed: integer! ; khronos_int32_t ;GLshort: short; khronos_int16_t ;GLushort: ushort; khronos_uint16_t GLvoid: integer! ; void GLsync: binary! ;struct __GLsync *GLsync; ;GLint64: int64; khronos_int64_t ;GLuint64: double ;decimal! ; uint64; khronos_uint64_t GLenum: integer! ; unsigned int GLuint: integer! ; unsigned int GLchar: char! ; char ;GLfloat: decimal! ; NO !! must use float; khronos_float_t GLsizeiptr: integer! ; khronos_ssize_t GLintptr: integer! ; khronos_intptr_t GLbitfield: integer! ; unsigned int GLint: integer! ; int GLboolean: char!; unsigned char GLsizei: integer! ; int GLubyte: char! ; ;GLhalf: integer! ; khronos_uint16_t ; if GLES_this_version >= 2.0.0 glesblock200: [ ; GLES 2.0 defines GL_DEPTH_BUFFER_BIT: 256 GL_STENCIL_BUFFER_BIT: 1024 GL_COLOR_BUFFER_BIT: 16384 GL_FALSE: 0 GL_TRUE: 1 GL_POINTS: 0 GL_LINES: 1 GL_LINE_LOOP: 2 GL_LINE_STRIP: 3 GL_TRIANGLES: 4 GL_TRIANGLE_STRIP: 5 GL_TRIANGLE_FAN: 6 GL_ZERO: 0 GL_ONE: 1 GL_SRC_COLOR: 768 GL_ONE_MINUS_SRC_COLOR: 769 GL_SRC_ALPHA: 770 GL_ONE_MINUS_SRC_ALPHA: 771 GL_DST_ALPHA: 772 GL_ONE_MINUS_DST_ALPHA: 773 GL_DST_COLOR: 774 GL_ONE_MINUS_DST_COLOR: 775 GL_SRC_ALPHA_SATURATE: 776 GL_FUNC_ADD: 32774 GL_BLEND_EQUATION: 32777 GL_BLEND_EQUATION_RGB: 32777 GL_BLEND_EQUATION_ALPHA: 34877 GL_FUNC_SUBTRACT: 32778 GL_FUNC_REVERSE_SUBTRACT: 32779 GL_BLEND_DST_RGB: 32968 GL_BLEND_SRC_RGB: 32969 GL_BLEND_DST_ALPHA: 32970 GL_BLEND_SRC_ALPHA: 32971 GL_CONSTANT_COLOR: 32769 GL_ONE_MINUS_CONSTANT_COLOR: 32770 GL_CONSTANT_ALPHA: 32771 GL_ONE_MINUS_CONSTANT_ALPHA: 32772 GL_BLEND_COLOR: 32773 GL_ARRAY_BUFFER: 34962 GL_ELEMENT_ARRAY_BUFFER: 34963 GL_ARRAY_BUFFER_BINDING: 34964 GL_ELEMENT_ARRAY_BUFFER_BINDING: 34965 GL_STREAM_DRAW: 35040 GL_STATIC_DRAW: 35044 GL_DYNAMIC_DRAW: 35048 GL_BUFFER_SIZE: 34660 GL_BUFFER_USAGE: 34661 GL_CURRENT_VERTEX_ATTRIB: 34342 GL_FRONT: 1028 GL_BACK: 1029 GL_FRONT_AND_BACK: 1032 GL_TEXTURE_2D: 3553 GL_CULL_FACE: 2884 GL_BLEND: 3042 GL_DITHER: 3024 GL_STENCIL_TEST: 2960 GL_DEPTH_TEST: 2929 GL_SCISSOR_TEST: 3089 GL_POLYGON_OFFSET_FILL: 32823 GL_SAMPLE_ALPHA_TO_COVERAGE: 32926 GL_SAMPLE_COVERAGE: 32928 GL_NO_ERROR: 0 GL_INVALID_ENUM: 1280 GL_INVALID_VALUE: 1281 GL_INVALID_OPERATION: 1282 GL_OUT_OF_MEMORY: 1285 GL_CW: 2304 GL_CCW: 2305 GL_LINE_WIDTH: 2849 GL_ALIASED_POINT_SIZE_RANGE: 33901 GL_ALIASED_LINE_WIDTH_RANGE: 33902 GL_CULL_FACE_MODE: 2885 GL_FRONT_FACE: 2886 GL_DEPTH_RANGE: 2928 GL_DEPTH_WRITEMASK: 2930 GL_DEPTH_CLEAR_VALUE: 2931 GL_DEPTH_FUNC: 2932 GL_STENCIL_CLEAR_VALUE: 2961 GL_STENCIL_FUNC: 2962 GL_STENCIL_FAIL: 2964 GL_STENCIL_PASS_DEPTH_FAIL: 2965 GL_STENCIL_PASS_DEPTH_PASS: 2966 GL_STENCIL_REF: 2967 GL_STENCIL_VALUE_MASK: 2963 GL_STENCIL_WRITEMASK: 2968 GL_STENCIL_BACK_FUNC: 34816 GL_STENCIL_BACK_FAIL: 34817 GL_STENCIL_BACK_PASS_DEPTH_FAIL: 34818 GL_STENCIL_BACK_PASS_DEPTH_PASS: 34819 GL_STENCIL_BACK_REF: 36003 GL_STENCIL_BACK_VALUE_MASK: 36004 GL_STENCIL_BACK_WRITEMASK: 36005 GL_VIEWPORT: 2978 GL_SCISSOR_BOX: 3088 GL_COLOR_CLEAR_VALUE: 3106 GL_COLOR_WRITEMASK: 3107 GL_UNPACK_ALIGNMENT: 3317 GL_PACK_ALIGNMENT: 3333 GL_MAX_TEXTURE_SIZE: 3379 GL_MAX_VIEWPORT_DIMS: 3386 GL_SUBPIXEL_BITS: 3408 GL_RED_BITS: 3410 GL_GREEN_BITS: 3411 GL_BLUE_BITS: 3412 GL_ALPHA_BITS: 3413 GL_DEPTH_BITS: 3414 GL_STENCIL_BITS: 3415 GL_POLYGON_OFFSET_UNITS: 10752 GL_POLYGON_OFFSET_FACTOR: 32824 GL_TEXTURE_BINDING_2D: 32873 GL_SAMPLE_BUFFERS: 32936 GL_SAMPLES: 32937 GL_SAMPLE_COVERAGE_VALUE: 32938 GL_SAMPLE_COVERAGE_INVERT: 32939 GL_NUM_COMPRESSED_TEXTURE_FORMATS: 34466 GL_COMPRESSED_TEXTURE_FORMATS: 34467 GL_DONT_CARE: 4352 GL_FASTEST: 4353 GL_NICEST: 4354 GL_GENERATE_MIPMAP_HINT: 33170 GL_BYTE: 5120 GL_UNSIGNED_BYTE: 5121 GL_SHORT: 5122 GL_UNSIGNED_SHORT: 5123 GL_INT: 5124 GL_UNSIGNED_INT: 5125 GL_FLOAT: 5126 GL_FIXED: 5132 GL_DEPTH_COMPONENT: 6402 GL_ALPHA: 6406 GL_RGB: 6407 GL_RGBA: 6408 GL_LUMINANCE: 6409 GL_LUMINANCE_ALPHA: 6410 GL_UNSIGNED_SHORT_4_4_4_4: 32819 GL_UNSIGNED_SHORT_5_5_5_1: 32820 GL_UNSIGNED_SHORT_5_6_5: 33635 GL_FRAGMENT_SHADER: 35632 GL_VERTEX_SHADER: 35633 GL_MAX_VERTEX_ATTRIBS: 34921 GL_MAX_VERTEX_UNIFORM_VECTORS: 36347 GL_MAX_VARYING_VECTORS: 36348 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 35661 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: 35660 GL_MAX_TEXTURE_IMAGE_UNITS: 34930 GL_MAX_FRAGMENT_UNIFORM_VECTORS: 36349 GL_SHADER_TYPE: 35663 GL_DELETE_STATUS: 35712 GL_LINK_STATUS: 35714 GL_VALIDATE_STATUS: 35715 GL_ATTACHED_SHADERS: 35717 GL_ACTIVE_UNIFORMS: 35718 GL_ACTIVE_UNIFORM_MAX_LENGTH: 35719 GL_ACTIVE_ATTRIBUTES: 35721 GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: 35722 GL_SHADING_LANGUAGE_VERSION: 35724 GL_CURRENT_PROGRAM: 35725 GL_NEVER: 512 GL_LESS: 513 GL_EQUAL: 514 GL_LEQUAL: 515 GL_GREATER: 516 GL_NOTEQUAL: 517 GL_GEQUAL: 518 GL_ALWAYS: 519 GL_KEEP: 7680 GL_REPLACE: 7681 GL_INCR: 7682 GL_DECR: 7683 GL_INVERT: 5386 GL_INCR_WRAP: 34055 GL_DECR_WRAP: 34056 GL_VENDOR: 7936 GL_RENDERER: 7937 GL_VERSION: 7938 GL_EXTENSIONS: 7939 GL_NEAREST: 9728 GL_LINEAR: 9729 GL_NEAREST_MIPMAP_NEAREST: 9984 GL_LINEAR_MIPMAP_NEAREST: 9985 GL_NEAREST_MIPMAP_LINEAR: 9986 GL_LINEAR_MIPMAP_LINEAR: 9987 GL_TEXTURE_MAG_FILTER: 10240 GL_TEXTURE_MIN_FILTER: 10241 GL_TEXTURE_WRAP_S: 10242 GL_TEXTURE_WRAP_T: 10243 GL_TEXTURE: 5890 GL_TEXTURE_CUBE_MAP: 34067 GL_TEXTURE_BINDING_CUBE_MAP: 34068 GL_TEXTURE_CUBE_MAP_POSITIVE_X: 34069 GL_TEXTURE_CUBE_MAP_NEGATIVE_X: 34070 GL_TEXTURE_CUBE_MAP_POSITIVE_Y: 34071 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: 34072 GL_TEXTURE_CUBE_MAP_POSITIVE_Z: 34073 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: 34074 GL_MAX_CUBE_MAP_TEXTURE_SIZE: 34076 GL_TEXTURE0: 33984 GL_TEXTURE1: 33985 GL_TEXTURE2: 33986 GL_TEXTURE3: 33987 GL_TEXTURE4: 33988 GL_TEXTURE5: 33989 GL_TEXTURE6: 33990 GL_TEXTURE7: 33991 GL_TEXTURE8: 33992 GL_TEXTURE9: 33993 GL_TEXTURE10: 33994 GL_TEXTURE11: 33995 GL_TEXTURE12: 33996 GL_TEXTURE13: 33997 GL_TEXTURE14: 33998 GL_TEXTURE15: 33999 GL_TEXTURE16: 34000 GL_TEXTURE17: 34001 GL_TEXTURE18: 34002 GL_TEXTURE19: 34003 GL_TEXTURE20: 34004 GL_TEXTURE21: 34005 GL_TEXTURE22: 34006 GL_TEXTURE23: 34007 GL_TEXTURE24: 34008 GL_TEXTURE25: 34009 GL_TEXTURE26: 34010 GL_TEXTURE27: 34011 GL_TEXTURE28: 34012 GL_TEXTURE29: 34013 GL_TEXTURE30: 34014 GL_TEXTURE31: 34015 GL_ACTIVE_TEXTURE: 34016 GL_REPEAT: 10497 GL_CLAMP_TO_EDGE: 33071 GL_MIRRORED_REPEAT: 33648 GL_FLOAT_VEC2: 35664 GL_FLOAT_VEC3: 35665 GL_FLOAT_VEC4: 35666 GL_INT_VEC2: 35667 GL_INT_VEC3: 35668 GL_INT_VEC4: 35669 GL_BOOL: 35670 GL_BOOL_VEC2: 35671 GL_BOOL_VEC3: 35672 GL_BOOL_VEC4: 35673 GL_FLOAT_MAT2: 35674 GL_FLOAT_MAT3: 35675 GL_FLOAT_MAT4: 35676 GL_SAMPLER_2D: 35678 GL_SAMPLER_CUBE: 35680 GL_VERTEX_ATTRIB_ARRAY_ENABLED: 34338 GL_VERTEX_ATTRIB_ARRAY_SIZE: 34339 GL_VERTEX_ATTRIB_ARRAY_STRIDE: 34340 GL_VERTEX_ATTRIB_ARRAY_TYPE: 34341 GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: 34922 GL_VERTEX_ATTRIB_ARRAY_POINTER: 34373 GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 34975 GL_IMPLEMENTATION_COLOR_READ_TYPE: 35738 GL_IMPLEMENTATION_COLOR_READ_FORMAT: 35739 GL_COMPILE_STATUS: 35713 GL_INFO_LOG_LENGTH: 35716 GL_SHADER_SOURCE_LENGTH: 35720 GL_SHADER_COMPILER: 36346 GL_SHADER_BINARY_FORMATS: 36344 GL_NUM_SHADER_BINARY_FORMATS: 36345 GL_LOW_FLOAT: 36336 GL_MEDIUM_FLOAT: 36337 GL_HIGH_FLOAT: 36338 GL_LOW_INT: 36339 GL_MEDIUM_INT: 36340 GL_HIGH_INT: 36341 GL_FRAMEBUFFER: 36160 GL_RENDERBUFFER: 36161 GL_RGBA4: 32854 GL_RGB5_A1: 32855 GL_RGB565: 36194 GL_DEPTH_COMPONENT16: 33189 GL_STENCIL_INDEX8: 36168 GL_RENDERBUFFER_WIDTH: 36162 GL_RENDERBUFFER_HEIGHT: 36163 GL_RENDERBUFFER_INTERNAL_FORMAT: 36164 GL_RENDERBUFFER_RED_SIZE: 36176 GL_RENDERBUFFER_GREEN_SIZE: 36177 GL_RENDERBUFFER_BLUE_SIZE: 36178 GL_RENDERBUFFER_ALPHA_SIZE: 36179 GL_RENDERBUFFER_DEPTH_SIZE: 36180 GL_RENDERBUFFER_STENCIL_SIZE: 36181 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 36048 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 36049 GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 36050 GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 36051 GL_COLOR_ATTACHMENT0: 36064 GL_DEPTH_ATTACHMENT: 36096 GL_STENCIL_ATTACHMENT: 36128 GL_NONE: 0 GL_FRAMEBUFFER_COMPLETE: 36053 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 36054 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 36055 GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 36057 GL_FRAMEBUFFER_UNSUPPORTED: 36061 GL_FRAMEBUFFER_BINDING: 36006 GL_RENDERBUFFER_BINDING: 36007 GL_MAX_RENDERBUFFER_SIZE: 34024 GL_INVALID_FRAMEBUFFER_OPERATION: 1286 ; ; GLES 2.0 PROTOTYPES glActiveTexture: make routine! [ texture [GLenum] ] gles32-lib "glActiveTexture" glAttachShader: make routine! [ program [GLuint] shader [GLuint] ] gles32-lib "glAttachShader" glBindAttribLocation: make routine! [ program [GLuint] index [GLuint] name [string!] ] gles32-lib "glBindAttribLocation" glBindBuffer: make routine! [ target [GLenum] buffer [GLuint] ] gles32-lib "glBindBuffer" glBindFramebuffer: make routine! [ target [GLenum] framebuffer [GLuint] ] gles32-lib "glBindFramebuffer" glBindRenderbuffer: make routine! [ target [GLenum] renderbuffer [GLuint] ] gles32-lib "glBindRenderbuffer" glBindTexture: make routine! [ target [GLenum] texture [GLuint] ] gles32-lib "glBindTexture" glBlendColor: make routine! [ red [float] green [float] blue [float] alpha [float] ] gles32-lib "glBlendColor" glBlendEquation: make routine! [ mode [GLenum] ] gles32-lib "glBlendEquation" glBlendEquationSeparate: make routine! [ modeRGB [GLenum] modeAlpha [GLenum] ] gles32-lib "glBlendEquationSeparate" glBlendFunc: make routine! [ sfactor [GLenum] dfactor [GLenum] ] gles32-lib "glBlendFunc" glBlendFuncSeparate: make routine! [ sfactorRGB [GLenum] dfactorRGB [GLenum] sfactorAlpha [GLenum] dfactorAlpha [GLenum] ] gles32-lib "glBlendFuncSeparate" glBufferData: make routine! [ target [GLenum] size [GLsizeiptr] data [struct! []] usage [GLenum] ] gles32-lib "glBufferData" glBufferSubData: make routine! [ target [GLenum] offset [GLintptr] size [GLsizeiptr] data [integer!] ] gles32-lib "glBufferSubData" glCheckFramebufferStatus: make routine! [ target [GLenum] return: [GLenum] ] gles32-lib "glCheckFramebufferStatus" glClear: make routine! [ mask [GLbitfield] ] gles32-lib "glClear" glClearColor: make routine! [ red [float] green [float] blue [float] alpha [float] ] gles32-lib "glClearColor" glClearDepthf: make routine! [ d [float] ] gles32-lib "glClearDepthf" glClearStencil: make routine! [ s [GLint] ] gles32-lib "glClearStencil" glColorMask: make routine! [ red [GLboolean] green [GLboolean] blue [GLboolean] alpha [GLboolean] ] gles32-lib "glColorMask" glCompileShader: make routine! [ shader [GLuint] ] gles32-lib "glCompileShader" glCompressedTexImage2D: make routine! [ target [GLenum] level [GLint] internalformat [GLenum] width [GLsizei] height [GLsizei] border [GLint] imageSize [GLsizei] data [integer!] ] gles32-lib "glCompressedTexImage2D" glCompressedTexSubImage2D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] width [GLsizei] height [GLsizei] format [GLenum] imageSize [GLsizei] data [integer!] ] gles32-lib "glCompressedTexSubImage2D" glCopyTexImage2D: make routine! [ target [GLenum] level [GLint] internalformat [GLenum] x [GLint] y [GLint] width [GLsizei] height [GLsizei] border [GLint] ] gles32-lib "glCopyTexImage2D" glCopyTexSubImage2D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] gles32-lib "glCopyTexSubImage2D" glCreateProgram: make routine! [ return: [GLuint] ] gles32-lib "glCreateProgram" glCreateShader: make routine! [ type [GLenum] return: [GLuint] ] gles32-lib "glCreateShader" glCullFace: make routine! [ mode [GLenum] ] gles32-lib "glCullFace" glDeleteBuffers: make routine! [ n [GLsizei] buffers [struct! []] ] gles32-lib "glDeleteBuffers" glDeleteFramebuffers: make routine! [ n [GLsizei] framebuffers [integer!] ] gles32-lib "glDeleteFramebuffers" glDeleteProgram: make routine! [ program [GLuint] ] gles32-lib "glDeleteProgram" glDeleteRenderbuffers: make routine! [ n [GLsizei] renderbuffers [integer!] ] gles32-lib "glDeleteRenderbuffers" glDeleteShader: make routine! [ shader [GLuint] ] gles32-lib "glDeleteShader" glDeleteTextures: make routine! [ n [GLsizei] textures [integer!] ] gles32-lib "glDeleteTextures" glDepthFunc: make routine! [ func [GLenum] ] gles32-lib "glDepthFunc" glDepthMask: make routine! [ flag [GLboolean] ] gles32-lib "glDepthMask" glDepthRangef: make routine! [ n [float] f [float] ] gles32-lib "glDepthRangef" glDetachShader: make routine! [ program [GLuint] shader [GLuint] ] gles32-lib "glDetachShader" glDisable: make routine! [ cap [GLenum] ] gles32-lib "glDisable" glDisableVertexAttribArray: make routine! [ index [GLuint] ] gles32-lib "glDisableVertexAttribArray" glDrawArrays: make routine! [ mode [GLenum] first [GLint] count [GLsizei] ] gles32-lib "glDrawArrays" glDrawElements: make routine! [ mode [GLenum] count [GLsizei] type [GLenum] indices [integer!] ] gles32-lib "glDrawElements" glEnable: make routine! [ cap [GLenum] ] gles32-lib "glEnable" glEnableVertexAttribArray: make routine! [ index [GLuint] ] gles32-lib "glEnableVertexAttribArray" glFinish: make routine! [ ] gles32-lib "glFinish" glFlush: make routine! [ ] gles32-lib "glFlush" glFramebufferRenderbuffer: make routine! [ target [GLenum] attachment [GLenum] renderbuffertarget [GLenum] renderbuffer [GLuint] ] gles32-lib "glFramebufferRenderbuffer" glFramebufferTexture2D: make routine! [ target [GLenum] attachment [GLenum] textarget [GLenum] texture [GLuint] level [GLint] ] gles32-lib "glFramebufferTexture2D" glFrontFace: make routine! [ mode [GLenum] ] gles32-lib "glFrontFace" glGenBuffers: make routine! [ n [GLsizei] buffers [integer!] ] gles32-lib "glGenBuffers" glGenerateMipmap: make routine! [ target [GLenum] ] gles32-lib "glGenerateMipmap" glGenFramebuffers: make routine! [ n [GLsizei] framebuffers [integer!] ] gles32-lib "glGenFramebuffers" glGenRenderbuffers: make routine! [ n [GLsizei] renderbuffers [integer!] ] gles32-lib "glGenRenderbuffers" glGenTextures: make routine! [ n [GLsizei] textures [integer!] ] gles32-lib "glGenTextures" glGetActiveAttrib: make routine! [ program [GLuint] index [GLuint] bufSize [GLsizei] length [integer!] size [integer!] type [integer!] name [integer!] ] gles32-lib "glGetActiveAttrib" glGetActiveUniform: make routine! [ program [GLuint] index [GLuint] bufSize [GLsizei] length [integer!] size [integer!] type [integer!] name [integer!] ] gles32-lib "glGetActiveUniform" glGetAttachedShaders: make routine! [ program [GLuint] maxCount [GLsizei] count [integer!] shaders [integer!] ] gles32-lib "glGetAttachedShaders" glGetAttribLocation: make routine! [ program [GLuint] name [string!] return: [GLint] ] gles32-lib "glGetAttribLocation" glGetBooleanv: make routine! [ pname [GLenum] data [integer!] ] gles32-lib "glGetBooleanv" glGetBufferParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetBufferParameteriv" glGetError: make routine! [ return: [GLenum] ] gles32-lib "glGetError" glGetFloatv: make routine! [ pname [GLenum] data [integer!] ] gles32-lib "glGetFloatv" glGetFramebufferAttachmentParameteriv: make routine! [ target [GLenum] attachment [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetFramebufferAttachmentParameteriv" glGetIntegerv: make routine! [ pname [GLenum] data [integer!] ] gles32-lib "glGetIntegerv" glGetProgramiv: make routine! [ program [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetProgramiv" glGetProgramInfoLog: make routine! [ program [GLuint] bufSize [GLsizei] length [integer!] infoLog [string!] ] gles32-lib "glGetProgramInfoLog" glGetRenderbufferParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetRenderbufferParameteriv" glGetShaderiv: make routine! [ shader [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetShaderiv" glGetShaderInfoLog: make routine! [ shader [GLuint] bufSize [GLsizei] length [integer!] infoLog [string!] ] gles32-lib "glGetShaderInfoLog" glGetShaderPrecisionFormat: make routine! [ shadertype [GLenum] precisiontype [GLenum] range [integer!] precision [integer!] ] gles32-lib "glGetShaderPrecisionFormat" glGetShaderSource: make routine! [ shader [GLuint] bufSize [GLsizei] length [integer!] source [integer!] ] gles32-lib "glGetShaderSource" glGetString: make routine! [ name [GLenum] return: [string!] ] gles32-lib "glGetString" glGetTexParameterfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetTexParameterfv" glGetTexParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetTexParameteriv" glGetUniformfv: make routine! [ program [GLuint] location [GLint] params [integer!] ] gles32-lib "glGetUniformfv" glGetUniformiv: make routine! [ program [GLuint] location [GLint] params [integer!] ] gles32-lib "glGetUniformiv" glGetUniformLocation: make routine! [ program [GLuint] name [string!] return: [GLint] ] gles32-lib "glGetUniformLocation" glGetVertexAttribfv: make routine! [ index [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetVertexAttribfv" glGetVertexAttribiv: make routine! [ index [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetVertexAttribiv" glGetVertexAttribPointerv: make routine! [ index [GLuint] pname [GLenum] pointer [integer!] ] gles32-lib "glGetVertexAttribPointerv" glHint: make routine! [ target [GLenum] mode [GLenum] ] gles32-lib "glHint" glIsBuffer: make routine! [ buffer [GLuint] return: [GLboolean] ] gles32-lib "glIsBuffer" glIsEnabled: make routine! [ cap [GLenum] return: [GLboolean] ] gles32-lib "glIsEnabled" glIsFramebuffer: make routine! [ framebuffer [GLuint] return: [GLboolean] ] gles32-lib "glIsFramebuffer" glIsProgram: make routine! [ program [GLuint] return: [GLboolean] ] gles32-lib "glIsProgram" glIsRenderbuffer: make routine! [ renderbuffer [GLuint] return: [GLboolean] ] gles32-lib "glIsRenderbuffer" glIsShader: make routine! [ shader [GLuint] return: [GLboolean] ] gles32-lib "glIsShader" glIsTexture: make routine! [ texture [GLuint] return: [GLboolean] ] gles32-lib "glIsTexture" glLineWidth: make routine! [ width [float] ] gles32-lib "glLineWidth" glLinkProgram: make routine! [ program [GLuint] ] gles32-lib "glLinkProgram" glPixelStorei: make routine! [ pname [GLenum] param [GLint] ] gles32-lib "glPixelStorei" glPolygonOffset: make routine! [ factor [float] units [float] ] gles32-lib "glPolygonOffset" glReadPixels: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] pixels [binary!] ] gles32-lib "glReadPixels" glReleaseShaderCompiler: make routine! [ ] gles32-lib "glReleaseShaderCompiler" glRenderbufferStorage: make routine! [ target [GLenum] internalformat [GLenum] width [GLsizei] height [GLsizei] ] gles32-lib "glRenderbufferStorage" glSampleCoverage: make routine! [ value [float] invert [GLboolean] ] gles32-lib "glSampleCoverage" glScissor: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] gles32-lib "glScissor" glShaderBinary: make routine! [ count [GLsizei] shaders [integer!] binaryformat [GLenum] binary [integer!] length [GLsizei] ] gles32-lib "glShaderBinary" glShaderSource: make routine! [ shader [GLuint] count [GLsizei] string [struct! []] length [integer!] ] gles32-lib "glShaderSource" glStencilFunc: make routine! [ func [GLenum] ref [GLint] mask [GLuint] ] gles32-lib "glStencilFunc" glStencilFuncSeparate: make routine! [ face [GLenum] func [GLenum] ref [GLint] mask [GLuint] ] gles32-lib "glStencilFuncSeparate" glStencilMask: make routine! [ mask [GLuint] ] gles32-lib "glStencilMask" glStencilMaskSeparate: make routine! [ face [GLenum] mask [GLuint] ] gles32-lib "glStencilMaskSeparate" glStencilOp: make routine! [ fail [GLenum] zfail [GLenum] zpass [GLenum] ] gles32-lib "glStencilOp" glStencilOpSeparate: make routine! [ face [GLenum] sfail [GLenum] dpfail [GLenum] dppass [GLenum] ] gles32-lib "glStencilOpSeparate" glTexImage2D: make routine! [ target [GLenum] level [GLint] internalformat [GLint] width [GLsizei] height [GLsizei] border [GLint] format [GLenum] type [GLenum] pixels [integer!] ] gles32-lib "glTexImage2D" glTexParameterf: make routine! [ target [GLenum] pname [GLenum] param [float] ] gles32-lib "glTexParameterf" glTexParameterfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glTexParameterfv" glTexParameteri: make routine! [ target [GLenum] pname [GLenum] param [GLint] ] gles32-lib "glTexParameteri" glTexParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glTexParameteriv" glTexSubImage2D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] pixels [integer!] ] gles32-lib "glTexSubImage2D" glUniform1f: make routine! [ location [GLint] v0 [float] ] gles32-lib "glUniform1f" glUniform1fv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform1fv" glUniform1i: make routine! [ location [GLint] v0 [GLint] ] gles32-lib "glUniform1i" glUniform1iv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform1iv" glUniform2f: make routine! [ location [GLint] v0 [float] v1 [float] ] gles32-lib "glUniform2f" glUniform2fv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform2fv" glUniform2i: make routine! [ location [GLint] v0 [GLint] v1 [GLint] ] gles32-lib "glUniform2i" glUniform2iv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform2iv" glUniform3f: make routine! [ location [GLint] v0 [float] v1 [float] v2 [float] ] gles32-lib "glUniform3f" glUniform3fv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform3fv" glUniform3i: make routine! [ location [GLint] v0 [GLint] v1 [GLint] v2 [GLint] ] gles32-lib "glUniform3i" glUniform3iv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform3iv" glUniform4f: make routine! [ location [GLint] v0 [float] v1 [float] v2 [float] v3 [float] ] gles32-lib "glUniform4f" glUniform4fv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform4fv" glUniform4i: make routine! [ location [GLint] v0 [GLint] v1 [GLint] v2 [GLint] v3 [GLint] ] gles32-lib "glUniform4i" glUniform4iv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform4iv" glUniformMatrix2fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix2fv" glUniformMatrix3fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix3fv" glUniformMatrix4fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix4fv" glUseProgram: make routine! [ program [GLuint] ] gles32-lib "glUseProgram" glValidateProgram: make routine! [ program [GLuint] ] gles32-lib "glValidateProgram" glVertexAttrib1f: make routine! [ index [GLuint] x [float] ] gles32-lib "glVertexAttrib1f" glVertexAttrib1fv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttrib1fv" glVertexAttrib2f: make routine! [ index [GLuint] x [float] y [float] ] gles32-lib "glVertexAttrib2f" glVertexAttrib2fv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttrib2fv" glVertexAttrib3f: make routine! [ index [GLuint] x [float] y [float] z [float] ] gles32-lib "glVertexAttrib3f" glVertexAttrib3fv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttrib3fv" glVertexAttrib4f: make routine! [ index [GLuint] x [float] y [float] z [float] w [float] ] gles32-lib "glVertexAttrib4f" glVertexAttrib4fv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttrib4fv" glVertexAttribPointer: make routine! [ index [GLuint] size [GLint] type [GLenum] normalized [GLboolean] stride [GLsizei] pointer [integer!] ] gles32-lib "glVertexAttribPointer" glViewport: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] gles32-lib "glViewport" ; ] ; if GLES_this_version if GLES_this_version >= 3.0.0 [ ; GLES 3.0 defines GL_READ_BUFFER: 3074 GL_UNPACK_ROW_LENGTH: 3314 GL_UNPACK_SKIP_ROWS: 3315 GL_UNPACK_SKIP_PIXELS: 3316 GL_PACK_ROW_LENGTH: 3330 GL_PACK_SKIP_ROWS: 3331 GL_PACK_SKIP_PIXELS: 3332 GL_COLOR: 6144 GL_DEPTH: 6145 GL_STENCIL: 6146 GL_RED: 6403 GL_RGB8: 32849 GL_RGBA8: 32856 GL_RGB10_A2: 32857 GL_TEXTURE_BINDING_3D: 32874 GL_UNPACK_SKIP_IMAGES: 32877 GL_UNPACK_IMAGE_HEIGHT: 32878 GL_TEXTURE_3D: 32879 GL_TEXTURE_WRAP_R: 32882 GL_MAX_3D_TEXTURE_SIZE: 32883 GL_UNSIGNED_INT_2_10_10_10_REV: 33640 GL_MAX_ELEMENTS_VERTICES: 33000 GL_MAX_ELEMENTS_INDICES: 33001 GL_TEXTURE_MIN_LOD: 33082 GL_TEXTURE_MAX_LOD: 33083 GL_TEXTURE_BASE_LEVEL: 33084 GL_TEXTURE_MAX_LEVEL: 33085 GL_MIN: 32775 GL_MAX: 32776 GL_DEPTH_COMPONENT24: 33190 GL_MAX_TEXTURE_LOD_BIAS: 34045 GL_TEXTURE_COMPARE_MODE: 34892 GL_TEXTURE_COMPARE_FUNC: 34893 GL_CURRENT_QUERY: 34917 GL_QUERY_RESULT: 34918 GL_QUERY_RESULT_AVAILABLE: 34919 GL_BUFFER_MAPPED: 35004 GL_BUFFER_MAP_POINTER: 35005 GL_STREAM_READ: 35041 GL_STREAM_COPY: 35042 GL_STATIC_READ: 35045 GL_STATIC_COPY: 35046 GL_DYNAMIC_READ: 35049 GL_DYNAMIC_COPY: 35050 GL_MAX_DRAW_BUFFERS: 34852 GL_DRAW_BUFFER0: 34853 GL_DRAW_BUFFER1: 34854 GL_DRAW_BUFFER2: 34855 GL_DRAW_BUFFER3: 34856 GL_DRAW_BUFFER4: 34857 GL_DRAW_BUFFER5: 34858 GL_DRAW_BUFFER6: 34859 GL_DRAW_BUFFER7: 34860 GL_DRAW_BUFFER8: 34861 GL_DRAW_BUFFER9: 34862 GL_DRAW_BUFFER10: 34863 GL_DRAW_BUFFER11: 34864 GL_DRAW_BUFFER12: 34865 GL_DRAW_BUFFER13: 34866 GL_DRAW_BUFFER14: 34867 GL_DRAW_BUFFER15: 34868 GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: 35657 GL_MAX_VERTEX_UNIFORM_COMPONENTS: 35658 GL_SAMPLER_3D: 35679 GL_SAMPLER_2D_SHADOW: 35682 GL_FRAGMENT_SHADER_DERIVATIVE_HINT: 35723 GL_PIXEL_PACK_BUFFER: 35051 GL_PIXEL_UNPACK_BUFFER: 35052 GL_PIXEL_PACK_BUFFER_BINDING: 35053 GL_PIXEL_UNPACK_BUFFER_BINDING: 35055 GL_FLOAT_MAT2x3: 35685 GL_FLOAT_MAT2x4: 35686 GL_FLOAT_MAT3x2: 35687 GL_FLOAT_MAT3x4: 35688 GL_FLOAT_MAT4x2: 35689 GL_FLOAT_MAT4x3: 35690 GL_SRGB: 35904 GL_SRGB8: 35905 GL_SRGB8_ALPHA8: 35907 GL_COMPARE_REF_TO_TEXTURE: 34894 GL_MAJOR_VERSION: 33307 GL_MINOR_VERSION: 33308 GL_NUM_EXTENSIONS: 33309 GL_RGBA32F: 34836 GL_RGB32F: 34837 GL_RGBA16F: 34842 GL_RGB16F: 34843 GL_VERTEX_ATTRIB_ARRAY_INTEGER: 35069 GL_MAX_ARRAY_TEXTURE_LAYERS: 35071 GL_MIN_PROGRAM_TEXEL_OFFSET: 35076 GL_MAX_PROGRAM_TEXEL_OFFSET: 35077 GL_MAX_VARYING_COMPONENTS: 35659 GL_TEXTURE_2D_ARRAY: 35866 GL_TEXTURE_BINDING_2D_ARRAY: 35869 GL_R11F_G11F_B10F: 35898 GL_UNSIGNED_INT_10F_11F_11F_REV: 35899 GL_RGB9_E5: 35901 GL_UNSIGNED_INT_5_9_9_9_REV: 35902 GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: 35958 GL_TRANSFORM_FEEDBACK_BUFFER_MODE: 35967 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 35968 GL_TRANSFORM_FEEDBACK_VARYINGS: 35971 GL_TRANSFORM_FEEDBACK_BUFFER_START: 35972 GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: 35973 GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 35976 GL_RASTERIZER_DISCARD: 35977 GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 35978 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 35979 GL_INTERLEAVED_ATTRIBS: 35980 GL_SEPARATE_ATTRIBS: 35981 GL_TRANSFORM_FEEDBACK_BUFFER: 35982 GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: 35983 GL_RGBA32UI: 36208 GL_RGB32UI: 36209 GL_RGBA16UI: 36214 GL_RGB16UI: 36215 GL_RGBA8UI: 36220 GL_RGB8UI: 36221 GL_RGBA32I: 36226 GL_RGB32I: 36227 GL_RGBA16I: 36232 GL_RGB16I: 36233 GL_RGBA8I: 36238 GL_RGB8I: 36239 GL_RED_INTEGER: 36244 GL_RGB_INTEGER: 36248 GL_RGBA_INTEGER: 36249 GL_SAMPLER_2D_ARRAY: 36289 GL_SAMPLER_2D_ARRAY_SHADOW: 36292 GL_SAMPLER_CUBE_SHADOW: 36293 GL_UNSIGNED_INT_VEC2: 36294 GL_UNSIGNED_INT_VEC3: 36295 GL_UNSIGNED_INT_VEC4: 36296 GL_INT_SAMPLER_2D: 36298 GL_INT_SAMPLER_3D: 36299 GL_INT_SAMPLER_CUBE: 36300 GL_INT_SAMPLER_2D_ARRAY: 36303 GL_UNSIGNED_INT_SAMPLER_2D: 36306 GL_UNSIGNED_INT_SAMPLER_3D: 36307 GL_UNSIGNED_INT_SAMPLER_CUBE: 36308 GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: 36311 GL_BUFFER_ACCESS_FLAGS: 37151 GL_BUFFER_MAP_LENGTH: 37152 GL_BUFFER_MAP_OFFSET: 37153 GL_DEPTH_COMPONENT32F: 36012 GL_DEPTH32F_STENCIL8: 36013 GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 36269 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 33296 GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 33297 GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: 33298 GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 33299 GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 33300 GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 33301 GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 33302 GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 33303 GL_FRAMEBUFFER_DEFAULT: 33304 GL_FRAMEBUFFER_UNDEFINED: 33305 GL_DEPTH_STENCIL_ATTACHMENT: 33306 GL_DEPTH_STENCIL: 34041 GL_UNSIGNED_INT_24_8: 34042 GL_DEPTH24_STENCIL8: 35056 GL_UNSIGNED_NORMALIZED: 35863 GL_DRAW_FRAMEBUFFER_BINDING: 36006 GL_READ_FRAMEBUFFER: 36008 GL_DRAW_FRAMEBUFFER: 36009 GL_READ_FRAMEBUFFER_BINDING: 36010 GL_RENDERBUFFER_SAMPLES: 36011 GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 36052 GL_MAX_COLOR_ATTACHMENTS: 36063 GL_COLOR_ATTACHMENT1: 36065 GL_COLOR_ATTACHMENT2: 36066 GL_COLOR_ATTACHMENT3: 36067 GL_COLOR_ATTACHMENT4: 36068 GL_COLOR_ATTACHMENT5: 36069 GL_COLOR_ATTACHMENT6: 36070 GL_COLOR_ATTACHMENT7: 36071 GL_COLOR_ATTACHMENT8: 36072 GL_COLOR_ATTACHMENT9: 36073 GL_COLOR_ATTACHMENT10: 36074 GL_COLOR_ATTACHMENT11: 36075 GL_COLOR_ATTACHMENT12: 36076 GL_COLOR_ATTACHMENT13: 36077 GL_COLOR_ATTACHMENT14: 36078 GL_COLOR_ATTACHMENT15: 36079 GL_COLOR_ATTACHMENT16: 36080 GL_COLOR_ATTACHMENT17: 36081 GL_COLOR_ATTACHMENT18: 36082 GL_COLOR_ATTACHMENT19: 36083 GL_COLOR_ATTACHMENT20: 36084 GL_COLOR_ATTACHMENT21: 36085 GL_COLOR_ATTACHMENT22: 36086 GL_COLOR_ATTACHMENT23: 36087 GL_COLOR_ATTACHMENT24: 36088 GL_COLOR_ATTACHMENT25: 36089 GL_COLOR_ATTACHMENT26: 36090 GL_COLOR_ATTACHMENT27: 36091 GL_COLOR_ATTACHMENT28: 36092 GL_COLOR_ATTACHMENT29: 36093 GL_COLOR_ATTACHMENT30: 36094 GL_COLOR_ATTACHMENT31: 36095 GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 36182 GL_MAX_SAMPLES: 36183 GL_HALF_FLOAT: 5131 GL_MAP_READ_BIT: 1 GL_MAP_WRITE_BIT: 2 GL_MAP_INVALIDATE_RANGE_BIT: 4 GL_MAP_INVALIDATE_BUFFER_BIT: 8 GL_MAP_FLUSH_EXPLICIT_BIT: 16 GL_MAP_UNSYNCHRONIZED_BIT: 32 GL_RG: 33319 GL_RG_INTEGER: 33320 GL_R8: 33321 GL_RG8: 33323 GL_R16F: 33325 GL_R32F: 33326 GL_RG16F: 33327 GL_RG32F: 33328 GL_R8I: 33329 GL_R8UI: 33330 GL_R16I: 33331 GL_R16UI: 33332 GL_R32I: 33333 GL_R32UI: 33334 GL_RG8I: 33335 GL_RG8UI: 33336 GL_RG16I: 33337 GL_RG16UI: 33338 GL_RG32I: 33339 GL_RG32UI: 33340 GL_VERTEX_ARRAY_BINDING: 34229 GL_R8_SNORM: 36756 GL_RG8_SNORM: 36757 GL_RGB8_SNORM: 36758 GL_RGBA8_SNORM: 36759 GL_SIGNED_NORMALIZED: 36764 GL_PRIMITIVE_RESTART_FIXED_INDEX: 36201 GL_COPY_READ_BUFFER: 36662 GL_COPY_WRITE_BUFFER: 36663 GL_COPY_READ_BUFFER_BINDING: 36662 GL_COPY_WRITE_BUFFER_BINDING: 36663 GL_UNIFORM_BUFFER: 35345 GL_UNIFORM_BUFFER_BINDING: 35368 GL_UNIFORM_BUFFER_START: 35369 GL_UNIFORM_BUFFER_SIZE: 35370 GL_MAX_VERTEX_UNIFORM_BLOCKS: 35371 GL_MAX_FRAGMENT_UNIFORM_BLOCKS: 35373 GL_MAX_COMBINED_UNIFORM_BLOCKS: 35374 GL_MAX_UNIFORM_BUFFER_BINDINGS: 35375 GL_MAX_UNIFORM_BLOCK_SIZE: 35376 GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 35377 GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 35379 GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: 35380 GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: 35381 GL_ACTIVE_UNIFORM_BLOCKS: 35382 GL_UNIFORM_TYPE: 35383 GL_UNIFORM_SIZE: 35384 GL_UNIFORM_NAME_LENGTH: 35385 GL_UNIFORM_BLOCK_INDEX: 35386 GL_UNIFORM_OFFSET: 35387 GL_UNIFORM_ARRAY_STRIDE: 35388 GL_UNIFORM_MATRIX_STRIDE: 35389 GL_UNIFORM_IS_ROW_MAJOR: 35390 GL_UNIFORM_BLOCK_BINDING: 35391 GL_UNIFORM_BLOCK_DATA_SIZE: 35392 GL_UNIFORM_BLOCK_NAME_LENGTH: 35393 GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: 35394 GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 35395 GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 35396 GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 35398 GL_INVALID_INDEX: -1 GL_MAX_VERTEX_OUTPUT_COMPONENTS: 37154 GL_MAX_FRAGMENT_INPUT_COMPONENTS: 37157 GL_MAX_SERVER_WAIT_TIMEOUT: 37137 GL_OBJECT_TYPE: 37138 GL_SYNC_CONDITION: 37139 GL_SYNC_STATUS: 37140 GL_SYNC_FLAGS: 37141 GL_SYNC_FENCE: 37142 GL_SYNC_GPU_COMMANDS_COMPLETE: 37143 GL_UNSIGNALED: 37144 GL_SIGNALED: 37145 GL_ALREADY_SIGNALED: 37146 GL_TIMEOUT_EXPIRED: 37147 GL_CONDITION_SATISFIED: 37148 GL_WAIT_FAILED: 37149 GL_SYNC_FLUSH_COMMANDS_BIT: 1 {#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull} GL_VERTEX_ATTRIB_ARRAY_DIVISOR: 35070 GL_ANY_SAMPLES_PASSED: 35887 GL_ANY_SAMPLES_PASSED_CONSERVATIVE: 36202 GL_SAMPLER_BINDING: 35097 GL_RGB10_A2UI: 36975 GL_TEXTURE_SWIZZLE_R: 36418 GL_TEXTURE_SWIZZLE_G: 36419 GL_TEXTURE_SWIZZLE_B: 36420 GL_TEXTURE_SWIZZLE_A: 36421 GL_GREEN: 6404 GL_BLUE: 6405 GL_INT_2_10_10_10_REV: 36255 GL_TRANSFORM_FEEDBACK: 36386 GL_TRANSFORM_FEEDBACK_PAUSED: 36387 GL_TRANSFORM_FEEDBACK_ACTIVE: 36388 GL_TRANSFORM_FEEDBACK_BINDING: 36389 GL_PROGRAM_BINARY_RETRIEVABLE_HINT: 33367 GL_PROGRAM_BINARY_LENGTH: 34625 GL_NUM_PROGRAM_BINARY_FORMATS: 34814 GL_PROGRAM_BINARY_FORMATS: 34815 GL_COMPRESSED_R11_EAC: 37488 GL_COMPRESSED_SIGNED_R11_EAC: 37489 GL_COMPRESSED_RG11_EAC: 37490 GL_COMPRESSED_SIGNED_RG11_EAC: 37491 GL_COMPRESSED_RGB8_ETC2: 37492 GL_COMPRESSED_SRGB8_ETC2: 37493 GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37494 GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37495 GL_COMPRESSED_RGBA8_ETC2_EAC: 37496 GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 37497 GL_TEXTURE_IMMUTABLE_FORMAT: 37167 GL_MAX_ELEMENT_INDEX: 36203 GL_NUM_SAMPLE_COUNTS: 37760 GL_TEXTURE_IMMUTABLE_LEVELS: 33503 ; ; GLES 3.0 PROTOTYPES glReadBuffer: make routine! [ src [GLenum] ] gles32-lib "glReadBuffer" glDrawRangeElements: make routine! [ mode [GLenum] start [GLuint] end [GLuint] count [GLsizei] type [GLenum] indices [integer!] ] gles32-lib "glDrawRangeElements" glTexImage3D: make routine! [ target [GLenum] level [GLint] internalformat [GLint] width [GLsizei] height [GLsizei] depth [GLsizei] border [GLint] format [GLenum] type [GLenum] pixels [integer!] ] gles32-lib "glTexImage3D" glTexSubImage3D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] zoffset [GLint] width [GLsizei] height [GLsizei] depth [GLsizei] format [GLenum] type [GLenum] pixels [integer!] ] gles32-lib "glTexSubImage3D" glCopyTexSubImage3D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] zoffset [GLint] x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] gles32-lib "glCopyTexSubImage3D" glCompressedTexImage3D: make routine! [ target [GLenum] level [GLint] internalformat [GLenum] width [GLsizei] height [GLsizei] depth [GLsizei] border [GLint] imageSize [GLsizei] data [integer!] ] gles32-lib "glCompressedTexImage3D" glCompressedTexSubImage3D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] zoffset [GLint] width [GLsizei] height [GLsizei] depth [GLsizei] format [GLenum] imageSize [GLsizei] data [integer!] ] gles32-lib "glCompressedTexSubImage3D" glGenQueries: make routine! [ n [GLsizei] ids [integer!] ] gles32-lib "glGenQueries" glDeleteQueries: make routine! [ n [GLsizei] ids [integer!] ] gles32-lib "glDeleteQueries" glIsQuery: make routine! [ id [GLuint] return: [GLboolean] ] gles32-lib "glIsQuery" glBeginQuery: make routine! [ target [GLenum] id [GLuint] ] gles32-lib "glBeginQuery" glEndQuery: make routine! [ target [GLenum] ] gles32-lib "glEndQuery" glGetQueryiv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetQueryiv" glGetQueryObjectuiv: make routine! [ id [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetQueryObjectuiv" glUnmapBuffer: make routine! [ target [GLenum] return: [GLboolean] ] gles32-lib "glUnmapBuffer" glGetBufferPointerv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetBufferPointerv" glDrawBuffers: make routine! [ n [GLsizei] bufs [integer!] ] gles32-lib "glDrawBuffers" glUniformMatrix2x3fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix2x3fv" glUniformMatrix3x2fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix3x2fv" glUniformMatrix2x4fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix2x4fv" glUniformMatrix4x2fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix4x2fv" glUniformMatrix3x4fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix3x4fv" glUniformMatrix4x3fv: make routine! [ location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glUniformMatrix4x3fv" glBlitFramebuffer: make routine! [ srcX0 [GLint] srcY0 [GLint] srcX1 [GLint] srcY1 [GLint] dstX0 [GLint] dstY0 [GLint] dstX1 [GLint] dstY1 [GLint] mask [GLbitfield] filter [GLenum] ] gles32-lib "glBlitFramebuffer" glRenderbufferStorageMultisample: make routine! [ target [GLenum] samples [GLsizei] internalformat [GLenum] width [GLsizei] height [GLsizei] ] gles32-lib "glRenderbufferStorageMultisample" glFramebufferTextureLayer: make routine! [ target [GLenum] attachment [GLenum] texture [GLuint] level [GLint] layer [GLint] ] gles32-lib "glFramebufferTextureLayer" glMapBufferRange: make routine! [ target [GLenum] offset [GLintptr] length [GLsizeiptr] access [GLbitfield] return: [integer!] ] gles32-lib "glMapBufferRange" glFlushMappedBufferRange: make routine! [ target [GLenum] offset [GLintptr] length [GLsizeiptr] ] gles32-lib "glFlushMappedBufferRange" glBindVertexArray: make routine! [ array [GLuint] ] gles32-lib "glBindVertexArray" glDeleteVertexArrays: make routine! [ n [GLsizei] arrays [integer!] ] gles32-lib "glDeleteVertexArrays" ; better avoid using this ? At least with Firefox32bit ? ;glGenVertexArrays: make routine! [ n [GLsizei] arrays [struct! []] ] gles32-lib "glGenVertexArrays" ; glIsVertexArray: make routine! [ array [GLuint] return: [GLboolean] ] gles32-lib "glIsVertexArray" glGetIntegeri_v: make routine! [ target [GLenum] index [GLuint] data [integer!] ] gles32-lib "glGetIntegeri_v" glBeginTransformFeedback: make routine! [ primitiveMode [GLenum] ] gles32-lib "glBeginTransformFeedback" glEndTransformFeedback: make routine! [ ] gles32-lib "glEndTransformFeedback" glBindBufferRange: make routine! [ target [GLenum] index [GLuint] buffer [GLuint] offset [GLintptr] size [GLsizeiptr] ] gles32-lib "glBindBufferRange" glBindBufferBase: make routine! [ target [GLenum] index [GLuint] buffer [GLuint] ] gles32-lib "glBindBufferBase" glTransformFeedbackVaryings: make routine! [ program [GLuint] count [GLsizei] varyings [integer!] bufferMode [GLenum] ] gles32-lib "glTransformFeedbackVaryings" glGetTransformFeedbackVarying: make routine! [ program [GLuint] index [GLuint] bufSize [GLsizei] length [integer!] size [integer!] type [integer!] name [string!] ] gles32-lib "glGetTransformFeedbackVarying" glVertexAttribIPointer: make routine! [ index [GLuint] size [GLint] type [GLenum] stride [GLsizei] pointer [integer!] ] gles32-lib "glVertexAttribIPointer" glGetVertexAttribIiv: make routine! [ index [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetVertexAttribIiv" glGetVertexAttribIuiv: make routine! [ index [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetVertexAttribIuiv" glVertexAttribI4i: make routine! [ index [GLuint] x [GLint] y [GLint] z [GLint] w [GLint] ] gles32-lib "glVertexAttribI4i" glVertexAttribI4ui: make routine! [ index [GLuint] x [GLuint] y [GLuint] z [GLuint] w [GLuint] ] gles32-lib "glVertexAttribI4ui" glVertexAttribI4iv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttribI4iv" glVertexAttribI4uiv: make routine! [ index [GLuint] v [integer!] ] gles32-lib "glVertexAttribI4uiv" glGetUniformuiv: make routine! [ program [GLuint] location [GLint] params [integer!] ] gles32-lib "glGetUniformuiv" glGetFragDataLocation: make routine! [ program [GLuint] name [string!] return: [GLint] ] gles32-lib "glGetFragDataLocation" glUniform1ui: make routine! [ location [GLint] v0 [GLuint] ] gles32-lib "glUniform1ui" glUniform2ui: make routine! [ location [GLint] v0 [GLuint] v1 [GLuint] ] gles32-lib "glUniform2ui" glUniform3ui: make routine! [ location [GLint] v0 [GLuint] v1 [GLuint] v2 [GLuint] ] gles32-lib "glUniform3ui" glUniform4ui: make routine! [ location [GLint] v0 [GLuint] v1 [GLuint] v2 [GLuint] v3 [GLuint] ] gles32-lib "glUniform4ui" glUniform1uiv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform1uiv" glUniform2uiv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform2uiv" glUniform3uiv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform3uiv" glUniform4uiv: make routine! [ location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glUniform4uiv" glClearBufferiv: make routine! [ buffer [GLenum] drawbuffer [GLint] value [integer!] ] gles32-lib "glClearBufferiv" glClearBufferuiv: make routine! [ buffer [GLenum] drawbuffer [GLint] value [integer!] ] gles32-lib "glClearBufferuiv" glClearBufferfv: make routine! [ buffer [GLenum] drawbuffer [GLint] value [integer!] ] gles32-lib "glClearBufferfv" glClearBufferfi: make routine! [ buffer [GLenum] drawbuffer [GLint] depth [float] stencil [GLint] ] gles32-lib "glClearBufferfi" glGetStringi: make routine! [ name [GLenum] index [GLuint] return: [string!] ] gles32-lib "glGetStringi" glCopyBufferSubData: make routine! [ readTarget [GLenum] writeTarget [GLenum] readOffset [GLintptr] writeOffset [GLintptr] size [GLsizeiptr] ] gles32-lib "glCopyBufferSubData" glGetUniformIndices: make routine! [ program [GLuint] uniformCount [GLsizei] uniformNames [integer!] uniformIndices [integer!] ] gles32-lib "glGetUniformIndices" glGetActiveUniformsiv: make routine! [ program [GLuint] uniformCount [GLsizei] uniformIndices [integer!] pname [GLenum] params [integer!] ] gles32-lib "glGetActiveUniformsiv" glGetUniformBlockIndex: make routine! [ program [GLuint] uniformBlockName [integer!] return: [GLuint] ] gles32-lib "glGetUniformBlockIndex" glGetActiveUniformBlockiv: make routine! [ program [GLuint] uniformBlockIndex [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetActiveUniformBlockiv" glGetActiveUniformBlockName: make routine! [ program [GLuint] uniformBlockIndex [GLuint] bufSize [GLsizei] length [integer!] uniformBlockName [integer!] ] gles32-lib "glGetActiveUniformBlockName" glUniformBlockBinding: make routine! [ program [GLuint] uniformBlockIndex [GLuint] uniformBlockBinding [GLuint] ] gles32-lib "glUniformBlockBinding" glDrawArraysInstanced: make routine! [ mode [GLenum] first [GLint] count [GLsizei] instancecount [GLsizei] ] gles32-lib "glDrawArraysInstanced" glDrawElementsInstanced: make routine! [ mode [GLenum] count [GLsizei] type [GLenum] indices [integer!] instancecount [GLsizei] ] gles32-lib "glDrawElementsInstanced" glFenceSync: make routine! [ condition [GLenum] flags [GLbitfield] return: [GLsync] ] gles32-lib "glFenceSync" glIsSync: make routine! [ sync [GLsync] return: [GLboolean] ] gles32-lib "glIsSync" glDeleteSync: make routine! [ sync [GLsync] ] gles32-lib "glDeleteSync" glClientWaitSync: make routine! [ sync [GLsync] flags [GLbitfield] timeout [double] return: [GLenum] ] gles32-lib "glClientWaitSync" glWaitSync: make routine! [ sync [GLsync] flags [GLbitfield] timeout [double] ] gles32-lib "glWaitSync" glGetInteger64v: make routine! [ pname [GLenum] data [integer!] ] gles32-lib "glGetInteger64v" glGetSynciv: make routine! [ sync [GLsync] pname [GLenum] bufSize [GLsizei] length [integer!] values [integer!] ] gles32-lib "glGetSynciv" glGetInteger64i_v: make routine! [ target [GLenum] index [GLuint] data [integer!] ] gles32-lib "glGetInteger64i_v" glGetBufferParameteri64v: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetBufferParameteri64v" glGenSamplers: make routine! [ count [GLsizei] samplers [integer!] ] gles32-lib "glGenSamplers" glDeleteSamplers: make routine! [ count [GLsizei] samplers [integer!] ] gles32-lib "glDeleteSamplers" glIsSampler: make routine! [ sampler [GLuint] return: [GLboolean] ] gles32-lib "glIsSampler" glBindSampler: make routine! [ unit [GLuint] sampler [GLuint] ] gles32-lib "glBindSampler" glSamplerParameteri: make routine! [ sampler [GLuint] pname [GLenum] param [GLint] ] gles32-lib "glSamplerParameteri" glSamplerParameteriv: make routine! [ sampler [GLuint] pname [GLenum] param [integer!] ] gles32-lib "glSamplerParameteriv" glSamplerParameterf: make routine! [ sampler [GLuint] pname [GLenum] param [float] ] gles32-lib "glSamplerParameterf" glSamplerParameterfv: make routine! [ sampler [GLuint] pname [GLenum] param [integer!] ] gles32-lib "glSamplerParameterfv" glGetSamplerParameteriv: make routine! [ sampler [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetSamplerParameteriv" glGetSamplerParameterfv: make routine! [ sampler [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetSamplerParameterfv" glVertexAttribDivisor: make routine! [ index [GLuint] divisor [GLuint] ] gles32-lib "glVertexAttribDivisor" glBindTransformFeedback: make routine! [ target [GLenum] id [GLuint] ] gles32-lib "glBindTransformFeedback" glDeleteTransformFeedbacks: make routine! [ n [GLsizei] ids [integer!] ] gles32-lib "glDeleteTransformFeedbacks" glGenTransformFeedbacks: make routine! [ n [GLsizei] ids [integer!] ] gles32-lib "glGenTransformFeedbacks" glIsTransformFeedback: make routine! [ id [GLuint] return: [GLboolean] ] gles32-lib "glIsTransformFeedback" glPauseTransformFeedback: make routine! [ ] gles32-lib "glPauseTransformFeedback" glResumeTransformFeedback: make routine! [ ] gles32-lib "glResumeTransformFeedback" glGetProgramBinary: make routine! [ program [GLuint] bufSize [GLsizei] length [integer!] binaryFormat [integer!] binary [integer!] ] gles32-lib "glGetProgramBinary" glProgramBinary: make routine! [ program [GLuint] binaryFormat [GLenum] binary [integer!] length [GLsizei] ] gles32-lib "glProgramBinary" glProgramParameteri: make routine! [ program [GLuint] pname [GLenum] value [GLint] ] gles32-lib "glProgramParameteri" glInvalidateFramebuffer: make routine! [ target [GLenum] numAttachments [GLsizei] attachments [integer!] ] gles32-lib "glInvalidateFramebuffer" glInvalidateSubFramebuffer: make routine! [ target [GLenum] numAttachments [GLsizei] attachments [integer!] x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] gles32-lib "glInvalidateSubFramebuffer" glTexStorage2D: make routine! [ target [GLenum] levels [GLsizei] internalformat [GLenum] width [GLsizei] height [GLsizei] ] gles32-lib "glTexStorage2D" glTexStorage3D: make routine! [ target [GLenum] levels [GLsizei] internalformat [GLenum] width [GLsizei] height [GLsizei] depth [GLsizei] ] gles32-lib "glTexStorage3D" glGetInternalformativ: make routine! [ target [GLenum] internalformat [GLenum] pname [GLenum] bufSize [GLsizei] params [integer!] ] gles32-lib "glGetInternalformativ" ; ] ; if GLES_this_version if GLES_this_version >= 3.1.0 [ ; GLES 3.1 defines GL_COMPUTE_SHADER: 37305 GL_MAX_COMPUTE_UNIFORM_BLOCKS: 37307 GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS: 37308 GL_MAX_COMPUTE_IMAGE_UNIFORMS: 37309 GL_MAX_COMPUTE_SHARED_MEMORY_SIZE: 33378 GL_MAX_COMPUTE_UNIFORM_COMPONENTS: 33379 GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS: 33380 GL_MAX_COMPUTE_ATOMIC_COUNTERS: 33381 GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS: 33382 GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: 37099 GL_MAX_COMPUTE_WORK_GROUP_COUNT: 37310 GL_MAX_COMPUTE_WORK_GROUP_SIZE: 37311 GL_COMPUTE_WORK_GROUP_SIZE: 33383 GL_DISPATCH_INDIRECT_BUFFER: 37102 GL_DISPATCH_INDIRECT_BUFFER_BINDING: 37103 GL_COMPUTE_SHADER_BIT: 32 GL_DRAW_INDIRECT_BUFFER: 36671 GL_DRAW_INDIRECT_BUFFER_BINDING: 36675 GL_MAX_UNIFORM_LOCATIONS: 33390 GL_FRAMEBUFFER_DEFAULT_WIDTH: 37648 GL_FRAMEBUFFER_DEFAULT_HEIGHT: 37649 GL_FRAMEBUFFER_DEFAULT_SAMPLES: 37651 GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: 37652 GL_MAX_FRAMEBUFFER_WIDTH: 37653 GL_MAX_FRAMEBUFFER_HEIGHT: 37654 GL_MAX_FRAMEBUFFER_SAMPLES: 37656 GL_UNIFORM: 37601 GL_UNIFORM_BLOCK: 37602 GL_PROGRAM_INPUT: 37603 GL_PROGRAM_OUTPUT: 37604 GL_BUFFER_VARIABLE: 37605 GL_SHADER_STORAGE_BLOCK: 37606 GL_ATOMIC_COUNTER_BUFFER: 37568 GL_TRANSFORM_FEEDBACK_VARYING: 37620 GL_ACTIVE_RESOURCES: 37621 GL_MAX_NAME_LENGTH: 37622 GL_MAX_NUM_ACTIVE_VARIABLES: 37623 GL_NAME_LENGTH: 37625 GL_TYPE: 37626 GL_ARRAY_SIZE: 37627 GL_OFFSET: 37628 GL_BLOCK_INDEX: 37629 GL_ARRAY_STRIDE: 37630 GL_MATRIX_STRIDE: 37631 GL_IS_ROW_MAJOR: 37632 GL_ATOMIC_COUNTER_BUFFER_INDEX: 37633 GL_BUFFER_BINDING: 37634 GL_BUFFER_DATA_SIZE: 37635 GL_NUM_ACTIVE_VARIABLES: 37636 GL_ACTIVE_VARIABLES: 37637 GL_REFERENCED_BY_VERTEX_SHADER: 37638 GL_REFERENCED_BY_FRAGMENT_SHADER: 37642 GL_REFERENCED_BY_COMPUTE_SHADER: 37643 GL_TOP_LEVEL_ARRAY_SIZE: 37644 GL_TOP_LEVEL_ARRAY_STRIDE: 37645 GL_LOCATION: 37646 GL_VERTEX_SHADER_BIT: 1 GL_FRAGMENT_SHADER_BIT: 2 GL_ALL_SHADER_BITS: -1 GL_PROGRAM_SEPARABLE: 33368 GL_ACTIVE_PROGRAM: 33369 GL_PROGRAM_PIPELINE_BINDING: 33370 GL_ATOMIC_COUNTER_BUFFER_BINDING: 37569 GL_ATOMIC_COUNTER_BUFFER_START: 37570 GL_ATOMIC_COUNTER_BUFFER_SIZE: 37571 GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS: 37580 GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS: 37584 GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS: 37585 GL_MAX_VERTEX_ATOMIC_COUNTERS: 37586 GL_MAX_FRAGMENT_ATOMIC_COUNTERS: 37590 GL_MAX_COMBINED_ATOMIC_COUNTERS: 37591 GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE: 37592 GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS: 37596 GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: 37593 GL_UNSIGNED_INT_ATOMIC_COUNTER: 37595 GL_MAX_IMAGE_UNITS: 36664 GL_MAX_VERTEX_IMAGE_UNIFORMS: 37066 GL_MAX_FRAGMENT_IMAGE_UNIFORMS: 37070 GL_MAX_COMBINED_IMAGE_UNIFORMS: 37071 GL_IMAGE_BINDING_NAME: 36666 GL_IMAGE_BINDING_LEVEL: 36667 GL_IMAGE_BINDING_LAYERED: 36668 GL_IMAGE_BINDING_LAYER: 36669 GL_IMAGE_BINDING_ACCESS: 36670 GL_IMAGE_BINDING_FORMAT: 36974 GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT: 1 GL_ELEMENT_ARRAY_BARRIER_BIT: 2 GL_UNIFORM_BARRIER_BIT: 4 GL_TEXTURE_FETCH_BARRIER_BIT: 8 GL_SHADER_IMAGE_ACCESS_BARRIER_BIT: 32 GL_COMMAND_BARRIER_BIT: 64 GL_PIXEL_BUFFER_BARRIER_BIT: 128 GL_TEXTURE_UPDATE_BARRIER_BIT: 256 GL_BUFFER_UPDATE_BARRIER_BIT: 512 GL_FRAMEBUFFER_BARRIER_BIT: 1024 GL_TRANSFORM_FEEDBACK_BARRIER_BIT: 2048 GL_ATOMIC_COUNTER_BARRIER_BIT: 4096 GL_ALL_BARRIER_BITS: -1 GL_IMAGE_2D: 36941 GL_IMAGE_3D: 36942 GL_IMAGE_CUBE: 36944 GL_IMAGE_2D_ARRAY: 36947 GL_INT_IMAGE_2D: 36952 GL_INT_IMAGE_3D: 36953 GL_INT_IMAGE_CUBE: 36955 GL_INT_IMAGE_2D_ARRAY: 36958 GL_UNSIGNED_INT_IMAGE_2D: 36963 GL_UNSIGNED_INT_IMAGE_3D: 36964 GL_UNSIGNED_INT_IMAGE_CUBE: 36966 GL_UNSIGNED_INT_IMAGE_2D_ARRAY: 36969 GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: 37063 GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: 37064 GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS: 37065 GL_READ_ONLY: 35000 GL_WRITE_ONLY: 35001 GL_READ_WRITE: 35002 GL_SHADER_STORAGE_BUFFER: 37074 GL_SHADER_STORAGE_BUFFER_BINDING: 37075 GL_SHADER_STORAGE_BUFFER_START: 37076 GL_SHADER_STORAGE_BUFFER_SIZE: 37077 GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: 37078 GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS: 37082 GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS: 37083 GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS: 37084 GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS: 37085 GL_MAX_SHADER_STORAGE_BLOCK_SIZE: 37086 GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT: 37087 GL_SHADER_STORAGE_BARRIER_BIT: 8192 GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: 36665 GL_DEPTH_STENCIL_TEXTURE_MODE: 37098 GL_STENCIL_INDEX: 6401 GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET: 36446 GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET: 36447 GL_SAMPLE_POSITION: 36432 GL_SAMPLE_MASK: 36433 GL_SAMPLE_MASK_VALUE: 36434 GL_TEXTURE_2D_MULTISAMPLE: 37120 GL_MAX_SAMPLE_MASK_WORDS: 36441 GL_MAX_COLOR_TEXTURE_SAMPLES: 37134 GL_MAX_DEPTH_TEXTURE_SAMPLES: 37135 GL_MAX_INTEGER_SAMPLES: 37136 GL_TEXTURE_BINDING_2D_MULTISAMPLE: 37124 GL_TEXTURE_SAMPLES: 37126 GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: 37127 GL_TEXTURE_WIDTH: 4096 GL_TEXTURE_HEIGHT: 4097 GL_TEXTURE_DEPTH: 32881 GL_TEXTURE_INTERNAL_FORMAT: 4099 GL_TEXTURE_RED_SIZE: 32860 GL_TEXTURE_GREEN_SIZE: 32861 GL_TEXTURE_BLUE_SIZE: 32862 GL_TEXTURE_ALPHA_SIZE: 32863 GL_TEXTURE_DEPTH_SIZE: 34890 GL_TEXTURE_STENCIL_SIZE: 35057 GL_TEXTURE_SHARED_SIZE: 35903 GL_TEXTURE_RED_TYPE: 35856 GL_TEXTURE_GREEN_TYPE: 35857 GL_TEXTURE_BLUE_TYPE: 35858 GL_TEXTURE_ALPHA_TYPE: 35859 GL_TEXTURE_DEPTH_TYPE: 35862 GL_TEXTURE_COMPRESSED: 34465 GL_SAMPLER_2D_MULTISAMPLE: 37128 GL_INT_SAMPLER_2D_MULTISAMPLE: 37129 GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: 37130 GL_VERTEX_ATTRIB_BINDING: 33492 GL_VERTEX_ATTRIB_RELATIVE_OFFSET: 33493 GL_VERTEX_BINDING_DIVISOR: 33494 GL_VERTEX_BINDING_OFFSET: 33495 GL_VERTEX_BINDING_STRIDE: 33496 GL_VERTEX_BINDING_BUFFER: 36687 GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: 33497 GL_MAX_VERTEX_ATTRIB_BINDINGS: 33498 GL_MAX_VERTEX_ATTRIB_STRIDE: 33509 ; ; GLES 3.1 PROTOTYPES glDispatchCompute: make routine! [ num_groups_x [GLuint] num_groups_y [GLuint] num_groups_z [GLuint] ] gles32-lib "glDispatchCompute" glDispatchComputeIndirect: make routine! [ indirect [GLintptr] ] gles32-lib "glDispatchComputeIndirect" glDrawArraysIndirect: make routine! [ mode [GLenum] indirect [integer!] ] gles32-lib "glDrawArraysIndirect" glDrawElementsIndirect: make routine! [ mode [GLenum] type [GLenum] indirect [integer!] ] gles32-lib "glDrawElementsIndirect" glFramebufferParameteri: make routine! [ target [GLenum] pname [GLenum] param [GLint] ] gles32-lib "glFramebufferParameteri" glGetFramebufferParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetFramebufferParameteriv" glGetProgramInterfaceiv: make routine! [ program [GLuint] programInterface [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetProgramInterfaceiv" glGetProgramResourceIndex: make routine! [ program [GLuint] programInterface [GLenum] name [string!] return: [GLuint] ] gles32-lib "glGetProgramResourceIndex" glGetProgramResourceName: make routine! [ program [GLuint] programInterface [GLenum] index [GLuint] bufSize [GLsizei] length [integer!] name [string!] ] gles32-lib "glGetProgramResourceName" glGetProgramResourceiv: make routine! [ program [GLuint] programInterface [GLenum] index [GLuint] propCount [GLsizei] props [integer!] bufSize [GLsizei] length [integer!] params [integer!] ] gles32-lib "glGetProgramResourceiv" glGetProgramResourceLocation: make routine! [ program [GLuint] programInterface [GLenum] name [string!] return: [GLint] ] gles32-lib "glGetProgramResourceLocation" glUseProgramStages: make routine! [ pipeline [GLuint] stages [GLbitfield] program [GLuint] ] gles32-lib "glUseProgramStages" glActiveShaderProgram: make routine! [ pipeline [GLuint] program [GLuint] ] gles32-lib "glActiveShaderProgram" glCreateShaderProgramv: make routine! [ type [GLenum] count [GLsizei] strings [integer!] return: [GLuint] ] gles32-lib "glCreateShaderProgramv" glBindProgramPipeline: make routine! [ pipeline [GLuint] ] gles32-lib "glBindProgramPipeline" glDeleteProgramPipelines: make routine! [ n [GLsizei] pipelines [integer!] ] gles32-lib "glDeleteProgramPipelines" glGenProgramPipelines: make routine! [ n [GLsizei] pipelines [integer!] ] gles32-lib "glGenProgramPipelines" glIsProgramPipeline: make routine! [ pipeline [GLuint] return: [GLboolean] ] gles32-lib "glIsProgramPipeline" glGetProgramPipelineiv: make routine! [ pipeline [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetProgramPipelineiv" glProgramUniform1i: make routine! [ program [GLuint] location [GLint] v0 [GLint] ] gles32-lib "glProgramUniform1i" glProgramUniform2i: make routine! [ program [GLuint] location [GLint] v0 [GLint] v1 [GLint] ] gles32-lib "glProgramUniform2i" glProgramUniform3i: make routine! [ program [GLuint] location [GLint] v0 [GLint] v1 [GLint] v2 [GLint] ] gles32-lib "glProgramUniform3i" glProgramUniform4i: make routine! [ program [GLuint] location [GLint] v0 [GLint] v1 [GLint] v2 [GLint] v3 [GLint] ] gles32-lib "glProgramUniform4i" glProgramUniform1ui: make routine! [ program [GLuint] location [GLint] v0 [GLuint] ] gles32-lib "glProgramUniform1ui" glProgramUniform2ui: make routine! [ program [GLuint] location [GLint] v0 [GLuint] v1 [GLuint] ] gles32-lib "glProgramUniform2ui" glProgramUniform3ui: make routine! [ program [GLuint] location [GLint] v0 [GLuint] v1 [GLuint] v2 [GLuint] ] gles32-lib "glProgramUniform3ui" glProgramUniform4ui: make routine! [ program [GLuint] location [GLint] v0 [GLuint] v1 [GLuint] v2 [GLuint] v3 [GLuint] ] gles32-lib "glProgramUniform4ui" glProgramUniform1f: make routine! [ program [GLuint] location [GLint] v0 [float] ] gles32-lib "glProgramUniform1f" glProgramUniform2f: make routine! [ program [GLuint] location [GLint] v0 [float] v1 [float] ] gles32-lib "glProgramUniform2f" glProgramUniform3f: make routine! [ program [GLuint] location [GLint] v0 [float] v1 [float] v2 [float] ] gles32-lib "glProgramUniform3f" glProgramUniform4f: make routine! [ program [GLuint] location [GLint] v0 [float] v1 [float] v2 [float] v3 [float] ] gles32-lib "glProgramUniform4f" glProgramUniform1iv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform1iv" glProgramUniform2iv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform2iv" glProgramUniform3iv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform3iv" glProgramUniform4iv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform4iv" glProgramUniform1uiv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform1uiv" glProgramUniform2uiv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform2uiv" glProgramUniform3uiv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform3uiv" glProgramUniform4uiv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform4uiv" glProgramUniform1fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform1fv" glProgramUniform2fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform2fv" glProgramUniform3fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform3fv" glProgramUniform4fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] value [integer!] ] gles32-lib "glProgramUniform4fv" glProgramUniformMatrix2fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix2fv" glProgramUniformMatrix3fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix3fv" glProgramUniformMatrix4fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix4fv" glProgramUniformMatrix2x3fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix2x3fv" glProgramUniformMatrix3x2fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix3x2fv" glProgramUniformMatrix2x4fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix2x4fv" glProgramUniformMatrix4x2fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix4x2fv" glProgramUniformMatrix3x4fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix3x4fv" glProgramUniformMatrix4x3fv: make routine! [ program [GLuint] location [GLint] count [GLsizei] transpose [GLboolean] value [integer!] ] gles32-lib "glProgramUniformMatrix4x3fv" glValidateProgramPipeline: make routine! [ pipeline [GLuint] ] gles32-lib "glValidateProgramPipeline" glGetProgramPipelineInfoLog: make routine! [ pipeline [GLuint] bufSize [GLsizei] length [integer!] infoLog [integer!] ] gles32-lib "glGetProgramPipelineInfoLog" glBindImageTexture: make routine! [ unit [GLuint] texture [GLuint] level [GLint] layered [GLboolean] layer [GLint] access [GLenum] format [GLenum] ] gles32-lib "glBindImageTexture" glGetBooleani_v: make routine! [ target [GLenum] index [GLuint] data [integer!] ] gles32-lib "glGetBooleani_v" glMemoryBarrier: make routine! [ barriers [GLbitfield] ] gles32-lib "glMemoryBarrier" glMemoryBarrierByRegion: make routine! [ barriers [GLbitfield] ] gles32-lib "glMemoryBarrierByRegion" glTexStorage2DMultisample: make routine! [ target [GLenum] samples [GLsizei] internalformat [GLenum] width [GLsizei] height [GLsizei] fixedsamplelocations [GLboolean] ] gles32-lib "glTexStorage2DMultisample" glGetMultisamplefv: make routine! [ pname [GLenum] index [GLuint] val [integer!] ] gles32-lib "glGetMultisamplefv" glSampleMaski: make routine! [ maskNumber [GLuint] mask [GLbitfield] ] gles32-lib "glSampleMaski" glGetTexLevelParameteriv: make routine! [ target [GLenum] level [GLint] pname [GLenum] params [integer!] ] gles32-lib "glGetTexLevelParameteriv" glGetTexLevelParameterfv: make routine! [ target [GLenum] level [GLint] pname [GLenum] params [integer!] ] gles32-lib "glGetTexLevelParameterfv" glBindVertexBuffer: make routine! [ bindingindex [GLuint] buffer [GLuint] offset [GLintptr] stride [GLsizei] ] gles32-lib "glBindVertexBuffer" glVertexAttribFormat: make routine! [ attribindex [GLuint] size [GLint] type [GLenum] normalized [GLboolean] relativeoffset [GLuint] ] gles32-lib "glVertexAttribFormat" glVertexAttribIFormat: make routine! [ attribindex [GLuint] size [GLint] type [GLenum] relativeoffset [GLuint] ] gles32-lib "glVertexAttribIFormat" glVertexAttribBinding: make routine! [ attribindex [GLuint] bindingindex [GLuint] ] gles32-lib "glVertexAttribBinding" glVertexBindingDivisor: make routine! [ bindingindex [GLuint] divisor [GLuint] ] gles32-lib "glVertexBindingDivisor" ; ;typedef void ( *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); ] ; if GLES_this_version if GLES_this_version >= 3.2.0 [ ; GLES 3.2 defines GL_MULTISAMPLE_LINE_WIDTH_RANGE: 37761 GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY: 37762 GL_MULTIPLY: 37524 GL_SCREEN: 37525 GL_OVERLAY: 37526 GL_DARKEN: 37527 GL_LIGHTEN: 37528 GL_COLORDODGE: 37529 GL_COLORBURN: 37530 GL_HARDLIGHT: 37531 GL_SOFTLIGHT: 37532 GL_DIFFERENCE: 37534 GL_EXCLUSION: 37536 GL_HSL_HUE: 37549 GL_HSL_SATURATION: 37550 GL_HSL_COLOR: 37551 GL_HSL_LUMINOSITY: 37552 GL_DEBUG_OUTPUT_SYNCHRONOUS: 33346 GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: 33347 GL_DEBUG_CALLBACK_FUNCTION: 33348 GL_DEBUG_CALLBACK_USER_PARAM: 33349 GL_DEBUG_SOURCE_API: 33350 GL_DEBUG_SOURCE_WINDOW_SYSTEM: 33351 GL_DEBUG_SOURCE_SHADER_COMPILER: 33352 GL_DEBUG_SOURCE_THIRD_PARTY: 33353 GL_DEBUG_SOURCE_APPLICATION: 33354 GL_DEBUG_SOURCE_OTHER: 33355 GL_DEBUG_TYPE_ERROR: 33356 GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: 33357 GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: 33358 GL_DEBUG_TYPE_PORTABILITY: 33359 GL_DEBUG_TYPE_PERFORMANCE: 33360 GL_DEBUG_TYPE_OTHER: 33361 GL_DEBUG_TYPE_MARKER: 33384 GL_DEBUG_TYPE_PUSH_GROUP: 33385 GL_DEBUG_TYPE_POP_GROUP: 33386 GL_DEBUG_SEVERITY_NOTIFICATION: 33387 GL_MAX_DEBUG_GROUP_STACK_DEPTH: 33388 GL_DEBUG_GROUP_STACK_DEPTH: 33389 GL_BUFFER: 33504 GL_SHADER: 33505 GL_PROGRAM: 33506 GL_VERTEX_ARRAY: 32884 GL_QUERY: 33507 GL_PROGRAM_PIPELINE: 33508 GL_SAMPLER: 33510 GL_MAX_LABEL_LENGTH: 33512 GL_MAX_DEBUG_MESSAGE_LENGTH: 37187 GL_MAX_DEBUG_LOGGED_MESSAGES: 37188 GL_DEBUG_LOGGED_MESSAGES: 37189 GL_DEBUG_SEVERITY_HIGH: 37190 GL_DEBUG_SEVERITY_MEDIUM: 37191 GL_DEBUG_SEVERITY_LOW: 37192 GL_DEBUG_OUTPUT: 37600 GL_CONTEXT_FLAG_DEBUG_BIT: 2 GL_STACK_OVERFLOW: 1283 GL_STACK_UNDERFLOW: 1284 GL_GEOMETRY_SHADER: 36313 GL_GEOMETRY_SHADER_BIT: 4 GL_GEOMETRY_VERTICES_OUT: 35094 GL_GEOMETRY_INPUT_TYPE: 35095 GL_GEOMETRY_OUTPUT_TYPE: 35096 GL_GEOMETRY_SHADER_INVOCATIONS: 34943 GL_LAYER_PROVOKING_VERTEX: 33374 GL_LINES_ADJACENCY: 10 GL_LINE_STRIP_ADJACENCY: 11 GL_TRIANGLES_ADJACENCY: 12 GL_TRIANGLE_STRIP_ADJACENCY: 13 GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: 36319 GL_MAX_GEOMETRY_UNIFORM_BLOCKS: 35372 GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: 35378 GL_MAX_GEOMETRY_INPUT_COMPONENTS: 37155 GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: 37156 GL_MAX_GEOMETRY_OUTPUT_VERTICES: 36320 GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: 36321 GL_MAX_GEOMETRY_SHADER_INVOCATIONS: 36442 GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: 35881 GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS: 37583 GL_MAX_GEOMETRY_ATOMIC_COUNTERS: 37589 GL_MAX_GEOMETRY_IMAGE_UNIFORMS: 37069 GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS: 37079 GL_FIRST_VERTEX_CONVENTION: 36429 GL_LAST_VERTEX_CONVENTION: 36430 GL_UNDEFINED_VERTEX: 33376 GL_PRIMITIVES_GENERATED: 35975 GL_FRAMEBUFFER_DEFAULT_LAYERS: 37650 GL_MAX_FRAMEBUFFER_LAYERS: 37655 GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: 36264 GL_FRAMEBUFFER_ATTACHMENT_LAYERED: 36263 GL_REFERENCED_BY_GEOMETRY_SHADER: 37641 GL_PRIMITIVE_BOUNDING_BOX: 37566 GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT: 4 GL_CONTEXT_FLAGS: 33310 GL_LOSE_CONTEXT_ON_RESET: 33362 GL_GUILTY_CONTEXT_RESET: 33363 GL_INNOCENT_CONTEXT_RESET: 33364 GL_UNKNOWN_CONTEXT_RESET: 33365 GL_RESET_NOTIFICATION_STRATEGY: 33366 GL_NO_RESET_NOTIFICATION: 33377 GL_CONTEXT_LOST: 1287 GL_SAMPLE_SHADING: 35894 GL_MIN_SAMPLE_SHADING_VALUE: 35895 GL_MIN_FRAGMENT_INTERPOLATION_OFFSET: 36443 GL_MAX_FRAGMENT_INTERPOLATION_OFFSET: 36444 GL_FRAGMENT_INTERPOLATION_OFFSET_BITS: 36445 GL_PATCHES: 14 GL_PATCH_VERTICES: 36466 GL_TESS_CONTROL_OUTPUT_VERTICES: 36469 GL_TESS_GEN_MODE: 36470 GL_TESS_GEN_SPACING: 36471 GL_TESS_GEN_VERTEX_ORDER: 36472 GL_TESS_GEN_POINT_MODE: 36473 GL_ISOLINES: 36474 GL_QUADS: 7 GL_FRACTIONAL_ODD: 36475 GL_FRACTIONAL_EVEN: 36476 GL_MAX_PATCH_VERTICES: 36477 GL_MAX_TESS_GEN_LEVEL: 36478 GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS: 36479 GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS: 36480 GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS: 36481 GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS: 36482 GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS: 36483 GL_MAX_TESS_PATCH_COMPONENTS: 36484 GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS: 36485 GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS: 36486 GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS: 36489 GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS: 36490 GL_MAX_TESS_CONTROL_INPUT_COMPONENTS: 34924 GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS: 34925 GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS: 36382 GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS: 36383 GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS: 37581 GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS: 37582 GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS: 37587 GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS: 37588 GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS: 37067 GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS: 37068 GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS: 37080 GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS: 37081 GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED: 33313 GL_IS_PER_PATCH: 37607 GL_REFERENCED_BY_TESS_CONTROL_SHADER: 37639 GL_REFERENCED_BY_TESS_EVALUATION_SHADER: 37640 GL_TESS_CONTROL_SHADER: 36488 GL_TESS_EVALUATION_SHADER: 36487 GL_TESS_CONTROL_SHADER_BIT: 8 GL_TESS_EVALUATION_SHADER_BIT: 16 GL_TEXTURE_BORDER_COLOR: 4100 GL_CLAMP_TO_BORDER: 33069 GL_TEXTURE_BUFFER: 35882 GL_TEXTURE_BUFFER_BINDING: 35882 GL_MAX_TEXTURE_BUFFER_SIZE: 35883 GL_TEXTURE_BINDING_BUFFER: 35884 GL_TEXTURE_BUFFER_DATA_STORE_BINDING: 35885 GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT: 37279 GL_SAMPLER_BUFFER: 36290 GL_INT_SAMPLER_BUFFER: 36304 GL_UNSIGNED_INT_SAMPLER_BUFFER: 36312 GL_IMAGE_BUFFER: 36945 GL_INT_IMAGE_BUFFER: 36956 GL_UNSIGNED_INT_IMAGE_BUFFER: 36967 GL_TEXTURE_BUFFER_OFFSET: 37277 GL_TEXTURE_BUFFER_SIZE: 37278 GL_COMPRESSED_RGBA_ASTC_4x4: 37808 GL_COMPRESSED_RGBA_ASTC_5x4: 37809 GL_COMPRESSED_RGBA_ASTC_5x5: 37810 GL_COMPRESSED_RGBA_ASTC_6x5: 37811 GL_COMPRESSED_RGBA_ASTC_6x6: 37812 GL_COMPRESSED_RGBA_ASTC_8x5: 37813 GL_COMPRESSED_RGBA_ASTC_8x6: 37814 GL_COMPRESSED_RGBA_ASTC_8x8: 37815 GL_COMPRESSED_RGBA_ASTC_15: 37816 GL_COMPRESSED_RGBA_ASTC_16: 37817 GL_COMPRESSED_RGBA_ASTC_18: 37818 GL_COMPRESSED_RGBA_ASTC_116: 37819 GL_COMPRESSED_RGBA_ASTC_12x10: 37820 GL_COMPRESSED_RGBA_ASTC_12x12: 37821 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4: 37840 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4: 37841 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5: 37842 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5: 37843 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6: 37844 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5: 37845 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6: 37846 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8: 37847 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_15: 37848 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_16: 37849 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_18: 37850 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_116: 37851 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10: 37852 GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12: 37853 GL_TEXTURE_CUBE_MAP_ARRAY: 36873 GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: 36874 GL_SAMPLER_CUBE_MAP_ARRAY: 36876 GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: 36877 GL_INT_SAMPLER_CUBE_MAP_ARRAY: 36878 GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: 36879 GL_IMAGE_CUBE_MAP_ARRAY: 36948 GL_INT_IMAGE_CUBE_MAP_ARRAY: 36959 GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: 36970 GL_TEXTURE_2D_MULTISAMPLE_ARRAY: 37122 GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: 37125 GL_SAMPLER_2D_MULTISAMPLE_ARRAY: 37131 GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: 37132 GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: 37133 ; ; GLES 3.2 PROTOTYPES glBlendBarrier: make routine! [ ] gles32-lib "glBlendBarrier" glCopyImageSubData: make routine! [ srcName [GLuint] srcTarget [GLenum] srcLevel [GLint] srcX [GLint] srcY [GLint] srcZ [GLint] dstName [GLuint] dstTarget [GLenum] dstLevel [GLint] dstX [GLint] dstY [GLint] dstZ [GLint] srcWidth [GLsizei] srcHeight [GLsizei] srcDepth [GLsizei] ] gles32-lib "glCopyImageSubData" glDebugMessageControl: make routine! [ source [GLenum] type [GLenum] severity [GLenum] count [GLsizei] ids [integer!] enabled [GLboolean] ] gles32-lib "glDebugMessageControl" glDebugMessageInsert: make routine! [ source [GLenum] type [GLenum] id [GLuint] severity [GLenum] length [GLsizei] buf [integer!] ] gles32-lib "glDebugMessageInsert" glDebugMessageCallback: make routine! [ callback [callback] userParam [integer!] ] gles32-lib "glDebugMessageCallback" glGetDebugMessageLog: make routine! [ count [GLuint] bufSize [GLsizei] sources [integer!] types [integer!] ids [integer!] severities [integer!] lengths [integer!] messageLog [integer!] return: [GLuint] ] gles32-lib "glGetDebugMessageLog" glPushDebugGroup: make routine! [ source [GLenum] id [GLuint] length [GLsizei] message [integer!] ] gles32-lib "glPushDebugGroup" glPopDebugGroup: make routine! [ ] gles32-lib "glPopDebugGroup" glObjectLabel: make routine! [ identifier [GLenum] name [GLuint] length [GLsizei] label [integer!] ] gles32-lib "glObjectLabel" glGetObjectLabel: make routine! [ identifier [GLenum] name [GLuint] bufSize [GLsizei] length [integer!] label [integer!] ] gles32-lib "glGetObjectLabel" glObjectPtrLabel: make routine! [ ptr [integer!] length [GLsizei] label [integer!] ] gles32-lib "glObjectPtrLabel" glGetObjectPtrLabel: make routine! [ ptr [integer!] bufSize [GLsizei] length [integer!] label [integer!] ] gles32-lib "glGetObjectPtrLabel" glGetPointerv: make routine! [ pname [GLenum] params [integer!] ] gles32-lib "glGetPointerv" glEnablei: make routine! [ target [GLenum] index [GLuint] ] gles32-lib "glEnablei" glDisablei: make routine! [ target [GLenum] index [GLuint] ] gles32-lib "glDisablei" glBlendEquationi: make routine! [ buf [GLuint] mode [GLenum] ] gles32-lib "glBlendEquationi" glBlendEquationSeparatei: make routine! [ buf [GLuint] modeRGB [GLenum] modeAlpha [GLenum] ] gles32-lib "glBlendEquationSeparatei" glBlendFunci: make routine! [ buf [GLuint] src [GLenum] dst [GLenum] ] gles32-lib "glBlendFunci" glBlendFuncSeparatei: make routine! [ buf [GLuint] srcRGB [GLenum] dstRGB [GLenum] srcAlpha [GLenum] dstAlpha [GLenum] ] gles32-lib "glBlendFuncSeparatei" glColorMaski: make routine! [ index [GLuint] r [GLboolean] g [GLboolean] b [GLboolean] a [GLboolean] ] gles32-lib "glColorMaski" glIsEnabledi: make routine! [ target [GLenum] index [GLuint] return: [GLboolean] ] gles32-lib "glIsEnabledi" glDrawElementsBaseVertex: make routine! [ mode [GLenum] count [GLsizei] type [GLenum] indices [integer!] basevertex [GLint] ] gles32-lib "glDrawElementsBaseVertex" glDrawRangeElementsBaseVertex: make routine! [ mode [GLenum] start [GLuint] end [GLuint] count [GLsizei] type [GLenum] indices [integer!] basevertex [GLint] ] gles32-lib "glDrawRangeElementsBaseVertex" glDrawElementsInstancedBaseVertex: make routine! [ mode [GLenum] count [GLsizei] type [GLenum] indices [integer!] instancecount [GLsizei] basevertex [GLint] ] gles32-lib "glDrawElementsInstancedBaseVertex" glFramebufferTexture: make routine! [ target [GLenum] attachment [GLenum] texture [GLuint] level [GLint] ] gles32-lib "glFramebufferTexture" glPrimitiveBoundingBox: make routine! [ minX [float] minY [float] minZ [float] minW [float] maxX [float] maxY [float] maxZ [float] maxW [float] ] gles32-lib "glPrimitiveBoundingBox" glGetGraphicsResetStatus: make routine! [ return: [GLenum] ] gles32-lib "glGetGraphicsResetStatus" glReadnPixels: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] bufSize [GLsizei] data [integer!] ] gles32-lib "glReadnPixels" glGetnUniformfv: make routine! [ program [GLuint] location [GLint] bufSize [GLsizei] params [integer!] ] gles32-lib "glGetnUniformfv" glGetnUniformiv: make routine! [ program [GLuint] location [GLint] bufSize [GLsizei] params [integer!] ] gles32-lib "glGetnUniformiv" glGetnUniformuiv: make routine! [ program [GLuint] location [GLint] bufSize [GLsizei] params [integer!] ] gles32-lib "glGetnUniformuiv" glMinSampleShading: make routine! [ value [float] ] gles32-lib "glMinSampleShading" glPatchParameteri: make routine! [ pname [GLenum] value [GLint] ] gles32-lib "glPatchParameteri" glTexParameterIiv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glTexParameterIiv" glTexParameterIuiv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glTexParameterIuiv" glGetTexParameterIiv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetTexParameterIiv" glGetTexParameterIuiv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] gles32-lib "glGetTexParameterIuiv" glSamplerParameterIiv: make routine! [ sampler [GLuint] pname [GLenum] param [integer!] ] gles32-lib "glSamplerParameterIiv" glSamplerParameterIuiv: make routine! [ sampler [GLuint] pname [GLenum] param [integer!] ] gles32-lib "glSamplerParameterIuiv" glGetSamplerParameterIiv: make routine! [ sampler [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetSamplerParameterIiv" glGetSamplerParameterIuiv: make routine! [ sampler [GLuint] pname [GLenum] params [integer!] ] gles32-lib "glGetSamplerParameterIuiv" glTexBuffer: make routine! [ target [GLenum] internalformat [GLenum] buffer [GLuint] ] gles32-lib "glTexBuffer" glTexBufferRange: make routine! [ target [GLenum] internalformat [GLenum] buffer [GLuint] offset [GLintptr] size [GLsizeiptr] ] gles32-lib "glTexBufferRange" glTexStorage3DMultisample: make routine! [ target [GLenum] samples [GLsizei] internalformat [GLenum] width [GLsizei] height [GLsizei] depth [GLsizei] fixedsamplelocations [GLboolean] ] gles32-lib "glTexStorage3DMultisample" ; ] ; if GLES_this_version ; ; extensions GL_BGR_EXT: 32992 GL_BGRA_EXT: 32993 ; {************************************************************ ** egl.h ************************************************************} EGLint: integer! EGLNativePixmapType: integer! EGLNativeWindowType: integer! EGLNativeDisplayType: integer! if EGL_this_version >= 1.0.0 [ EGL_VERSION_1_0: 1 EGLBoolean: integer! ; unsigned int EGLDisplay: integer! ; void * EGLConfig: integer! ; void * EGLSurface: integer! ; void * EGLContext: integer! ; void * ;typedef void (*__eglMustCastToProperFunctionPointerType)(void); EGL_ALPHA_SIZE: 12321 EGL_BAD_ACCESS: 12290 EGL_BAD_ALLOC: 12291 EGL_BAD_ATTRIBUTE: 12292 EGL_BAD_CONFIG: 12293 EGL_BAD_CONTEXT: 12294 EGL_BAD_CURRENT_SURFACE: 12295 EGL_BAD_DISPLAY: 12296 EGL_BAD_MATCH: 12297 EGL_BAD_NATIVE_PIXMAP: 12298 EGL_BAD_NATIVE_WINDOW: 12299 EGL_BAD_PARAMETER: 12300 EGL_BAD_SURFACE: 12301 EGL_BLUE_SIZE: 12322 EGL_BUFFER_SIZE: 12320 EGL_CONFIG_CAVEAT: 12327 EGL_CONFIG_ID: 12328 EGL_CORE_NATIVE_ENGINE: 12379 EGL_DEPTH_SIZE: 12325 EGL_DONT_CARE: -1 EGL_DRAW: 12377 EGL_EXTENSIONS: 12373 EGL_FALSE: 0 EGL_GREEN_SIZE: 12323 EGL_HEIGHT: 12374 EGL_LARGEST_PBUFFER: 12376 EGL_LEVEL: 12329 EGL_MAX_PBUFFER_HEIGHT: 12330 EGL_MAX_PBUFFER_PIXELS: 12331 EGL_MAX_PBUFFER_WIDTH: 12332 EGL_NATIVE_RENDERABLE: 12333 EGL_NATIVE_VISUAL_ID: 12334 EGL_NATIVE_VISUAL_TYPE: 12335 EGL_NONE: 12344 EGL_NON_CONFORMANT_CONFIG: 12369 EGL_NOT_INITIALIZED: 12289 EGL_NO_CONTEXT: 0 ;EGL_CAST(EGLContext,0) EGL_NO_DISPLAY: 0 ;EGL_CAST(EGLDisplay,0) EGL_NO_SURFACE: 0 ;EGL_CAST(EGLSurface,0) EGL_PBUFFER_BIT: 1 EGL_PIXMAP_BIT: 2 EGL_READ: 12378 EGL_RED_SIZE: 12324 EGL_SAMPLES: 12337 EGL_SAMPLE_BUFFERS: 12338 EGL_SLOW_CONFIG: 12368 EGL_STENCIL_SIZE: 12326 EGL_SUCCESS: 12288 EGL_SURFACE_TYPE: 12339 EGL_TRANSPARENT_BLUE_VALUE: 12341 EGL_TRANSPARENT_GREEN_VALUE: 12342 EGL_TRANSPARENT_RED_VALUE: 12343 EGL_TRANSPARENT_RGB: 12370 EGL_TRANSPARENT_TYPE: 12340 EGL_TRUE: 1 EGL_VENDOR: 12371 EGL_VERSION: 12372 EGL_WIDTH: 12375 EGL_WINDOW_BIT: 4 eglChooseConfig: make routine! [ dpy [EGLDisplay] attrib_list [integer!] configs [EGLConfig] config_size [EGLint] num_config [integer!] return: [EGLBoolean] ] egl-lib "eglChooseConfig" eglCopyBuffers: make routine! [ dpy [EGLDisplay] surface [EGLSurface] target [EGLNativePixmapType] return: [EGLBoolean] ] egl-lib "eglCopyBuffers" eglCreateContext: make routine! [ dpy [EGLDisplay] config [EGLConfig] share_context [EGLContext] attrib_list [integer!] return: [EGLContext] ] egl-lib "eglCreateContext" eglCreatePbufferSurface: make routine! [ dpy [EGLDisplay] config [EGLConfig] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreatePbufferSurface" eglCreatePixmapSurface: make routine! [ dpy [EGLDisplay] config [EGLConfig] pixmap [EGLNativePixmapType] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreatePixmapSurface" eglCreateWindowSurface: make routine! [ dpy [EGLDisplay] config [EGLConfig] win [EGLNativeWindowType] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreateWindowSurface" eglDestroyContext: make routine! [ dpy [EGLDisplay] ctx [EGLContext] return: [EGLBoolean] ] egl-lib "eglDestroyContext" eglDestroySurface: make routine! [ dpy [EGLDisplay] surface [EGLSurface] return: [EGLBoolean] ] egl-lib "eglDestroySurface" eglGetConfigAttrib: make routine! [ dpy [EGLDisplay] config [EGLConfig] attribute [EGLint] value [integer!] return: [EGLBoolean] ] egl-lib "eglGetConfigAttrib" eglGetConfigs: make routine! [ dpy [EGLDisplay] configs [integer!] config_size [EGLint] num_config [integer!] return: [EGLBoolean] ] egl-lib "eglGetConfigs" eglGetCurrentDisplay: make routine! [ return: [EGLDisplay] ] egl-lib "eglGetCurrentDisplay" eglGetCurrentSurface: make routine! [ readdraw [EGLint] return: [EGLSurface] ] egl-lib "eglGetCurrentSurface" eglGetDisplay: make routine! [ display_id [EGLNativeDisplayType] return: [EGLDisplay] ] egl-lib "eglGetDisplay" eglGetError: make routine! [ return: [EGLint] ] egl-lib "eglGetError" ;__eglMustCastToProperFunctionPointerType eglGetProcAddress (const char *procname); eglInitialize: make routine! [ dpy [EGLDisplay] major [integer!] minor [integer!] return: [EGLBoolean] ] egl-lib "eglInitialize" eglMakeCurrent: make routine! [ dpy [EGLDisplay] draw [EGLSurface] read [EGLSurface] ctx [EGLContext] return: [EGLBoolean] ] egl-lib "eglMakeCurrent" eglQueryContext: make routine! [ dpy [EGLDisplay] ctx [EGLContext] attribute [EGLint] value [integer!] return: [EGLBoolean] ] egl-lib "eglQueryContext" eglQueryString: make routine! [ dpy [EGLDisplay] name [EGLint] return: [string!] ] egl-lib "eglQueryString" eglQuerySurface: make routine! [ dpy [EGLDisplay] surface [EGLSurface] attribute [EGLint] value [integer!] return: [EGLBoolean] ] egl-lib "eglQuerySurface" eglSwapBuffers: make routine! [ dpy [EGLDisplay] surface [EGLSurface] return: [EGLBoolean] ] egl-lib "eglSwapBuffers" eglTerminate: make routine! [ dpy [EGLDisplay] return: [EGLBoolean] ] egl-lib "eglTerminate" eglWaitGL: make routine! [ return: [EGLBoolean] ] egl-lib "eglWaitGL" eglWaitNative: make routine! [ engine [EGLint] return: [EGLBoolean] ] egl-lib "eglWaitNative" ] if EGL_this_version >= 1.1.0 [ EGL_VERSION_1_1: 1 EGL_BACK_BUFFER: 12420 EGL_BIND_TO_TEXTURE_RGB: 12345 EGL_BIND_TO_TEXTURE_RGBA: 12346 EGL_CONTEXT_LOST: 12302 EGL_MIN_SWAP_INTERVAL: 12347 EGL_MAX_SWAP_INTERVAL: 12348 EGL_MIPMAP_TEXTURE: 12418 EGL_MIPMAP_LEVEL: 12419 EGL_NO_TEXTURE: 12380 EGL_TEXTURE_2D: 12383 EGL_TEXTURE_FORMAT: 12416 EGL_TEXTURE_RGB: 12381 EGL_TEXTURE_RGBA: 12382 EGL_TEXTURE_TARGET: 12417 eglBindTexImage: make routine! [ dpy [EGLDisplay] surface [EGLSurface] buffer [EGLint] return: [EGLBoolean] ] egl-lib "eglBindTexImage" eglReleaseTexImage: make routine! [ dpy [EGLDisplay] surface [EGLSurface] buffer [EGLint] return: [EGLBoolean] ] egl-lib "eglReleaseTexImage" eglSurfaceAttrib: make routine! [ dpy [EGLDisplay] surface [EGLSurface] attribute [EGLint] value [EGLint] return: [EGLBoolean] ] egl-lib "eglSurfaceAttrib" eglSwapInterval: make routine! [ dpy [EGLDisplay] interval [EGLint] return: [EGLBoolean] ] egl-lib "eglSwapInterval" ] if EGL_this_version >= 1.2.0 eglblock120: [ EGL_VERSION_1_2: 1 EGLenum: integer! ; unsigned int EGLClientBuffer: integer! ; void * EGL_ALPHA_FORMAT: 12424 EGL_ALPHA_FORMAT_NONPRE: 12427 EGL_ALPHA_FORMAT_PRE: 12428 EGL_ALPHA_MASK_SIZE: 12350 EGL_BUFFER_PRESERVED: 12436 EGL_BUFFER_DESTROYED: 12437 EGL_CLIENT_APIS: 12429 EGL_COLORSPACE: 12423 EGL_COLORSPACE_sRGB: 12425 EGL_COLORSPACE_LINEAR: 12426 EGL_COLOR_BUFFER_TYPE: 12351 EGL_CONTEXT_CLIENT_TYPE: 12439 EGL_DISPLAY_SCALING: 10000 EGL_HORIZONTAL_RESOLUTION: 12432 EGL_LUMINANCE_BUFFER: 12431 EGL_LUMINANCE_SIZE: 12349 EGL_OPENGL_ES_BIT: 1 EGL_OPENVG_BIT: 2 EGL_OPENGL_ES_API: 12448 EGL_OPENVG_API: 12449 EGL_OPENVG_IMAGE: 12438 EGL_PIXEL_ASPECT_RATIO: 12434 EGL_RENDERABLE_TYPE: 12352 EGL_RENDER_BUFFER: 12422 EGL_RGB_BUFFER: 12430 EGL_SINGLE_BUFFER: 12421 EGL_SWAP_BEHAVIOR: 12435 EGL_UNKNOWN: -1 ;EGL_CAST(EGLint,-1) EGL_VERTICAL_RESOLUTION: 12433 eglBindAPI: make routine! [ api [EGLenum] return: [EGLBoolean] ] egl-lib "eglBindAPI" eglQueryAPI: make routine! [ return: [EGLenum] ] egl-lib "eglQueryAPI" eglCreatePbufferFromClientBuffer: make routine! [ dpy [EGLDisplay] buftype [EGLenum] buffer [EGLClientBuffer] config [EGLConfig] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreatePbufferFromClientBuffer" eglReleaseThread: make routine! [ return: [EGLBoolean] ] egl-lib "eglReleaseThread" eglWaitClient: make routine! [ return: [EGLBoolean] ] egl-lib "eglWaitClient" ] if EGL_this_version >= 1.3.0 [ EGL_VERSION_1_3: 1 EGL_CONFORMANT: 12354 EGL_CONTEXT_CLIENT_VERSION: 12440 EGL_MATCH_NATIVE_PIXMAP: 12353 EGL_OPENGL_ES2_BIT: 4 EGL_VG_ALPHA_FORMAT: 12424 EGL_VG_ALPHA_FORMAT_NONPRE: 12427 EGL_VG_ALPHA_FORMAT_PRE: 12428 EGL_VG_ALPHA_FORMAT_PRE_BIT: 64 EGL_VG_COLORSPACE: 12423 EGL_VG_COLORSPACE_sRGB: 12425 EGL_VG_COLORSPACE_LINEAR: 12426 EGL_VG_COLORSPACE_LINEAR_BIT: 32 ] if EGL_this_version >= 1.4.0 [ EGL_VERSION_1_4: 1 EGL_DEFAULT_DISPLAY: 0 ;EGL_CAST(EGLNativeDisplayType,0) EGL_MULTISAMPLE_RESOLVE_BOX_BIT: 512 EGL_MULTISAMPLE_RESOLVE: 12441 EGL_MULTISAMPLE_RESOLVE_DEFAULT: 12442 EGL_MULTISAMPLE_RESOLVE_BOX: 12443 EGL_OPENGL_API: 12450 EGL_OPENGL_BIT: 8 EGL_SWAP_BEHAVIOR_PRESERVED_BIT: 1024 eglGetCurrentContext: make routine! [ return: [EGLContext] ] egl-lib "eglGetCurrentContext" ] if EGL_this_version >= 1.5.0 [ EGL_VERSION_1_5: 1 EGLSync: integer! ; void * EGLAttrib: integer! ; intptr_t ;EGLTime: decimal! ;;typedef khronos_utime_nanoseconds_t EGLTime; EGLImage: integer! ; void * EGL_CONTEXT_MAJOR_VERSION: 12440 EGL_CONTEXT_MINOR_VERSION: 12539 EGL_CONTEXT_OPENGL_PROFILE_MASK: 12541 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY: 12733 EGL_NO_RESET_NOTIFICATION: 12734 EGL_LOSE_CONTEXT_ON_RESET: 12735 EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT: 1 EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT: 2 EGL_CONTEXT_OPENGL_DEBUG: 12720 EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE: 12721 EGL_CONTEXT_OPENGL_ROBUST_ACCESS: 12722 EGL_OPENGL_ES3_BIT: 64 EGL_CL_EVENT_HANDLE: 12444 EGL_SYNC_CL_EVENT: 12542 EGL_SYNC_CL_EVENT_COMPLETE: 12543 EGL_SYNC_PRIOR_COMMANDS_COMPLETE: 12528 EGL_SYNC_TYPE: 12535 EGL_SYNC_STATUS: 12529 EGL_SYNC_CONDITION: 12536 EGL_SIGNALED: 12530 EGL_UNSIGNALED: 12531 EGL_SYNC_FLUSH_COMMANDS_BIT: 1 ;EGL_FOREVER: 0xFFFFFFFFFFFFFFFFull EGL_TIMEOUT_EXPIRED: 12533 EGL_CONDITION_SATISFIED: 12534 EGL_NO_SYNC: 0 ;EGL_CAST(EGLSync,0) EGL_SYNC_FENCE: 12537 EGL_GL_COLORSPACE: 12445 EGL_GL_COLORSPACE_SRGB: 12425 EGL_GL_COLORSPACE_LINEAR: 12426 EGL_GL_RENDERBUFFER: 12473 EGL_GL_TEXTURE_2D: 12465 EGL_GL_TEXTURE_LEVEL: 12476 EGL_GL_TEXTURE_3D: 12466 EGL_GL_TEXTURE_ZOFFSET: 12477 EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X: 12467 EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X: 12468 EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y: 12469 EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: 12470 EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z: 12471 EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: 12472 EGL_IMAGE_PRESERVED: 12498 EGL_NO_IMAGE: 0 ;EGL_CAST(EGLImage,0) eglCreateSync: make routine! [ dpy [EGLDisplay] type [EGLenum] attrib_list [integer!] return: [EGLSync] ] egl-lib "eglCreateSync" eglDestroySync: make routine! [ dpy [EGLDisplay] sync [EGLSync] return: [EGLBoolean] ] egl-lib "eglDestroySync" eglClientWaitSync: make routine! [ dpy [EGLDisplay] sync [EGLSync] flags [EGLint] timeout [double] return: [EGLint] ] egl-lib "eglClientWaitSync" eglGetSyncAttrib: make routine! [ dpy [EGLDisplay] sync [EGLSync] attribute [EGLint] value [integer!] return: [EGLBoolean] ] egl-lib "eglGetSyncAttrib" eglCreateImage: make routine! [ dpy [EGLDisplay] ctx [EGLContext] target [EGLenum] buffer [EGLClientBuffer] attrib_list [integer!] return: [EGLImage] ] egl-lib "eglCreateImage" eglDestroyImage: make routine! [ dpy [EGLDisplay] image [EGLImage] return: [EGLBoolean] ] egl-lib "eglDestroyImage" eglGetPlatformDisplay: make routine! [ platform [EGLenum] native_display [integer!] attrib_list [integer!] return: [EGLDisplay] ] egl-lib "eglGetPlatformDisplay" eglCreatePlatformWindowSurface: make routine! [ dpy [EGLDisplay] config [EGLConfig] native_window [integer!] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreatePlatformWindowSurface" eglCreatePlatformPixmapSurface: make routine! [ dpy [EGLDisplay] config [EGLConfig] native_pixmap [integer!] attrib_list [integer!] return: [EGLSurface] ] egl-lib "eglCreatePlatformPixmapSurface" eglWaitSync: make routine! [ dpy [EGLDisplay] sync [EGLSync] flags [EGLint] return: [EGLBoolean] ] egl-lib "eglWaitSync" ] {************************************************************ ** GLES Rebol specific functions ************************************************************} ; errors system/error: make system/error [ gles-lib: make object! [ code: 1000 type: "GLES Error" in: [:arg1 "in:" :arg2] simple1: [:arg1] ] ] gles-GetErrorString: func [error [integer!]][ any [select reduce [ 0 "GL_NO_ERROR" 1280 "GL_INVALID_ENUM" 1281 "GL_INVALID_VALUE" 1282 "GL_INVALID_OPERATION" 1283 "GL_STACK_OVERFLOW" 1284 "GL_STACK_UNDERFLOW" 1285 "GL_OUT_OF_MEMORY" 1286 "GL_INVALID_FRAMEBUFFER_OPERATION" GL_FRAMEBUFFER_UNDEFINED "target is the default framebuffer, but the default framebuffer does not exist." GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT "any of the framebuffer attachment points are framebuffer incomplete." GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT "the framebuffer does not have at least one image attached to it." GL_FRAMEBUFFER_UNSUPPORTED "depth and stencil attachments, if present, are not the same renderbuffer, or if the combination of internal formats of the attached images violates an implementation-dependent set of restrictions." GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE "the value of GL_RENDERBUFFER_SAMPLES is not the same for all attached renderbuffers or, if the attached images are a mix of renderbuffers and textures, the value of GL_RENDERBUFFER_SAMPLES is not zero." ] error "UNKNOWN GLES ERROR"] ] gles-make_error: func [[catch] error [integer!] msg [string!] ][ throw make error! reduce ['gles-lib 'in gles-GetErrorString error msg] ] gles-throw_error: func [[catch] msg [string!] /local error][ if GL_NO_ERROR <> error: glGetError [ throw gles-make_error error msg ] ] gles-check_error: func [[catch] msg [string!] /local error][ throw-on-error [gles-throw_error msg] ] gles-get_error: func [[catch] msg [string!] /local error][ print form-on-error [gles-throw_error msg] ] to-gles-error: func [ msg [string! block!] ][ if block? msg [msg: rejoin msg] make error! reduce ['gles-lib 'simple1 msg] ] ; shaders, buffers, set attribute and uniform, textures gles-make-shader: func [[catch] "Constructs and returns a shader" type [word! string! integer!] "GL_VERTEX_SHADER or GL_FRAGMENT_SHADER" source [string! file! url!] "Shader source" ; FIXME: accept also block! (of string!s), ; FIXME: allow continue on error /local string-type shader InfoLogLength msg ][ either integer? type [ string-type: attempt [form first back find glesblock200 type] ][ type: get to-word string-type: form type ] return try [ ; REBOL-NOTE: must use <return> to return the right value for "Near:" in error description if find [file! url!] type?/word source [source: read/string source] ; FIXME: common pattern ! make a function of this source: make struct! [_1 [string!]] reduce [ source ] glGetError ; flush possible current error shader: glCreateShader type gles-check_error "glCreateShader" glShaderSource shader 1 source 0 gles-check_error "glShaderSource" glCompileShader shader gles-check_error "glCompileShader" InfoLogLength: int-ptr glGetShaderiv shader GL_INFO_LOG_LENGTH & InfoLogLength if InfoLogLength/value > 0 [ msg: fill copy "" " " InfoLogLength/value glGetShaderInfoLog shader InfoLogLength/value & InfoLogLength msg glDeleteShader shader to-gles-error [string-type " error: " msg] ] shader ] ] gles-make-program: func [[catch] "Constructs and returns a shaders program" vertex-shader [integer! string! file! url!] "value returned by gles-make-shader or glCreateShader or a string" fragment-shader [integer! string! file! url!] "value returned by gles-make-shader or glCreateShader or a string" /validate /local program Result InfoLogLength msg ][ return try [ ; REBOL-NOTE: must use <return> to return the right value for "Near:" in error description glGetError ; flush possible current error program: glCreateProgram gles-check_error "glCreateProgram" if not integer? vertex-shader [vertex-shader: gles-make-shader 'GL_VERTEX_SHADER vertex-shader] glAttachShader program vertex-shader gles-check_error "glAttachShader" if not integer? fragment-shader [fragment-shader: gles-make-shader GL_FRAGMENT_SHADER fragment-shader] glAttachShader program fragment-shader gles-check_error "glAttachShader" Result: int-ptr InfoLogLength: int-ptr glLinkProgram program gles-check_error "glLinkProgram" ; it can happen that linking fails but without log glGetProgramiv program GL_LINK_STATUS & Result gles-check_error "GL_LINK_STATUS" glGetProgramiv program GL_INFO_LOG_LENGTH & InfoLogLength gles-check_error "GL_INFO_LOG_LENGTH" if InfoLogLength/value > 0 [ msg: fill copy "" " " InfoLogLength/value glGetProgramInfoLog program InfoLogLength/value & InfoLogLength msg either find msg "warning" [ print form-on-error [to-gles-error msg] ][ glDeleteProgram program to-gles-error msg ] ] if validate [ ;FIXME: can a program be correctly linked but not validated ? glValidateProgram program gles-check_error "glValidateProgram" glGetProgramiv program GL_VALIDATE_STATUS & Result gles-check_error "GL_VALIDATE_STATUS" glGetProgramiv program GL_INFO_LOG_LENGTH & InfoLogLength gles-check_error "GL_INFO_LOG_LENGTH" if InfoLogLength/value > 0 [ msg: fill copy "" " " InfoLogLength/value glGetProgramInfoLog program InfoLogLength/value & InfoLogLength msg glDeleteProgram program to-gles-error msg ] ] ; FIXME: we could glDeleteShader(s) right now program ] ] gles-free-program: func [[catch] "Detach and delete shaders and program" program [integer!] "Value returned by gles-make-program or glCreateProgram" /local count shaders item ][ return try [ glGetError ; flush possible current error glUseProgram 0 gles-check_error "glUseProgram" count: int-ptr shaders: block-to-struct [0 0 0 0 0 0] glGetAttachedShaders program 6 & count & shaders repeat n count/value [ item: pick second shaders n glDetachShader program item gles-check_error "glDetachShader" glDeleteShader item gles-check_error "glDeleteShader" ] glDeleteProgram program gles-check_error "glDeleteProgram" ] ] gles-make-buffer: func [ ; FIXME: allow more then one buffer or make user call this function as many times as needed ? "Make buffer object and upload data (returned type is struct!)" type [integer!] "GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER" usage [integer!] "GL_STREAM_DRAW, GL_STATIC_DRAW, or GL_DYNAMIC_DRAW" data [block! struct!] /local bo ][ if block? data [ data: either type = GL_ELEMENT_ARRAY_BUFFER [block-to-struct data][block-to-struct/floats data] ] bo: make struct! [[save] value [integer!]] none ; use save to be sure ? glGetError ; flush possible current error glGenBuffers 1 & bo gles-check_error "glGenBuffers" glBindBuffer type bo/value gles-check_error "glBindBuffer" glBufferData type length? third data data usage gles-check_error "glBufferData" glBindBuffer type 0 gles-check_error "glBindBuffer" bo ] gles-set-vertex-attribute: func [[catch] "Assign a buffer to a vertex attribute" program [integer!] "Value returned by gles-make-program or glCreateProgram" varname [string!] "Symbolic name of vertex attribute" buffer [struct!] "struct! returned by gles-make-buffer" size [integer!] "Number of components for this vertex attribute. Must be 1, 2, 3, or 4." /skip stride [integer!] "Bytes to skip to reach next components of this attribute. Default is 0" /offset start [integer!] "Offset in bytes of first element of this attribute. Default is 0" /local vertexLoc ][ stride: any [stride 0] start: any [start 0] return try [ ; get attribute location corrisponding to <varname> variable in vertex shader glGetError ; flush possible current error vertexLoc: glGetAttribLocation program varname gles-check_error "glGetAttribLocation" ;// Tell OpenGL how to pull out the positions from the position buffer into the vertexPosition attribute glBindBuffer GL_ARRAY_BUFFER buffer/value gles-check_error "glBindBuffer" glVertexAttribPointer vertexLoc size GL_FLOAT to-char GL_FALSE stride start ; use <to-char> because that is the parameter type expected by glVertexAttribPointer gles-check_error "glVertexAttribPointer" glEnableVertexAttribArray vertexLoc gles-check_error "glEnableVertexAttribArray" glBindBuffer GL_ARRAY_BUFFER 0 vertexLoc ] ] gles-set-uniform: func [[catch] "Assign one or more values to a uniform " program [integer!] "Value returned by gles-make-program or glCreateProgram" varname [string!] "Symbolic name of uniform" value [number! pair! tuple! block!] "A number, a block of 1,2,3 or 4 numbers, or a block with a block of numbers" /skip size [integer!] "row length if value inside value is a block" /local uniformLoc glUniform arity type postfix ][ size: any [size 1] arity: case [ number? value [1] pair? value [2] tuple? value [ case [ attempt [value/5] [ value: reduce [to-block replace/all form value "." " "] ] attempt [value/4] [ value: reduce [value/1 / 255 value/2 / 255 value/3 / 255 value/4 / 255] ] 'else [value: reduce [value/1 / 255 value/2 / 255 value/3 / 255] ] ] length? value ] block? attempt [value/1][size] block? value [ either (length? value) <= 4 [ max 1 length? value ][ value: reduce [value] size ] ] ;'else [to-error "Unreconized type inside block"] ] type: select [integer! "i" decimal! "f"] type?/word any [attempt [value/1/1] attempt [value/1] value] ; FIXME: better always use "f" to avoid rounding errors? if none? type [throw to-gles-error "Unreconized type inside block"] if pair? value [type: "f"] postfix: rejoin [ arity type any [attempt [value/1/1 size: arity arity: 0.5 "v"] ""] ] glUniform: get to word! append copy "glUniform" postfix ;intentionally avoid checking errors ;glGetError ; flush possible current error uniformLoc: glGetUniformLocation program varname ;if uniformLoc = -1 [return try [to-gles-error ["Not an active uniform: " varname]]] switch arity [ 1 [glUniform uniformLoc value] 2 [glUniform uniformLoc value/1 value/2] 3 [glUniform uniformLoc value/1 value/2 value/3] 4 [glUniform uniformLoc value/1 value/2 value/3 value/4] 0.5 [ glUniform uniformLoc to integer! (length? value/1) / size & do either type = "i" ['block-to-struct]['block-to-struct/no-ints/floats] value/1 ] ] ; FIXME: better check errors? : gles-check_error "glUniform" ] gles-make-texture: func [[catch] "Makes a texture from given image" image [pair! image! file! url!] "size for a new black image or an image" /with params [block!] "texture parameters" /no-mipmap "Do not generate mipmaps" /no-alpha "Do not consider alpha channel" /local texture alpha ][ return try [ params: reduce either block? params [ params ][ [ GL_TEXTURE_WRAP_S GL_REPEAT GL_TEXTURE_WRAP_T GL_REPEAT GL_TEXTURE_MIN_FILTER either no-mipmap [GL_LINEAR][GL_LINEAR_MIPMAP_LINEAR] GL_TEXTURE_MAG_FILTER GL_LINEAR ] ] glGetIntegerv GL_ALPHA_BITS & alpha: int-ptr alpha: either alpha/value = 0 [GL_RGB][GL_RGBA] if no-alpha [alpha: GL_RGB] if pair? image [ if any [image/x = 0 image/y = 0] [to-gles-error "Image size cannot be 0 in gles-make-texture"] image: make image! either alpha = GL_RGBA [reduce [image 0.0.0 255]][image] ] if find [file! url!] type?/word image [ image: load image if not image? image [to-gles-error "Unrecognized image format"] ;image/alpha: complement image/alpha ; FIXME is this necessary ? ] glGenTextures 1 & texture: int-ptr glBindTexture GL_TEXTURE_2D texture/value ;// set the texture wrapping/filtering options on the currently bound texture object foreach [param value] params [ glTexParameteri GL_TEXTURE_2D param value ] glGetError ; flush possible current error ;// load and generate the texture glTexImage2D GL_TEXTURE_2D 0 alpha image/size/x image/size/y 0 alpha GL_UNSIGNED_BYTE & to binary! image gles-check_error "glTexImage2D" unless no-mipmap [glGenerateMipmap GL_TEXTURE_2D] glBindTexture GL_TEXTURE_2D 0 texture/value ] ] ; swap-buffers gles-swap-buffers-ctx: context [ ; FIXME: better use an anonymous context ? ; allocate memory to store gl "hidden" color buffer ; allocate it once and as large as the entire screen back-buffer: fill copy #{} #{00000000} (System/view/screen-face/size/x * System/view/screen-face/size/y) set 'gles-swap-buffers func [ "Copies color buffer to a face's image!" face [object!] "Destination face that must have an image!" /local size buffer ][ size: face/image/size ; if face has no image will give error! buffer: back-buffer ; copy 3d image (size of widget) to a binary and then assign that binary to rgb of our image widget glReadPixels 0 0 size/x size/y GL_BGRA_EXT GL_UNSIGNED_BYTE buffer buffer: to image! buffer buffer/size: as-pair size/x size/y buffer/alpha: complement buffer/alpha ; this is quite slow :( face/image: buffer face/effect: [flip 0x1] ; <<<<<==== IMPORTANT! MUST flip image upside down ; FIXME: better append it if not alread there ? ;draw face/image compose [image (buffer) (size * 0x1) (size) (size * 1x0) 0x0] ; slower ; FIXME: is there a way to invert alpha and flip image with GL "transparently" ? show face ] ] ; {************************************************************ ** EGL Rebol specific functions ************************************************************} ; EGL errors to-error: func [[catch] ; gives a better error message value ][ throw to error! :value ] system/error: make system/error [ egl-lib: make object! [ code: 1000 type: "EGL Error" in: [:arg1 "in:" :arg2] frame-buffer: ["No possible EGL frame buffer configuration exists."] ] ] egl-GetErrorString: func [error [integer!]][ switch/default error reduce [ EGL_SUCCESS [ "Success" ] EGL_NOT_INITIALIZED [ "EGL is not or could not be initialized" ] EGL_BAD_ACCESS [ "EGL cannot access a requested resource" ] EGL_BAD_ALLOC [ "EGL failed to allocate resources for the requested operation" ] EGL_BAD_ATTRIBUTE [ "An unrecognized attribute or attribute value was passed in the attribute list" ] EGL_BAD_CONTEXT [ "An EGLContext argument does not name a valid EGL rendering context" ] EGL_BAD_CONFIG [ "An EGLConfig argument does not name a valid EGL frame buffer configuration" ] EGL_BAD_CURRENT_SURFACE [ "The current surface of the calling thread is a window pixel buffer or pixmap that is no longer valid" ] EGL_BAD_DISPLAY [ "An EGLDisplay argument does not name a valid EGL display connection" ] EGL_BAD_SURFACE [ "An EGLSurface argument does not name a valid surface configured for GL rendering" ] EGL_BAD_MATCH [ "Arguments are inconsistent" ] EGL_BAD_PARAMETER [ "One or more argument values are invalid" ] EGL_BAD_NATIVE_PIXMAP [ "A NativePixmapType argument does not refer to a valid native pixmap" ] EGL_BAD_NATIVE_WINDOW [ "A NativeWindowType argument does not refer to a valid native window" ] EGL_CONTEXT_LOST [ "The application must destroy all contexts and reinitialise" ] ] [ "UNKNOWN EGL ERROR"] ] egl-make_error: func [[catch] error [integer!] msg [string!] ][ throw make error! reduce ['egl-lib 'in egl-GetErrorString error msg] ] egl-check_error: func [[catch] msg [string!] /local error][ if EGL_SUCCESS <> error: eglGetError [ throw-on-error [egl-make_error error msg] ] ] ; start/end get-win-handle: func [face [object!] /local user32 hWND][ face: find-window face user32: load/library %user32.dll FindWindow-by-class: make routine! [class [string!] name [integer!] return: [integer!]] user32 "FindWindowA" FindWindow-by-title: make routine! [class [integer!] name [string!] return: [integer!]] user32 "FindWindowA" ;SetFocus: make routine! [hwnd [int] return: [int]] user32 "SetFocus" hWND: FindWindow-by-title 0 head insert copy face/text "REBOL - " if hWND = 0 [hWND: FindWindow-by-class "REBOLWind" 0] free user32 hWND ] ; some comments taken from eglIntro.html egl-Start: funct [ ; auto-locals [catch] "Creates and assigns an OpenGL context to given window" face [object!] "Window to assign the new context to" fb_list [block!] "Block with keys=names and values of desired frame buffer" ctx_list [block!] "Block with keys=names and values of desired context attributes" /verbose "Print some information" ][ if not find ctx_list: reduce ctx_list EGL_CONTEXT_CLIENT_VERSION [ ; try an high version attempt [insert find ctx_list EGL_NONE [EGL_CONTEXT_CLIENT_VERSION 2]] ] fb_list: block-to-struct fb_list ctx_list: block-to-struct ctx_list NULL: 0 ;{ get an EGL display connection } display: eglGetDisplay EGL_DEFAULT_DISPLAY egl-check_error "eglGetDisplay" ;{ initialize the EGL display connection } major: int-ptr minor: int-ptr eglInitialize display & major & minor egl-check_error "eglInitialize" if verbose [print rejoin ["EGL version: " major/value "." minor/value]] ; optional ? ;eglBindAPI EGL_OPENGL_ES_API ;egl-check_error "eglBindAPI" ; return total number of possible configs num_config: int-ptr eglGetConfigs display NULL 0 & num_config egl-check_error "eglGetConfigs" if verbose [print ["total number of possible EGL frame buffer configs:" num_config/value]] if num_config/value = 0 [throw make error! reduce ['egl-lib 'frame-buffer] ] ;{ get an appropriate EGL frame buffer configuration } ; return total number of configs that match given attributes eglChooseConfig display & fb_list NULL 0 & num_config egl-check_error "eglChooseConfig GET" if verbose [print ["total number of configs that match given attributes:" num_config/value]] ; fall down to a possible config if num_config/value = 0 [ fb_list: block-to-struct [EGL_NONE] eglChooseConfig display & fb_list NULL 0 & num_config egl-check_error "eglChooseConfig GET" ] ; alloc mem for the possible configs configs: block-to-struct fill clear [] 0 num_config/value ; fill configs array of matching configs eglChooseConfig display & fb_list & configs num_config/value & num_config egl-check_error "eglChooseConfig UPD" ;{ create an EGL rendering context } ; try to find a valid config. Seems that last ones are better ? so reverse the list ? ; FIXME: should try to find the best match config: 0 last-error: 0 foreach elem second configs [ eglctx: eglCreateContext display elem EGL_NO_CONTEXT & ctx_list either EGL_SUCCESS = error: eglGetError [ config: elem break ][ ;eglDestroyContext display eglctx ; since context was not created avoid this ? last-error: error ] ] if last-error > 0 [egl-make_error error "eglCreateContext" ] if verbose [ ; some information for the curious result: int-ptr eglQueryContext display eglctx EGL_CONFIG_ID & result print ["EGL_CONFIG_ID" result/value] egl-check_error "eglQueryContext" eglQueryContext display eglctx EGL_CONTEXT_CLIENT_TYPE & result print ["EGL_CONTEXT_CLIENT_TYPE" attempt [form first back find eglblock120 result/value]] eglQueryContext display eglctx EGL_CONTEXT_CLIENT_VERSION & result print ["EGL_CONTEXT_CLIENT_VERSION" result/value] ] ;{ create an EGL window surface } surface: eglCreateWindowSurface display config get-win-handle face NULL egl-check_error "eglCreateWindowSurface" ;{ connect the context to the surface } eglMakeCurrent display surface surface eglctx egl-check_error "eglMakeCurrent" if verbose [ prin "GL_VERSION: " print glGetString GL_VERSION prin "GL_VENDOR: " print glGetString GL_VENDOR prin "GL_RENDERER: " print glGetString GL_RENDERER prin "GL_SHADING_LANGUAGE_VERSION: " print glGetString GL_SHADING_LANGUAGE_VERSION print "GL_EXTENSIONS:" print replace/all glGetString GL_EXTENSIONS " " "^/" ] eglSwapInterval display 1 reduce [display surface eglctx] ] egl-End: func [ "Free EGL resources" display [integer!] "void *EGLDisplay" surface [integer!] "void *EGLSurface" eglctx [integer!] "void *EGLContext" ][ eglMakeCurrent display EGL_NO_SURFACE EGL_NO_SURFACE EGL_NO_CONTEXT eglDestroyContext display eglctx eglDestroySurface display surface eglTerminate display ] ; {************************************************************ ** example ************************************************************} do ; just comment this line to avoid executing example [ if system/script/title = "GLES and EGL library interface" [;do examples only if script started by us glslsandbox.com_e59828.0: {//http://glslsandbox.com/e#59828.0 //translate variable names #define time u_Time #define resolution u_Resolution #ifdef GL_ES precision mediump float; #endif uniform float time; uniform vec2 resolution; #define t time vec2 pos_for_aspect_min(vec2 fragCoord , vec2 resolution) { return ( fragCoord * 2.0 - resolution ) / min(resolution.x,resolution.y); } void main() { vec2 p = pos_for_aspect_min( gl_FragCoord.xy , resolution); float c = 0.0; for(float l = 0.0;l < 10.0;l++){ for (float i = 0.0;i < 10.0;i++){ float j = i - 1.0; float si = sin(t + i * 0.628318) / 2.0 - sin(t/4.-l); float co = cos(t - i * 0.628318) / 8.0 + tan(t/8.-l); c += 0.003 / abs(length(p - vec2(si,co)/(1.25/abs(cos(t/4.0)))) - 0.1 ); } } gl_FragColor = vec4(vec3(abs(c*atan(t))- 0.5,c*cos(t),abs(c*sin(t))), 1.0 ); } } woah-circle: {//http://glslsandbox.com/e#58416.0 woah circle #ifdef GL_ES precision highp float; #endif uniform float u_Time; uniform vec2 u_Resolution; uniform float u_speed; uniform float u_radius; void main() { float t = u_Time * u_speed; vec2 r = u_Resolution, o = gl_FragCoord.xy - r/2.; o = vec2(length(o) / r.y - u_radius, atan(o.y,o.x)); vec4 s = 0.08*cos(1.5*vec4(0,1,2,3) + t + o.y + sin(o.y) * cos(t)), e = s.yzwx, f = max(o.x-s,e-o.x); gl_FragColor = dot(clamp(f*r.y,0.,1.), 72.*(s-e)) * (s-.1) + f; gl_FragColor.a = 1.0; } } hello_triangle+: funct [frag-shader /fullwindow][ vs: { //#version 300 es // for Chrome it is unsupported even in context version 2 :( precision highp float; attribute vec3 va_Position; //varying vec4 vertexColor; void main() { //vertexColor = vec4(0.0,1.0,0.0,1.0); // alter points position to check that they are passed to shader gl_Position = vec4(va_Position.x, va_Position.y / 1.50, 0,1.0); } } fs: frag-shader ; simple unused fragment shader to be used for test purposes { //#version 300 es precision mediump float; //varying vec4 vertexColor; void main() { // use a color different from background and from white (that is OpenGL default color) to check that shader works gl_FragColor = vec4(0.0,1.0,0.0,1.0); } } shaders_program: gles-make-program vs fs points: [ -1.0 -1.0 0.0 1.0 -1.0 0.0 0.0 1.0 0.0 ] ; make vertex buffer object and upload data (returned type is struct!) vbo: gles-make-buffer GL_ARRAY_BUFFER GL_STATIC_DRAW points va_PositionLoc: gles-set-vertex-attribute shaders_program "va_Position" vbo 3 ; 3 elements (x, y, z) per vertex indices: [ 0 1 2 ] indices: block-to-struct indices u_TimeLoc: glGetUniformLocation shaders_program "u_Time" u_ResolutionLoc: glGetUniformLocation shaders_program "u_Resolution" u_speedLoc: glGetUniformLocation shaders_program "u_speed" u_radiusLoc: glGetUniformLocation shaders_program "u_radius" t0: now/time/precise ; repeatedly draw while [running] [ ; assign changing variables values glUniform1f u_TimeLoc to decimal! now/time/precise - t0 glUniform2f u_ResolutionLoc 640 480 glUniform1f u_speedLoc any [attempt [5.0 * get-face sld-speed] 0.0] glUniform1f u_radiusLoc any [attempt [get-face sld-radius] 0.0] ;{ clear the color buffer } glClearColor 1.00 0.0 0.0 1.0 glClear GL_COLOR_BUFFER_BIT glUseProgram shaders_program ; draw triangle made of 3 points (indices) from the given indices array with current in-use shader glDrawElements GL_TRIANGLES 3 GL_UNSIGNED_INT & indices either fullwindow [ eglSwapBuffers display surface ][ gles-swap-buffers box-3D ] wait 0.02 ; allow GUI msgs to be processed ] ; we're done with this vertex attribute glDisableVertexAttribArray va_PositionLoc glDeleteBuffers 1 vbo ; use the struct! ! gles-free-program shaders_program ] framebuffer-attribs: [ EGL_SURFACE_TYPE EGL_WINDOW_BIT ;EGL_RENDERABLE_TYPE EGL_OPENGL_ES2_BIT EGL_RED_SIZE 8 EGL_GREEN_SIZE 8 EGL_BLUE_SIZE 8 EGL_ALPHA_SIZE 8 EGL_DEPTH_SIZE 16 EGL_STENCIL_SIZE 8 ;EGL_SAMPLES 4 ; multi-sampled 4x antialiasing EGL_NONE ] context-attribs: [ ;EGL_CONTEXT_CLIENT_VERSION 1 ; if we are using Chrome this is WebGL version ! and corrisonds to #version 100 EGL_CONTEXT_CLIENT_VERSION 2 ; if we are using Chrome this is WebGL version ! and corrisonds to #version 300 es ; these are not possible with Chrome libGLES ! ;EGL_CONTEXT_OPENGL_PROFILE_MASK EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT ;EGL_CONTEXT_OPENGL_PROFILE_MASK EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT ;EGL_CONTEXT_MAJOR_VERSION 3 ;EGL_CONTEXT_MINOR_VERSION 3 EGL_NONE EGL_NONE ] ;=== 1st window === ;{ create a native window } ; make a window without faces to minimize flickering during refresh. if you have a dark background use [origin 0 space 0 box 640x480 black] instead win-face: view/new layout [size 640x480] insert-event-func func [face event ] [ if event/type = 'close [running: false] event ] running: true ; if you're curious use /verbose set [display surface eglctx] egl-Start win-face framebuffer-attribs context-attribs glViewport 0 0 640 480 ; optional if viewport is entire window. hello_triangle+/fullwindow glslsandbox.com_e59828.0 egl-End display surface eglctx ;=== 2nd window === ;{ create a native window } win-face: view/new layout [ h3 "Use sliders to control speed and radius" across sld-speed: slider .2 sld-radius: slider .3 box-3D: image (make image! 640x480) feel none ] running: true set [display surface eglctx] egl-Start win-face framebuffer-attribs context-attribs glViewport 0 0 box-3D/size/x box-3D/size/y hello_triangle+ woah-circle egl-End display surface eglctx ; free egl-lib ; optional free gles32-lib ; optional ;halt ] ; if title ] ; do
halt ;; to terminate script if DO'ne from webpage
<< glb.r · gmul.r >>