OpenGL中绘制函数范围内的静态变量?

时间:2011-04-20 21:06:46

标签: c++ function opengl static-variables

作为一个例子,我在一些OpenGL应用程序中有以下绘图功能:

void Terrain::Draw(float ox, float oy, float oz) {
    float terrainWidth = stepWidth * (width - 1.0f);
    float terrainLength = stepLength * (length - 1.0f);
    float startWidth = (terrainWidth / 2.0f) - terrainWidth;
    float startLength = (terrainLength / 2.0f) - terrainLength;

        (...)
}

Terrain是一个类,我确信步和地形宽度/长度实例变量在对象的生命周期内永远不会改变(它们在第一次调用绘制函数之前被初始化)。 / p>

假设我的应用程序以稳定的25fps运行,该函数将被调用25次。价值永远不会改变,它们永远都是一样的。

我将这些函数变量声明为静态会获得什么吗?为了防止它们在每次调用函数时被销毁和声明?

3 个答案:

答案 0 :(得分:2)

编译器如今擅长微观优化,几乎不可能就是否会改进或减慢你的程序做出明确的陈述。

你必须确定基准才能确定。

答案 1 :(得分:1)

是的,当你在那里时,也要const。这两个都可以提示编译器优化这些函数变量。

虽然差异很小,但每秒至少需要25,000次电话才能使这一点变得有价值。

答案 2 :(得分:1)

  

我会将这些函数变量声明为静态吗?

它确实是一小部分数据:除非你有大量的实例,否则不要打扰。

  

为了防止它们在每次调用函数时被销毁和声明?

这通常采用以下形式:

class Terrain { 
public:
    // interface
protected:
    // more stuff
private:
    // ... existing variables
    const float d_terrainWidth;
    const float d_terrainLength;
    const float d_startWidth;
    const float d_startLength;
};

然后您可以使用Draw实施中预先计算的不变量。