OpenGLオブジェクトを独自のクラスでラップする傾向があります。 OpenGLにはバインディングという概念があります。そこではオブジェクトをバインドし、それを使って何かを行い、バインドを解除します。たとえば、テクスチャ:OpenGLオブジェクトラッパーの自動バインド
glBindTexture(GL_TEXTURE_2D, TextureColorbufferName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1000);
glBindTexture(GL_TEXTURE_2D, 0);
ラッピングはこのようなものになります:
texture->bind();
texture->setParameter(...);
texture->setParameter(...);
texture->unBind();
ここでの問題は、私は(バインドを避けたいということです)、およびunbind()関数、およびだけではなく、 setメソッドを呼び出すことができ、GLObjectは自動的にバインドされます。
私は、すべてのメソッドの実装でそれを行うことができます:
public void Texture::setParameter(...)
{
this.bind();
// do something
this.unBind();
}
その後、私はすべての追加方法のためにそれをしなければならないけど!より良い方法はありますか?すべてのメソッドを追加する前後に自動的に行われます。
ユーザが連続して設定したいテクスチャが複数ある場合は、問題が発生する可能性があります。したがって、TextureContextは "0"テクスチャを設定するべきではなく、以前に使用されたテクスチャ(対応するglGet呼び出しで取得)を設定するべきです。 – SigTerm
私はプロフェッショナルなOpenGL開発者ではなく、もっと一般的な(C++プログラミングの)観点から質問に答えようとしました。 – Constantinius