Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL中绘图函数范围内的静态变量?_C++_Function_Opengl_Static Variables - Fatal编程技术网

C++ OpenGL中绘图函数范围内的静态变量?

C++ OpenGL中绘图函数范围内的静态变量?,c++,function,opengl,static-variables,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;

例如,我在一些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
是一个类,我确信step和Terrain width/length实例变量在对象的生命周期内不会改变(它们在第一次调用draw函数之前初始化)

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


将这些函数变量声明为静态变量会有什么好处吗?为了防止每次调用函数时销毁和声明它们?

是,并且在调用函数时,也要将它们设置为const。这两者都可以作为编译器优化这些函数变量的提示


尽管差别如此之小,但你至少需要每秒25000次呼叫才能使之有价值。

是的,当你在那里时,也要让它们保持恒定。这两者都可以作为编译器优化这些函数变量的提示


尽管差异如此之小,但您至少需要每秒25000次调用才能实现这一目标。

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


您必须进行基准测试才能真正确定。

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

你必须进行基准测试才能真正确定

将这些函数变量声明为静态变量会有什么好处吗

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

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

这通常采取以下形式:

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

将这些函数变量声明为静态变量会有什么好处吗

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

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

这通常采取以下形式:

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

如果这些值从未改变,那么在一个称为25 fps的函数中需要反复计算它们吗?您可以在构造函数中初始化它们,然后在
void Terrain::Draw(..)
中使用它们。如果这些值从未更改,那么在一个名为25 fps的函数中需要反复计算它们吗?您只需在构造函数中初始化它们,然后在
void Terrain::Draw(..)
中使用它们。