我最近拿起了 renderscript 并且非常喜欢它,但是缺乏文档和示例并没有帮助。我已经设法使用动态壁纸和示例来运行我自己的动态壁纸,但我一直在使用固定功能着色器进行纹理处理。
我看过 GLSL 教程,但似乎并没有完全翻译过来。我已经查看了 renderscript 源代码,但它仍然没有太多帮助。
这是我从渲染脚本源中挖掘出来的一些代码,看起来像是固定函数在做什么:
程序顶点
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);
非常基本,但任何绑定纹理的尝试都失败了。我不知道纹理需要什么变量。
谁能提供一个使用纹理的基本程序顶点和程序片段的示例?提前致谢。