我可以在webgl片段着色器中使用多少纹理?

我可以在webgl片段着色器中使用多少纹理?,webgl,Webgl,这个问题很简单,但我在任何地方的规范中都找不到答案。我可能在什么地方找不到明显的答案 在WebGL片段着色器中一次可以使用多少纹理?如果它是可变的,那么对于PC使用来说,合理的数字是多少?(对手机不太感兴趣) 我的一个着色器中至少需要23个,因此我想知道在开始编写代码之前是否能够这样做,或者是否需要进行多次传递。您可以在 看起来你运气不好,因为统计数据显示大多数人只有16个。你可以在 看起来你运气不好,因为统计数据显示大多数人只有16个。我很确定你可以通过 var maxTexturesInFr

这个问题很简单,但我在任何地方的规范中都找不到答案。我可能在什么地方找不到明显的答案

在WebGL片段着色器中一次可以使用多少纹理?如果它是可变的,那么对于PC使用来说,合理的数字是多少?(对手机不太感兴趣)


我的一个着色器中至少需要23个,因此我想知道在开始编写代码之前是否能够这样做,或者是否需要进行多次传递。

您可以在


看起来你运气不好,因为统计数据显示大多数人只有16个。

你可以在


看起来你运气不好,因为统计数据显示大多数人只有16个。

我很确定你可以通过

var maxTexturesInFragmentShader = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
WebGL(OpenGL ES 2.0)只需要最少8个片段着色器

请注意,可以访问的纹理数与可以访问一个纹理的次数是分开的。因此,例如,如果希望仅使用1个纹理单元访问2个纹理,则组合纹理并调整UV坐标。例如,将两个纹理[A]和[B]的内容并排放入一个纹理[AB],然后

vec4 colorFromTexA = texture2D(samplerAB, uvForTexA * vec2(0.5, 1.0));
vec4 colorFromTexB = texture2D(samplerAB, uvForTexB * vec2(0.5, 1.0) + vec2(0.5, 0.0));

当然,您可能需要为无mips等打开设置筛选功能。

我相信您可以通过

var maxTexturesInFragmentShader = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
WebGL(OpenGL ES 2.0)只需要最少8个片段着色器

请注意,可以访问的纹理数与可以访问一个纹理的次数是分开的。因此,例如,如果希望仅使用1个纹理单元访问2个纹理,则组合纹理并调整UV坐标。例如,将两个纹理[A]和[B]的内容并排放入一个纹理[AB],然后

vec4 colorFromTexA = texture2D(samplerAB, uvForTexA * vec2(0.5, 1.0));
vec4 colorFromTexB = texture2D(samplerAB, uvForTexB * vec2(0.5, 1.0) + vec2(0.5, 0.0));

当然,您可能需要为无mips等设置过滤功能。

好的,谢谢,这是一个有用的站点。啊,好吧,与其说是出于运气,不如说是需要关于我的代码使用哪种方式的信息,如果我可以在一个着色器中完成所有操作,那么进行多次传递是没有意义的,但现在我知道这是必要的,我可以继续进行:)好的,谢谢,这是一个有用的站点。啊,好吧,与其说是因为运气,不如说是因为我需要关于代码使用哪种方式的信息,如果我可以在一个着色器中完成所有操作,那么进行多次传递是没有意义的,但现在我知道有必要继续进行:)我从答案中看到,16是常见的,但它可以变化。该标准是否规定了我可以期望的最低标准?我从答案中看到16是常见的,但它可以变化。标准是否规定了我期望的最低要求?嗯,8。我的应用程序只适用于台式机,而不是小型手机和其他东西,所以我想我可以依赖更多,因为它们似乎都有16个,但我至少需要在启动时检查参数。我想如果我必须做多路径的话,我也许可以用更少的时间来完成它。我可能可以组合一些纹理,然后组合它们,这是个好主意,但大多数纹理我都需要平铺。尽管如此,我还是可以在片段着色器代码中做到这一点。谢谢你的主意。我的应用程序只适用于台式机,而不是小型手机和其他东西,所以我想我可以依赖更多,因为它们似乎都有16个,但我至少需要在启动时检查参数。我想如果我必须做多路径的话,我也许可以用更少的时间来完成它。我可能可以组合一些纹理,然后组合它们,这是个好主意,但大多数纹理我都需要平铺。尽管如此,我还是可以在片段着色器代码中做到这一点。谢谢你的主意。