私はOpenGL ES 2.0を学ぼうとしていますが、シェーダーを「管理」するための最も一般的なプラクティスは何だろうと思っています。
私がこの質問をしているのは、私が見つけた例(Android SDKで提供されているAPIデモに含まれている例など)で、通常、GLRendererクラス内のすべてが表示され、私ができるように物事をかなり分けたいからです。たとえば、OpenGL ES 1.0コードと同じように、テクスチャ付きのクワッドを描画したいときに再利用できるGLImageオブジェクト(現時点では2Dのみに焦点を当てています)。私が見つけたほとんどすべての例で、シェーダーはクラス属性として定義されています。例えば:
public class Square {
public final String vertexShader =
"uniform mat4 uMVPMatrix;\n" +
"attribute vec4 aPosition;\n" +
"attribute vec4 aColor;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_Position = uMVPMatrix * aPosition;\n" +
" vColor = aColor;\n" +
"}\n";
public final String fragmentShader =
"precision mediump float;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_FragColor = vColor;\n" +
"}\n";
// ...
}
これらの質問のいくつかが馬鹿げている場合は事前に謝罪しますが、以前にシェーダーを扱ったことはありません。
1)上記のコードは、シェーダー(パブリック最終クラスプロパティ)を定義する一般的な方法ですか?
2)別のShaderクラスが必要ですか?
3)シェーダーがそれらを使用するクラスの外部で定義されている場合、それらの属性の名前(たとえば、次のコードの「aColor」)をどのように知ることができますか?
colorHandle = GLES20.glGetAttribLocation(program, "aColor");