首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebGL是否有统一的或纹理的绑定限制?

WebGL是否有统一的或纹理的绑定限制?
EN

Stack Overflow用户
提问于 2021-01-06 05:49:11
回答 1查看 144关注 0票数 1

我试图在WebGL中渲染一辆汽车的车牌,它的颜色是紫色的,其统一的名字是diffTex

当我用一种简单的黑色材料和没有纹理的

  1. 渲染汽车的其余部分时,使车牌呈现为统一的35到diffTex和36到specNrmMap的6 activeTexture() calls。紫色平板如预期般在屏幕上显示。

然而,当我用自己的材料、纹理等渲染整辆汽车时,呈现车牌的绘图调用跳过了,并将统一的35与specNrmMap绑定到specNrmMap,没有第36号,用于5次activeTexture()调用。紫色板呈白色,没有漫射纹理。--

WebGL是否有一个统一的限制或纹理绑定的限制,我可能会忽略?webglreport.com声明我的最大纹理图像单位是16在片段着色器,我只使用6,所以我有10个备用。我不会改变车牌材料中的任何东西,它只是当我把汽车渲染成没有纹理的黑色的时候,当我用纹理渲染其余的汽车时,它就停止工作了。

EN

回答 1

Stack Overflow用户

发布于 2021-01-06 11:15:42

制服在WebGL中没有编号。调试器中的数字是由调试器分配的。如何对它们进行编号取决于调试器。它可以通过查询它们来计算它们的数量。如果是这样的话,它们会在不同的实现中得到不同的数字。如果你改变着色器,它们也会改变。它可以根据你使用它们的顺序给它们编号。如果是这样的话,那么设置不同的纹理也会给它们编号不同。

如果不使用制服,几乎总是会对制服进行优化,所以如果您停止使用特定的制服,那么您使用的调试器可能会对它们进行不同的编号。

至于限制,正如您已经检查过的那样,纹理单元的数量是有限制的,并且您可以将不同的纹理绑定到每个单元,因此您的6个纹理很好地低于这个限制。

对于制服,极限是通过gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)查询顶点着色器和gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS),尽管你不太可能达到这个限制,因为你在编译着色器时会出错。

注意:你能从这个数字中实际使用多少制服是由包装算法定义的。请参阅this answer

至于为什么您的代码不能工作,您必须发布一个回购(在问题本身),我们才能弄清楚。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65590826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档