再次打个招呼,欢迎来到另一个“如果我们结合了两件我真的不理解的事情,这不是很好吗”——问题;)
本期:OpenGL制服和C++模板
想法:如果您能编写一个模板函数来设置OpenGL明暗器中的制服,这不是很好吗?
问题是:材质球中的制服是使用许多Gluniform*函数设置的。它们的区别在于:
类型 :制服有几种类型。这会导致OpenGL中出现不同的函数名,如:gluniform1f、gluniform1i、gluniform1fv等。
使用重载函数可以很容易地“统一”。但这导致了大量相似的功能。
第一个问题:在这里可以使用模板吗?据我所知,模板必须专门用于每个新函数。最后,您将拥有与简单重载相同数量的函数。
参数计数 :Gluniform函数中的数字引用给定参数的数字。有一到四个参数与简单值相关,最多包含四个元素的向量。
第二个问题:是否可以用模板实现“动态”参数计数?
矩阵 :要使事情复杂化,还有另一类统一的函数发送矩阵,但由于我没有真正使用这些函数,所以我对它们不感兴趣。
可能没有真正的方法来简化统一的方法…但是也许有人可以用强大的模板来提出一个伟大的解决方案?
亲切的问候, 弗洛里安
1:是的,也是的,但至少当编译器抱怨它不能在浮点和双重载之间进行选择时,您可以非常简单地强制它,即 setUniform<float>(blah) 而不是 setUniform(blah)
setUniform<float>(blah)
setUniform(blah)
2:这次过载是一个简单的解决方案:)
3:问题是什么?
问题是,你为什么要做这样的事?