代码之家  ›  专栏  ›  技术社区  ›  fho

使用模板管理Gluniform函数

  •  6
  • fho  · 技术社区  · 14 年前

    再次打个招呼,欢迎来到另一个“如果我们结合了两件我真的不理解的事情,这不是很好吗”——问题;)

    本期:OpenGL制服和C++模板

    想法:如果您能编写一个模板函数来设置OpenGL明暗器中的制服,这不是很好吗?

    问题是:材质球中的制服是使用许多Gluniform*函数设置的。它们的区别在于:

    1. 类型 :制服有几种类型。这会导致OpenGL中出现不同的函数名,如:gluniform1f、gluniform1i、gluniform1fv等。

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

      第一个问题:在这里可以使用模板吗?据我所知,模板必须专门用于每个新函数。最后,您将拥有与简单重载相同数量的函数。

    2. 参数计数 :Gluniform函数中的数字引用给定参数的数字。有一到四个参数与简单值相关,最多包含四个元素的向量。

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

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

    可能没有真正的方法来简化统一的方法…但是也许有人可以用强大的模板来提出一个伟大的解决方案?

    亲切的问候, 弗洛里安

    1 回复  |  直到 14 年前
        1
  •  5
  •   Georg Fritzsche    14 年前

    1:是的,也是的,但至少当编译器抱怨它不能在浮点和双重载之间进行选择时,您可以非常简单地强制它,即 setUniform<float>(blah) 而不是 setUniform(blah)

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

    3:问题是什么?

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