嗨再次欢迎另一个人“如果我们结合了两件我真正不了解的问题,那就不会很好;”
本集:OpenGL制服和c ++模板
理念:如果您可以编写单个模板函数来设置OpenGL着色器中的制服,那会不会很棒?
问题:着色器中的制服使用许多glUniform *函数设置。它们的区别在于:
类型:制服可以采用多种类型。这导致OpenGL中的不同函数名称如下:glUniform1f,glUniform1i,glUniform1fv等。
使用重载函数可以很容易地“统一”这些。但这导致了大量类似的功能。
第一个问题:是否可以在这个地方使用模板?据我了解模板,你必须专注于每个新功能。最后,您将拥有与简单重载相同的功能。
参数计数:glUniform函数中的数字是指给定参数的数字。有一到四个参数与简单值相关,直到含有4个元素的向量。
第二个问题:是否可以使用模板实现“动态”参数计数?
矩阵:为了使事情变得复杂,还有另一类发送矩阵的统一函数,但由于我并没有真正使用它们,所以我对它们并不感兴趣。
< / LI> 醇>可能没有真正简化统一方法的方法......但也许有人可以使用强大的模板提出一个很好的解决方案?
亲切的问候, 弗洛里安
答案 0 :(得分:5)
1:是的,是的,但至少当编译器抱怨它无法在浮点数和双重超载之间做出选择时,你可以非常简单地强迫他,即setUniform<float>(blah)
而不是setUniform(blah)
< / p>
2:这次重载是一个更简单的解决方案:)
3:问题是什么?
问题是,你为什么要做这样的事情?