2020新的十年

乍一看缺了2019年的内容,其实因为大部分记录都留在了推上。

而因为大环境变得越来越难,所以并不想在公开场合讨论什么了,都是旧的牢骚,没有任何事情变得更好。

今年就不写游戏记录了,得空专门整一篇。

还是记录下年初debug的收获,抓取了pixi.js的的WebGL调用记录,发现做简单的2d游戏用不了几个函数,这里也就47个而已。

它们是:

gl.activeTexture, gl.attachShader, gl.bindBuffer, gl.bindFramebuffer, gl.bindTexture, gl.blendFunc, gl.bufferData, gl.bufferSubData, gl.clear, gl.clearColor, gl.compileShader, gl.createBuffer, gl.createFramebuffer, gl.createProgram, gl.createShader, gl.createTexture, gl.deleteShader, gl.disable, gl.disableVertexAttribArray, gl.drawElements, gl.enable, gl.enableVertexAttribArray, gl.framebufferTexture2D, gl.frontFace, gl.getActiveAttrib, gl.getActiveUniform, gl.getAttribLocation, gl.getExtension, gl.getParameter, gl.getProgramParameter, gl.getShaderParameter, gl.getUniformLocation, gl.isContextLost, gl.linkProgram, gl.pixelStorei, gl.scissor, gl.shaderSource, gl.texImage2D, gl.texParameteri, gl.uniform1f, gl.uniform1i, gl.uniform1iv, gl.uniform3fv, gl.uniformMatrix3fv, gl.useProgram, gl.vertexAttribPointer, gl.viewport

分分类的话,大概是这么几种。

查询设备状态或扩展接口

gl.getExtension
gl.getParameter
gl.isContextLost

操作和设置属性

gl.disable
gl.enable
gl.blendFunc
gl.frontFace
gl.scissor
gl.viewport

清屏和绘制

gl.clearColor
gl.clear
gl.drawElements

操作vertex属性数组

gl.vertexAttribPointer
gl.enableVertexAttribArray
gl.disableVertexAttribArray

操作各种texture对象

gl.activeTexture
gl.createTexture
gl.bindTexture
gl.pixelStorei
gl.texImage2D
gl.texParameteri

操作framebuffer对象

gl.bindFramebuffer
gl.createFramebuffer
gl.framebufferTexture2D

操作各种buffer对象

gl.createBuffer
gl.bindBuffer
gl.bufferData
gl.bufferSubData

关于shader的接口

gl.createShader
gl.shaderSource
gl.compileShader
gl.getShaderParameter
gl.createProgram
gl.attachShader
gl.linkProgram
gl.getProgramParameter
gl.deleteShader
gl.useProgram
gl.getUniformLocation
gl.getAttribLocation
gl.uniformMatrix3fv
gl.uniform3fv
gl.uniform1f
gl.getActiveAttrib
gl.getActiveUniform
gl.uniform1i
gl.uniform1iv

除了shader部分比较繁琐以外,其他的都很简单,而shader相关的也可以很容易的封装起来。
但实际上由于opengl自带状态,从api调用的录制结果脑补当前场景,非常困难。
比如到底操作的是哪个buffer?究竟哪个texture是活动的?framebuffer的数据都是设置正确了吗?
再加上最好能自动合并渲染批次,所以pixi.js这样的库还是很有必要的。