0

たとえば、GL_LUMINANCE_ALPHA を使用して 2 つのコンポーネント データをテクスチャに転送しています。GL_LUMINACE_ALPHA のような一部の内部フォーマット定数は OpenGL 3.0 (おそらく 4.0?) 以降では廃止されているので、GL_RG や GL_RG8 などを使用してください。

しかし、ターゲットの OpenGL バージョンは 2.0 以降であり、OpenGL 2.0 の仕様には GL_RG/GL_RG8 が含まれていません。この場合、次の 3 つの可能性があると思います。

  1. OpenGL 2.0 のみをサポートするデバイスでもプログラムが正常に動作する場合は、GL_RG/GL_RG8 を使用してください。
  2. OpenGL のバージョンが非常に高いため、古い定数が非推奨になっているデバイスでプログラムが適切に実行できる場合は、古い定数を保持してください。
  3. 実行時に OpenGL のバージョンを検出し、各バージョンの定数を切り替えます。

何を選べばいいですか?3. を取りたくないのは、物事が難しく複雑になるからです。

4

1 に答える 1

3

いいえ、ドライバーが何も知らない OpenGL トークンを使用するのは安全ではありません。幸いなことに、API 呼び出しの大部分は単にGL_INVALID_ENUMエラーを発生させるだけであり、操作は実際に問題が発生する前に早い段階で失敗します。

GL_LUMINANCE_ALPHAジレンマを解決するには、単にトークンを交換するだけでは不十分GL_RG8です。テクスチャの色が(R, R, R, G)になるようにするには、シェーダーでテクスチャ スウィズリングまたはスウィズリングを使用する必要があります。

対象とする OpenGL のバージョンを早い段階で決定するか、個別のコード パスを記述します。しかし、実行時に列挙値を切り替えるほど単純なことは決してありません。

于 2013-09-12T03:26:02.577 に答える