1

重複の可能性:
冗長な OpenGL 呼び出しを行う

画面に画像の一部を描画し、実際の画像データを含む 2D テクスチャへのハンドルも格納するというメソッドを持つImageクラスがあるとします。draw

このように draw() メソッドを実装しても問題ありませんか?

// ix, iy, w and h specify which part of the image to draw
void Image::draw(int x, int y, int ix, int iy, int w, int h)
{
   glBindTexture(GL_TEXTURE_2D, m_textureHandle);
   //and then draw the specified part of the image
}

ここでの私の主な関心事は への呼び出しglBindTextureです。テクスチャが既にバインドされている場合、この呼び出しによって何らかのパフォーマンス ヒットが発生しないと仮定するのは正しいですか?

4

1 に答える 1

1

OpenGL、OpenVGなどのいくつかの実装(ドライバー)に取り組んだ後、glBindTextureは実際にはm_textureHandleを「現在のコンテキスト」内の「適切な場所」に格納するだけです。それは難しいことではなく、「多くの費用がかかる」べきではありません。

実行の最後のサイクルをすべて保存しようとしている場合は、必ず変数を追加して、テクスチャがすでにバインドされているかどうかを判断し、必要な場合にのみ実行してください。しかし、一般的に、他の巧妙なことをして5〜10倍の時間を節約できないとしたら、私は非常に驚きます。

于 2012-12-25T02:57:49.797 に答える