gpt4 book ai didi

c++ - 使用模板管理 glUniform 函数

转载 作者:可可西里 更新时间:2023-11-01 18:37:20 26 4
gpt4 key购买 nike

再次嗨,欢迎来到另一个“如果我们将两件我真的不了解的事情结合起来会不会很棒”-问题;)

这一集:OpenGL 制服和 C++ 模板

想法:如果您可以编写一个模板函数来在 OpenGL 着色器中设置制服,那不是很好吗?

问题:着色器中的制服是使用许多 glUniform* 函数设置的。它们的不同之处在于:

  1. 类型:制服可以采用多种类型。这导致 OpenGL 中的不同函数名称看起来像:glUniform1f、glUniform1i、glUniform1fv 等。

    使用函数重载可以很容易地“统一”这些。但这会产生大量类似的函数。

    第一个问题:这个地方可以用模板吗?据我了解模板,您必须专门针对每个新功能。最后,您将拥有与简单重载相同数量的函数。

  2. 参数个数:glUniform函数中的个数是指给定参数的个数。有 1 到 4 个参数与简单值相关,最多包含 4 个元素的 vector 。

    第二个问题:是否可以使用模板实现“动态”参数计数?

  3. 矩阵:让事情变得复杂的是另一类发送矩阵的统一函数,但由于我并没有真正使用它们,所以我对它们并不真正感兴趣。

可能没有真正的方法来简化统一方法......但也许有人可以使用强大的模板想出一个很好的解决方案?

亲切的问候,弗洛里安

最佳答案

1 :是的,是的,但至少当编译器提示它无法在 float 和 double 重载之间进行选择时,你可以非常简单地强制他,即 setUniform<float>(blah)而不是 setUniform(blah)

2:这次重载是一个更简单的解决方案:)

3:问题是什么?

问题是,你为什么要做这样的事情?

关于c++ - 使用模板管理 glUniform 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com