6

OpenGL ES と OpenGL (Windows) で同じシェーダー ソースが必要です。これを行うには、カスタム データ型を定義し、OpenGL ES 関数のみを使用します。

1 つのアプローチは、次のように定義することです。

#define highp
#define mediump
#define lowp

Windows シェーダー用で、OpenGL ES 用のシェーダーをそのまま記述します。

他のアプローチは、OpenGL ES に対して次のようなカスタム データ型を定義することです。

#define hvec2 highp vec2

Windowsの場合はこのように

#define hvec2 vec2

何が良いと思いますか?この問題に対する他の解決策はありますか?

4

3 に答える 3

5

私の解決策は、両方の API と互換性のあるシェーダー コードを記述し、フラグメント シェーダー ソース コードを OpenGL ES にアップロードするときに、次の行を先頭に追加することでした。

precision mediump float;

これにより、デフォルトの浮動小数点精度が中程度に設定されます。OpenGL ES フラグメント シェーダーには、浮動小数点値のデフォルトの精度レベルがありません。つまり、すべての浮動小数点宣言で精度を指定するか、デフォルトの精度を明示的に設定する必要があります。アプリケーションにとってより理にかなっている場合は、代わりにlowporを使用できます。highp

詳細については、OpenGL ES シェーディング言語仕様のセクション 4.5.3 を参照してください: http://www.khronos.org/files/opengles_shading_language.pdf

#defineシェーダーの精度をより細かく制御する必要がある場合は、このアプローチを独自のアプローチと組み合わせることもできます。

于 2012-11-22T12:00:37.727 に答える
5

http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txtを使用できます

この拡張機能は、OpenGL 3.x にはない OpenGL ES 2.0 の機能のサポートを追加します。これらの機能を有効にすると、アプリケーションを OpenGL ES 2.0 から OpenGL に移植するプロセスが容易になります。

于 2012-07-12T07:39:49.837 に答える