使用模板管理glUniform函数

时间:2010-08-02 10:00:48

标签: c++ templates opengl

嗨再次欢迎另一个人“如果我们结合了两件我真正不了解的问题,那就不会很好;”

本集:OpenGL制服和c ++模板

理念:如果您可以编写单个模板函数来设置OpenGL着色器中的制服,那会不会很棒?

问题:着色器中的制服使用许多glUniform *函数设置。它们的区别在于:

  1. 类型:制服可以采用多种类型。这导致OpenGL中的不同函数名称如下:glUniform1f,glUniform1i,glUniform1fv等。

    使用重载函数可以很容易地“统一”这些。但这导致了大量类似的功能。

    第一个问题:是否可以在这个地方使用模板?据我了解模板,你必须专注于每个新功能。最后,您将拥有与简单重载相同的功能。

  2. 参数计数:glUniform函数中的数字是指给定参数的数字。有一到四个参数与简单值相关,直到含有4个元素的向量。

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

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

    < / LI>

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

    亲切的问候, 弗洛里安

1 个答案:

答案 0 :(得分:5)

1:是的,是的,但至少当编译器抱怨它无法在浮点数和双重超载之间做出选择时,你可以非常简单地强迫他,即setUniform<float>(blah)而不是setUniform(blah) < / p>

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

3:问题是什么?

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