gl_js.go (8378B)
1 // Copyright 2021 The Ebiten Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package opengl 16 17 import ( 18 "syscall/js" 19 ) 20 21 type gl struct { 22 activeTexture js.Value 23 attachShader js.Value 24 bindAttribLocation js.Value 25 bindBuffer js.Value 26 bindFramebuffer js.Value 27 bindRenderbuffer js.Value 28 bindTexture js.Value 29 blendFunc js.Value 30 bufferData js.Value 31 bufferSubData js.Value 32 checkFramebufferStatus js.Value 33 clear js.Value 34 colorMask js.Value 35 compileShader js.Value 36 createBuffer js.Value 37 createFramebuffer js.Value 38 createProgram js.Value 39 createRenderbuffer js.Value 40 createShader js.Value 41 createTexture js.Value 42 deleteBuffer js.Value 43 deleteFramebuffer js.Value 44 deleteProgram js.Value 45 deleteRenderbuffer js.Value 46 deleteShader js.Value 47 deleteTexture js.Value 48 disable js.Value 49 disableVertexAttribArray js.Value 50 drawElements js.Value 51 enable js.Value 52 enableVertexAttribArray js.Value 53 framebufferRenderbuffer js.Value 54 framebufferTexture2D js.Value 55 flush js.Value 56 getBufferSubData js.Value 57 getExtension js.Value 58 getParameter js.Value 59 getProgramInfoLog js.Value 60 getProgramParameter js.Value 61 getShaderInfoLog js.Value 62 getShaderParameter js.Value 63 getShaderPrecisionFormat js.Value 64 getUniformLocation js.Value 65 isContextLost js.Value 66 isFramebuffer js.Value 67 isProgram js.Value 68 isRenderbuffer js.Value 69 isTexture js.Value 70 linkProgram js.Value 71 pixelStorei js.Value 72 readPixels js.Value 73 renderbufferStorage js.Value 74 scissor js.Value 75 shaderSource js.Value 76 stencilFunc js.Value 77 stencilMask js.Value 78 stencilOp js.Value 79 texImage2D js.Value 80 texSubImage2D js.Value 81 texParameteri js.Value 82 uniform1f js.Value 83 uniform1fv js.Value 84 uniform2fv js.Value 85 uniform3fv js.Value 86 uniform4fv js.Value 87 uniform1i js.Value 88 uniformMatrix2fv js.Value 89 uniformMatrix3fv js.Value 90 uniformMatrix4fv js.Value 91 useProgram js.Value 92 vertexAttribPointer js.Value 93 viewport js.Value 94 } 95 96 func (c *context) newGL(v js.Value) *gl { 97 // Passing a Go string to the JS world is expensive. This causes conversion to UTF-16 (#1438). 98 // In order to reduce the cost when calling functions, create the function objects by bind and use them. 99 g := &gl{ 100 activeTexture: v.Get("activeTexture").Call("bind", v), 101 attachShader: v.Get("attachShader").Call("bind", v), 102 bindAttribLocation: v.Get("bindAttribLocation").Call("bind", v), 103 bindBuffer: v.Get("bindBuffer").Call("bind", v), 104 bindFramebuffer: v.Get("bindFramebuffer").Call("bind", v), 105 bindRenderbuffer: v.Get("bindRenderbuffer").Call("bind", v), 106 bindTexture: v.Get("bindTexture").Call("bind", v), 107 blendFunc: v.Get("blendFunc").Call("bind", v), 108 bufferData: v.Get("bufferData").Call("bind", v), 109 bufferSubData: v.Get("bufferSubData").Call("bind", v), 110 checkFramebufferStatus: v.Get("checkFramebufferStatus").Call("bind", v), 111 clear: v.Get("clear").Call("bind", v), 112 colorMask: v.Get("colorMask").Call("bind", v), 113 compileShader: v.Get("compileShader").Call("bind", v), 114 createBuffer: v.Get("createBuffer").Call("bind", v), 115 createFramebuffer: v.Get("createFramebuffer").Call("bind", v), 116 createProgram: v.Get("createProgram").Call("bind", v), 117 createRenderbuffer: v.Get("createRenderbuffer").Call("bind", v), 118 createShader: v.Get("createShader").Call("bind", v), 119 createTexture: v.Get("createTexture").Call("bind", v), 120 deleteBuffer: v.Get("deleteBuffer").Call("bind", v), 121 deleteFramebuffer: v.Get("deleteFramebuffer").Call("bind", v), 122 deleteProgram: v.Get("deleteProgram").Call("bind", v), 123 deleteRenderbuffer: v.Get("deleteRenderbuffer").Call("bind", v), 124 deleteShader: v.Get("deleteShader").Call("bind", v), 125 deleteTexture: v.Get("deleteTexture").Call("bind", v), 126 disable: v.Get("disable").Call("bind", v), 127 disableVertexAttribArray: v.Get("disableVertexAttribArray").Call("bind", v), 128 drawElements: v.Get("drawElements").Call("bind", v), 129 enable: v.Get("enable").Call("bind", v), 130 enableVertexAttribArray: v.Get("enableVertexAttribArray").Call("bind", v), 131 framebufferRenderbuffer: v.Get("framebufferRenderbuffer").Call("bind", v), 132 framebufferTexture2D: v.Get("framebufferTexture2D").Call("bind", v), 133 flush: v.Get("flush").Call("bind", v), 134 getParameter: v.Get("getParameter").Call("bind", v), 135 getProgramInfoLog: v.Get("getProgramInfoLog").Call("bind", v), 136 getProgramParameter: v.Get("getProgramParameter").Call("bind", v), 137 getShaderInfoLog: v.Get("getShaderInfoLog").Call("bind", v), 138 getShaderParameter: v.Get("getShaderParameter").Call("bind", v), 139 getShaderPrecisionFormat: v.Get("getShaderPrecisionFormat").Call("bind", v), 140 getUniformLocation: v.Get("getUniformLocation").Call("bind", v), 141 isContextLost: v.Get("isContextLost").Call("bind", v), 142 isFramebuffer: v.Get("isFramebuffer").Call("bind", v), 143 isProgram: v.Get("isProgram").Call("bind", v), 144 isRenderbuffer: v.Get("isRenderbuffer").Call("bind", v), 145 isTexture: v.Get("isTexture").Call("bind", v), 146 linkProgram: v.Get("linkProgram").Call("bind", v), 147 pixelStorei: v.Get("pixelStorei").Call("bind", v), 148 readPixels: v.Get("readPixels").Call("bind", v), 149 renderbufferStorage: v.Get("renderbufferStorage").Call("bind", v), 150 scissor: v.Get("scissor").Call("bind", v), 151 shaderSource: v.Get("shaderSource").Call("bind", v), 152 stencilFunc: v.Get("stencilFunc").Call("bind", v), 153 stencilMask: v.Get("stencilMask").Call("bind", v), 154 stencilOp: v.Get("stencilOp").Call("bind", v), 155 texImage2D: v.Get("texImage2D").Call("bind", v), 156 texSubImage2D: v.Get("texSubImage2D").Call("bind", v), 157 texParameteri: v.Get("texParameteri").Call("bind", v), 158 uniform1f: v.Get("uniform1f").Call("bind", v), 159 uniform1fv: v.Get("uniform1fv").Call("bind", v), 160 uniform2fv: v.Get("uniform2fv").Call("bind", v), 161 uniform3fv: v.Get("uniform3fv").Call("bind", v), 162 uniform4fv: v.Get("uniform4fv").Call("bind", v), 163 uniform1i: v.Get("uniform1i").Call("bind", v), 164 uniformMatrix2fv: v.Get("uniformMatrix2fv").Call("bind", v), 165 uniformMatrix3fv: v.Get("uniformMatrix3fv").Call("bind", v), 166 uniformMatrix4fv: v.Get("uniformMatrix4fv").Call("bind", v), 167 useProgram: v.Get("useProgram").Call("bind", v), 168 vertexAttribPointer: v.Get("vertexAttribPointer").Call("bind", v), 169 viewport: v.Get("viewport").Call("bind", v), 170 } 171 if c.usesWebGL2() { 172 g.getExtension = v.Get("getBufferSubData").Call("bind", v) 173 } else { 174 g.getExtension = v.Get("getExtension").Call("bind", v) 175 } 176 return g 177 }