5

私は現在、実行時に生成されたフラットカラーのみのジオメトリを使用して、いくつかの描画ルーチンに取り組んでいます。描画を行うための最小限のGLセットアップを検索している間(画面の解像度と一致しており、iOSですが、他のES 2プラットフォームにも質問が当てはまります)、ほとんどの例で頂点とフラグメントが使用されていることがわかります。シェーダーですが、すべてではありません。

テクスチャやライティングを使用する予定がなく(直接カラーコピー/ブレンドのみ)、ビューマトリックスを操作して実行できない変換を実行する予定がない場合、頂点を設定する必要がありますか?および/またはフラグメントシェーダー?そうでない場合、シェーダーなしのアプローチよりもシェーダーを使用することに利点はありますか?

4

1 に答える 1

7

私の知る限り、はい、それらは必要です。OpenGL ES 2.0 は OpenGL ES 1.x と下位互換性がなく、2 つの主な違いはカスタム シェーダーです。

シェーダーを使用する (2.0) か使用しない (1.x) かの利点は、アプリケーションの現在および長期的な機能によって異なりますが、1.x の固定機能パイプラインは急速に過去のものになりつつあります。最近リリースされた OpenGL ES 3.0 仕様は、2.0 と下位互換性がありますが、1.x とは互換性がありません。

OpenGL ES 2.0 はプログラム可能なパイプラインを使用するため、常に頂点とフラグメント シェーダーを宣言する必要があります。ジオメトリ + 色に対して宣言できる最も単純なものは次のとおりです。

// Vertex Shader

attribute vec3 position;

void main(void)
{
     gl_Position = vec4(position, 1.0);
}

と:

// Fragment Shader

uniform lowp vec3 color;

void main(void)
{
     gl_FragColor = vec4(color, 1.0);
}

出典:クロノスのウェブサイトとドキュメント

「OpenGL ES 2.0 仕様の重要な変更点は、OpenGL 固定関数変換とフラグメント パイプラインがサポートされていないことです。」

于 2013-03-20T01:46:00.487 に答える