目前,我正在使用2D画布上下文从JavaScript以大约25fps的速率绘制生成的图像(从像素到像素,但在生成的帧之后一次刷新为整个缓冲区).生成的图像每个像素始终是一个字节(整数/类型数组),固定调色板用于生成RGB最终结果.还需要缩放以采用画布的大小(即:进入全屏)和/或根据用户请求(放大/缩小按钮).
画布的2D上下文可以用于此目的,但是我很好奇WebGL是否可以提供更好的结果和/或更好的性能.请注意:我不想通过webGL放置像素,我想将像素放入我的缓冲区(基本上是Uint8Array),并使用该缓冲区(一次)刷新上下文.我不太了解WebGL,但是使用所需的生成图像作为某种纹理会以某种方式工作吗?然后我需要以大约25fps的速率刷新纹理,我猜.
如果WebGL以某种方式支持色彩空间转换,那真是太棒了.对于2D上下文,我需要将每个像素的1个字节/像素缓冲区转换为RGBA for JavaScript中的imagedata ...现在通过改变画布的高度/宽度样式来缩放(对于2D上下文),因此浏览器会缩放然后是图像.但是我想它可能比WebGL可以用hw支持做得慢,并且(我希望)WebGL可以提供更大的灵活性来控制缩放,例如使用2D上下文,浏览器即使我不想要也会做抗锯齿做(例如:整数缩放因子),也许这就是它有时可能很慢的原因.
我已经尝试过学习几个WebGL教程,但所有这些教程都以对象,形状,3D立方体等开头,我不需要任何 - 经典 - 对象来渲染2D上下文也可以做什么 - 希望对于同样的任务,WebGL可以是更快的解决方案!当然,如果根本没有WebGL的胜利,我会继续使用2D上下文.
需要说明的是:这是用JavaScript完成的某种计算机硬件模拟器,它的输出(连接到它的PAL电视上可以看到)通过画布上下文呈现.该机器具有256个元素的固定调色板,在内部它只需要一个字节用于像素来定义其颜色.