2012-02-13 75 views
0

我最近拿起了renderscript,真的很喜歡它,但缺乏文檔和示例並沒有幫助。我已經設法使用動態壁紙和示例來獲取自己的動態壁紙,但一直在使用固定功能着色器進行貼圖處理。Renderscript FixedFunction着色器的外觀如何?

我已經看過GLSL教程,但它似乎沒有完全翻譯。我研究過renderscript源代碼,但它仍然沒有太多的幫助。

下面是一些代碼,我從那個好像的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); 

非常基本的,但在結合紋理失敗的任何企圖。我不知道紋理需要什麼變量。

任何人都可以提供一個使用紋理的基本程序頂點和程序片段的例子嗎?提前致謝。

回答

0

我終於找到了用於創建GLSL着色器的FixedFunction類的來源。位於「android_frameworks_base/graphics/java/android/renderscript」中。

這裏是片段着色器與這些FixedFunction設置什麼:

ProgramFragmentFixedFunction.Builder builder = new ProgramFragmentFixedFunction.Builder(mRS); 
    builder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 
         ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); //CHANGED 
    ProgramFragment pf = builder.create(); //RENAMED 
    pf.bindSampler(Sampler.WRAP_NEAREST(mRS), 0); 

會是什麼樣子:

ProgramFragment.Builder pfBuilder = new ProgramFragment.Builder(mRS); 
    String s = "varying vec2 varTex0;" + 
         "void main() {" + 
         " lowp vec4 col;" + 
         " vec2 t0 = varTex0;" + 
         " col.rgba = texture2D(UNI_Tex0, t0).rgba;" + 
         " gl_FragColor = col;" + 
        "}"; 
    pfBuilder.setShader(s); 
    pfBuilder.addTexture(TextureType.TEXTURE_2D); 
    pf = pfBuilder.create(); 

這個片段着色器的工作原理與ProgramVertexFixedFunction。

我還沒有看到固定功能頂點着色器的外觀,但我會更新這個答案。

0

查看FountainFBO示例。它使用帶有用作幀緩衝對象的紋理的程序片段。

+0

是的,但該示例仍然只使用固定功能程序片段,因此不幸的是它沒有揭示那些看起來像什麼。 – 2012-02-18 05:35:03