2011-04-20 85 views
1

作爲一個例子,我在一些OpenGL應用程序以下繪製函數: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次。價值永遠不會改變,他們永遠是一樣的。

我會獲得任何聲明這些函數變量爲靜態?爲了防止它們在每次調用函數時被銷燬和聲明?

+0

如果這些值永不改變,那麼需要在一個稱爲25 fps的函數中一次又一次地計算它們?你可以在構造函數中初始化它們,並在'void Terrain :: Draw(..)'中使用它們。 – Mahesh 2011-04-20 21:18:50

回答

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實現。

1

是的,當你在那裏的時候,也要把它們作爲const。這兩個都可以提示編譯器優化這些函數變量。

雖然差異將如此微小,但您至少需要每秒25,000次呼叫才能達到這個目標。

2

編譯器現在非常擅長微觀優化,所以幾乎不可能就是否會改進或減慢程序做出明確聲明。

你將不得不基準到真正確定。