2011-04-20 4 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

값이 변경되지 않으면 25fps라고하는 함수에서 값을 몇 번씩 다시 계산해야합니까? 생성자에서 초기화하고'void Terrain :: Draw (..)'에서 사용할 수 있습니다. – Mahesh

답변

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

컴파일러는 요즘 마이크로 최적화가 뛰어나므로 프로그램을 개선하거나 느리게 할 것인지에 대한 결정적인 진술을하는 것이 거의 불가능합니다.

정말 확실하게 벤치마킹해야합니다.