2016-10-26 8 views
0

공개 GL의 ES2 : 나는 간단한 조각 쉐이더에게 다음 한 조각 쉐이더 최적화

precision lowp float; 
uniform sampler2D u_texture_image; 
uniform sampler2D u_texture_mask; 
uniform lowp float u_blink; 
varying lowp vec2 v_texCoords_image; 
varying lowp vec2 v_texCoords_mask; 
varying lowp float v_shadow; 
void main() { 
    lowp vec4 color= vec4(texture2D(u_texture_image, v_texCoords_image)); 
    lowp vec4 mask_color= vec4(texture2D(u_texture_mask, v_texCoords_mask)); 
    //masking image 
    color = vec4(color.xyz,mask_color.a); 
    //blink 
    color =mix(color,vec4(1.0,1.0,1.0,mask_color.a),u_blink); 
    //check if its a shadow 
    color=mix(color, mask_color*0.3, v_shadow); 
    gl_FragColor = color; 
} 

이 코드와 함께 4400 다각형을 그리고 초당 25 프레임을 (~ onDrawFrame 사이 40ms로 호출)이 아니므로 .This이 충분하지 얻을 전체 장면.
어떻게 든이 코드를 최적화 할 수 있습니까? 내 대상 fps는 30입니다.
또한 조각 쉐이더 코드에 대한 프로파일 링 도구가 있습니까?

ADD : 나는 조각 쉐이더를

private void drawPieces() { 
    //set my shader 
    piecesProgram.useProgram(); 
    //set uniforms 
    piecesProgram.setUniforms(MVPMatrix, textureImageId, textureMaskId,new PointF(2f,2f),0f); 
    //load my vertcices with glVertexAttribPointer 
    piecesMesh.bindPieceData(piecesProgram,false); 
    //draw it with glDrawElements 
    piecesMesh.drawPieces(false); 
    piecesMesh.disableAttributes(piecesProgram); 

} 
+0

를 작성했습니다 당신이 빨리 가고 싶어 코드에서 힙 메모리 (새 PointF (...))를 할당 할 수 없습니다보십시오. 모든 프로그래밍 언어, 모든 플랫폼, 모든 날로 이동합니다. – Andreas

+0

조각 쉐이더 배수 성능인지 테스트하는 일반적인 방법은 2x2 뷰포트를 설정하는 것입니다. 그것을하고, 무슨 일이 일어나는지보고, 결과를 말하십시오. – Andreas

답변

0

를 호출 할 방법이 쉐이더가 복잡한을 보이지 않는다.

어떤 하드웨어를 사용하고 있습니까? 이 셰이더를 사용할 때마다이 셰이더를 다시 컴파일합니까? 어떻게이 쉐이더를 부르시겠습니까?

애플은 GLSL에 대한 좋은 기사 최고의 prectices https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html

+0

드로잉 코드를 추가했습니다. onSurfaceCreated 내에서 프로그램을 컴파일하고 연결합니다. 문제는 쉐이더의 복잡성이 아니라 오버런 영역 (화면 영역의 약 1.5)에 문제가 있다고 생각합니다. BTW : 게시 할 수있는 방법이 있습니까? 코멘트에 코드? – undefined

+0

삼성 갤럭시 탭 a6 – undefined

+0

에서 테스트했습니다. 코드가 좋지 않습니다. android GPU 프로파일 러를 사용하여 GPU가 실제로 병목 현상인지 확인할 수 있습니다. 이 페이지를 살펴보십시오. https://developer.android.com/studio/profile/dev-options-rendering.html –