zorldo

Goofing around with Ebiten
git clone git://bsandro.tech/zorldo
Log | Files | Refs | README

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 }