首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Texture1D代替制服

用Texture1D代替制服
EN

Stack Overflow用户
提问于 2019-02-03 16:45:34
回答 1查看 100关注 0票数 1

我在游戏中使用了5种颜色的调色板,每次我都把每一种颜色作为uniform vec3传递给程序。如果我使用的是包含所有5种颜色的一维纹理(在纹理中浮动15种),它会更有效吗?

这只是我想做这种事的情况之一。另一种方法是一次将所有矩阵/变量发送到着色器程序。我似乎有点低效率发送每个变量,一个在时间,每次我想渲染。是否最好将它们组合在一个单一的纹理中,同时将它们全部发送?

也许还有另外一种更有效的方法来做我想做的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 19:00:33

如果我使用的是包含所有5种颜色的一维纹理(在纹理中浮动15种),它会更有效吗?

不,纹理读取最有可能有较低的性能,但在你的情况下,它不应该有太大的区别。

也许还有另外一种更有效的方法来做我想做的事?

好吧,如果它们总是和你说的一样,那就把它们作为常量放在着色器里。

这只是我想做这种事的情况之一。另一种方法是一次将所有矩阵/变量发送到着色器程序。我似乎有点低效率发送每个变量,一个在时间,每次我想渲染。是否最好将它们组合在一个单一的纹理中,同时将它们全部发送?

修改纹理不会比设置一些制服更快。

如果你要使用矩阵的每一个顶点或每片段,那么它将导致大量的纹理读取。这实际上可能会导致显着的性能下降,这取决于所拥有的顶点/片段/矩阵的数量。即使纹理数据在L1纹理缓存中结束,它仍然不能超过统一读取。

如果不想独立发送所有变量,可以使用统一的缓冲区对象。

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

https://stackoverflow.com/questions/54505162

复制
相关文章

相似问题

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