乍一看缺了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这样的库还是很有必要的。