使用模板管理glUniform函数

fho*_*fho 7 c++ opengl templates

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

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

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

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

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

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

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

  2. 参数计数:glUniform函数中的数字表示给定参数的数量.有一到四个参数涉及到具有4个元素的向量的简单值.

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

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

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

亲切的问候,弗洛里安

Cal*_*602 5

1:是的,是的,但至少当编译器抱怨它无法在浮动和双重超载之间进行选择时,你可以非常简单地强迫他,即setUniform<float>(blah)代替setUniform(blah)

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

3:问题是什么?

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