典型的なOpenGLの呼び出しは次のようになります。現在バインドされているバッファなどのOpenGLの状態をキャッシュする必要がありますか、とにかくOpenGLで行いますか?
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_SOME_BUFFER, buffer);
...
私はバッファや他の同様の機能の結合は非常に高価になることができていることを読みました。バインドする前に、現在バインドされているバッファを保存してチェックする価値はありますか?このような:
void StateManager::bindBuffer(GLenum bufType, GLuint bufID) {
if (this->m_currentBuffer[bufType] != bufID) {
glBindBuffer(bufType, bufID);
this->m_currentBuffer[bufType] = bufID;
}
}
これはbufID
がすでにバインドされている場合glBindBuffer
に高価な呼び出しが失われていることであることの背後にある考え方。これは価値あるアプローチですか?私は、OpenGLがこのような最適化をすでに実装している可能性が高いと考えましたが、このパターンは現在いくつかのプロジェクトで使用されていますので、私は疑問を抱いています。私は単に実装するのはかなりシンプルなものだから単純に興味がありますが、あまり違いがなければ、スキップします(早すぎる最適化を避ける)。
あなたはこれを実装するつもりなら、あなたは*正しく*それを実装する必要があります。単一の「現在のバッファ」はありません。各 'bufType'は独自の*現在のバッファを持ちます。 –
もちろん、アイデアはまだ立っています。私は投稿を編集します。 – HexCoder
私は一度似たような質問をしました。しかし、回答ではそれほど満足していないので、重複としてマークしません。 http://stackoverflow.com/questions/22094960/storing-opengl-state – lisyarus