我在游戏中使用了5种颜色的调色板,每次我都把每一种颜色作为uniform vec3传递给程序。如果我使用的是包含所有5种颜色的一维纹理(在纹理中浮动15种),它会更有效吗?
这只是我想做这种事的情况之一。另一种方法是一次将所有矩阵/变量发送到着色器程序。我似乎有点低效率发送每个变量,一个在时间,每次我想渲染。是否最好将它们组合在一个单一的纹理中,同时将它们全部发送?
也许还有另外一种更有效的方法来做我想做的事?
发布于 2019-02-03 19:00:33
如果我使用的是包含所有5种颜色的一维纹理(在纹理中浮动15种),它会更有效吗?
不,纹理读取最有可能有较低的性能,但在你的情况下,它不应该有太大的区别。
也许还有另外一种更有效的方法来做我想做的事?
好吧,如果它们总是和你说的一样,那就把它们作为常量放在着色器里。
这只是我想做这种事的情况之一。另一种方法是一次将所有矩阵/变量发送到着色器程序。我似乎有点低效率发送每个变量,一个在时间,每次我想渲染。是否最好将它们组合在一个单一的纹理中,同时将它们全部发送?
修改纹理不会比设置一些制服更快。
如果你要使用矩阵的每一个顶点或每片段,那么它将导致大量的纹理读取。这实际上可能会导致显着的性能下降,这取决于所拥有的顶点/片段/矩阵的数量。即使纹理数据在L1纹理缓存中结束,它仍然不能超过统一读取。
如果不想独立发送所有变量,可以使用统一的缓冲区对象。
https://stackoverflow.com/questions/54505162
复制相似问题