how to use 1D and 2D texture both in a single texture in webgl
我试图在 webgl 上编写一个片段着色器,它将有 13 个制服,因为我需要在每个像素的基础上进行大量的每个像素计算、纹理图集映射、颜色转换等。但所有这些都会随着形状而改变。因此,当我考虑将多个形状批处理到一个绘图调用中时,我必须将每个形状的所有这 13 个制服打包成一个统一数组。但是这个统一数组使我的着色器执行非常慢(在我在单个数组中跨越大约 80-90 个统一之后)。
由于这个原因,我想为所有制服使用 1D 纹理,但我已经在我的着色器中使用 2D 纹理图集来处理每个像素的颜色。现在我怎样才能将这个 1D 纹理与现有的 2D 一起使用。我的理解是我们只能做 1 个 gl.activeTexture() 。
任何人都可以帮助我。我还有其他方法可以打包制服吗? webgl 不支持统一缓冲区,因此不得不放弃该计划。
1 2 3 4 | gl.activeTexture(gl.TEXTURE7); // or gl.TEXTURE0 + 7 gl.bindTexture(gl.TEXTURE_2D, textureA); gl.activeTexture(gl.TEXTURE9); // go gl.TEXTURE0 + 9 gl.bindTexture(gl.TEXTURE_2D, textureB); |
如果你有 2 个采样器。
1 2 | uniform sampler2D foo; uniform sampler2D bar; |
您可以像这样告诉每个采样器要引用哪个纹理单元
1 2 | gl.uniform1i(locationForFoo, 7); // tell 'foo' to use texture unit 7 gl.uniform1i(locationForBar, 9); // tell 'bar' to use texture unit 9 |