私はビデオをレンダリングするためのコードをいくつか持っているので、その OpenGL 側 (レンダリングされたフレームがターゲット テクスチャで使用可能になった後) は非常に単純です。それをターゲットの四角形にレンダリングするだけです。
少し複雑なのは、サードパーティの SDK を使用して UI をレンダリングしているため、それがどのような状態変化をもたらすかがわからないため、フレームをレンダリングするたびに、必要なすべての状態を確認する必要があることです。正しく設定してください。
頂点とテクスチャ座標バッファーを使用して、次のように四角形を描画しています。
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texHandle);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glPushClientAttrib( GL_CLIENT_VERTEX_ARRAY_BIT );
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glVertexPointer(4, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_texCoordBuffer);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glDrawArrays(GL_QUADS, 0, 4);
glPopClientAttrib();
(スキップできるものはありますか? UI ライブラリ内で何が起こっているのかわからなくても?)
今、私は疑問に思います-そして、これはより理論的なものであり、1つのクワッドを描画するだけでは大きな違いはないと思います-理論的には、上記のようにレンダリングする方が速いか、代わりに単純なデフォルトの頂点とフラグメントシェーダーを書くか位置に ftransform() を返すだけで、フラグメントの色にもデフォルトの方法を使用しますか?
シェーダーを使用することで、特定の状態変化をスキップしたり、全体的にスピードアップしたりできるのではないかと思います。または、上記のコード OpenGL を内部的に使用すると、結果はまったく同じになりますか?