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

Static variables in the scope of a draw function in OpenGL?

本文关键字:静态 变量 范围内 函数 绘制 OpenGL      更新时间:2023-10-16

作为一个例子,我在一些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是一个类,我确信步骤和地形宽度/长度实例变量在对象的生命周期内永远不会改变(它们在第一次调用draw函数之前被初始化)。

假设我的应用程序以稳定的25fps运行,该函数将每秒被调用25次。这些值永远不会改变,它们永远是相同的。

在将这些函数变量声明为静态时,我将获得任何东西吗?防止它们在每次调用函数时被销毁和声明?

现在的编译器非常擅长微优化,因此几乎不可能对它是否会改进或减慢您的程序做出明确的声明。

在将这些函数变量声明为静态时,我将获得任何东西吗?

这是一个非常小的数据量:不要麻烦,除非你有大量的实例。

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

通常采用

的形式:
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实现中预先计算的不变量

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

虽然差异很小,但至少需要每秒25,000个调用才能使其值得。