如何在webgl的单个纹理中同时使用1D和2D纹理

如何在webgl的单个纹理中同时使用1D和2D纹理,webgl,Webgl,我试图在webgl上编写一个片段着色器,它将有13个制服,因为我需要在每个像素的基础上进行大量的每像素计算、纹理贴图、颜色变换等。但所有这些都会随着形状而改变。因此,当我想到将几个形状分批放入一个抽签呼叫时,我必须将每个形状的13件制服打包成一个统一的数组。但是这个统一的数组使我的着色器执行非常慢(在我在一个数组中穿过大约80-90个统一之后)。 由于这个原因,我想对所有制服使用1D纹理,但我已经在着色器中对每个像素的颜色使用2D纹理图集。现在我如何使用这个1D纹理和现有的2D纹理。我的理解是我

我试图在webgl上编写一个片段着色器,它将有13个制服,因为我需要在每个像素的基础上进行大量的每像素计算、纹理贴图、颜色变换等。但所有这些都会随着形状而改变。因此,当我想到将几个形状分批放入一个抽签呼叫时,我必须将每个形状的13件制服打包成一个统一的数组。但是这个统一的数组使我的着色器执行非常慢(在我在一个数组中穿过大约80-90个统一之后)。 由于这个原因,我想对所有制服使用1D纹理,但我已经在着色器中对每个像素的颜色使用2D纹理图集。现在我如何使用这个1D纹理和现有的2D纹理。我的理解是我们只能做1 gl.activeTexture()。
谁能帮我一下吗。我有没有其他方法来包装制服。webgl不支持统一缓冲区,因此必须放弃该计划。

gl。activeTexture
只设置您当前使用的纹理单元。纹理单元是全局状态。比如说

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);
textureA
现在绑定到纹理单元7,
textureB
现在绑定到纹理单元9

如果你有两个采样器

uniform sampler2D foo;
uniform sampler2D bar;
您可以像这样告诉每个采样器要引用哪个纹理单元

gl.uniform1i(locationForFoo, 7);  // tell 'foo' to use texture unit 7
gl.uniform1i(locationForBar, 9);  // tell 'bar' to use texture unit 9

可以使用多个纹理。传递2d纹理和附加的1d纹理。只需更改
gl.activeTexture(gl.TEXTURE{0 | 1..30 | 31})