html - 如何将像素着色器应用于 Canvas 元素?

标签 html canvas webgl fragment-shader

我有一个 <canvas>由外部库写入的元素。我希望对此 Canvas 应用“后期制作”效果:我想映射一个函数 (r,g,b,a) -> (r,g,b,a)在最终显示之前遍历每个像素。

我知道外部库写入从 <canvas> 获得的二维上下文元素。我也知道我要求的转换是“像素着色器”或“片段着色器”。我知道我需要一个 webgl上下文应用这样的着色器。 this answer告诉我一个 Canvas 不能同时有多个上下文,所以我不确定这种方法是否可行。

我考虑的另一种方法是将 Canvas 的输出捕获为流,然后将其写入应用了我的转换的新 Canvas 。然而,this feature only exists in bleeding-edge Firefox .

是否可以将片段着色器应用于 Canvas 输出?如果是,怎么做?

最佳答案

您可以将 2D Canvas 复制到 WebGL 纹理,然后使用您设计的任何片段着色器将该纹理渲染到 WebGL Canvas 。

有很多关于使用 Canvas 作为纹理源数据的堆栈溢出的例子

How Do I Use an HTML5 Canvas as a WebGL Texture

how to get texture in webgl?without Canvas.toDataUrl()

Blend two canvases onto one with WebGL

WebGL blit texture to canvas

关于html - 如何将像素着色器应用于 Canvas 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443968/

相关文章:

HTML5 <button> 在 Firefox 中不起作用,但在 I.E 中起作用

javascript - 如何使 e.target 的 HTML 标签不可点击?

html - Bootstrap4 使卡头高度相同

android - 如何在空 Canvas 上画圆?

javascript - 如何使 Canvas 达到主体的宽度和高度,同时不拉伸(stretch)或模糊绘图?

javascript - Webgl 顶点属性指针 : index out of range

dart - 加载纹理图像数据(texImage2DTyped?)

javascript - 如何在全屏模式下水平滚动?

javascript - 旋转 Canvas 中的单个对象?

javascript - 对大量简单形状进行动画处理