2012-02-13 5 views
0

최근 렌더 스크립트를 가져 와서 정말 좋아하지만 문서 및 예제가 부족하여 도움이되지 않습니다. 라이브 월페이퍼와 예제를 사용하여 라이브 배경 화면을 실행하고 텍스처 처리를 위해 고정 함수 쉐이더를 사용했습니다.Renderscript FixedFunction 셰이더는 어떻게 생깁니 까?

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"); 

I 돈을 조각이 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"내에 있습니다.

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와 함께 작동 :

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); 

과 같습니다 여기

이 FixedFunction 설정으로 조각 쉐이더는 것입니다.

FixedFunction 버텍스 쉐이더가 어떤 모습인지 보지 못했지만이 대답을 업데이트 할 것입니다.

0

FountainFBO 샘플을 확인하십시오. 프레임 버퍼 객체로 사용되는 텍스처를 가진 프로그램 조각을 사용합니다.

+0

예하지만이 예제는 여전히 고정 함수 프로그램 단편 만 사용하므로 불행히도 이러한 모양이 어떤 것인지 밝히지는 못합니다. –

관련 문제