私は最近renderscriptを手に入れ、それを本当に気に入っていますが、ドキュメントと例が不足していることは役に立ちません。私はライブ壁紙と例を使用して自分のライブ壁紙を実行することができましたが、テクスチャリングには固定機能シェーダーを使用しています。
GLSLチュートリアルを見てきましたが、正確に翻訳されていないようです。私はrenderscriptのソースコードを調べましたが、それでもあまり役に立ちませんでした。
これは、renderscriptソースから掘り下げたコードで、fixed関数が実行しているように見えます。
プログラム頂点
shaderString.append("varying vec4 varColor;\n");
shaderString.append("varying vec2 varTex0;\n");
shaderString.append("void main() {\n");
shaderString.append(" gl_Position = UNI_MVP * ATTRIB_position;\n");
shaderString.append(" gl_PointSize = 1.0;\n");
shaderString.append(" varColor = ATTRIB_color;\n");
shaderString.append(" varTex0 = ATTRIB_texture0;\n");
shaderString.append("}\n");
プログラムの断片
shaderString.append("varying lowp vec4 varColor;\n");
shaderString.append("varying vec2 varTex0;\n");
shaderString.append("void main() {\n");
shaderString.append(" lowp vec4 col = UNI_Color;\n");
shaderString.append(" gl_FragColor = col;\n");
shaderString.append("}\n");
フラグメントがvarTex0変数に触れていないように見えるため、これらが最良の例ではないと思います。独自のプログラムフラグメントを作成し、固定関数の頂点シェーダーを使用しようとしました。
これが私のフラグメントシェーダーです:
ProgramFragment.Builder b = new ProgramFragment.Builder(mRS);
String s = "void main() {" +
" gl_FragColor = vec4(1.0,1.0,1.0,0.5);" +
"}";
b.setShader(s);
pf = b.create();
mScript.set_gPFLights(pf);
非常に基本的ですが、テクスチャをバインドする試みは失敗しました。テクスチャに必要な変数がわかりません。
テクスチャを使用する基本的なプログラム頂点とプログラムフラグメントの例を誰かが提供できますか?前もって感謝します。