外部の要件 --- それらを嫌う必要があります...
EGL と OpenGL ES を使用して画面に描画する OpenGL ES ゲームがあります。これにはソースがありません。バイナリ blob として提供されます。ゲームの EGL および OpenGL への呼び出しとプラットフォームの実装との間を仲介するインターフェイス レイヤーを実装しています。
それは正常に動作します。しかし、ゲーム全体の出力を 90 度回転できるようにする必要があるという予期しない外部要件があります。
これを行うための良い(簡単で速い)方法を誰かが提案できますか?頭のてっぺんから、次のことを考えることができます。
ゲームの射影行列に適切な変換を挿入します。これが最速の解決策のようです。しかし、これを確実に行うためのゲームの射影行列の操作について十分な知識があるとは思いません。さらに、プロジェクション マトリックスを通過しないOpenGL 呼び出しを使用して画面にアクセスすると、ゲームが混乱します。(
glReadPixels()
、たとえば。)ゲームにレンダリング コンテキストをオフスクリーン バッファに渡します。そこでレンダリングし、ゲームが呼び出されたときに
eglSwapBuffers()
結果を画面にコピーします。ここでは、テクスチャへのレンダリングが役立ちます。問題: 1 つではなく 2 つの描画パスを効果的に実行しているため、これはパフォーマンスに影響します。また、Render-to-Texture は OpenGL ES で標準化されていません。(私のターゲット プラットフォームである Android は、共有コンテキストを確実にサポートしていません。)カラーバッファにレンダリングして
glReadPixels()
から、データをコピーして画面上でソフトウェア回転を実行するために使用します。問題: 非常に遅く、バッファーのサイズを制御できません (つまり、画面が 640x480 で、90° 回転して描画している場合、ゲームに 480x640 のカラー バッファーを提供したいのです)。他の?
ゲーム固有のハックは、ゲームのバイナリを別のものと交換できるようにする必要があるため、ここではオプションではありません。これは一般的な修正である必要があります。ゲームのソース コードを制御できないため、ゲームを変更することはできません。
助言がありますか?要件を撤回するよう説得しようとする非技術的なもの以外に?