2011-03-21 6 views
3

OpenGL ES를 사용하여 성능 향상을 위해 OpenGL에 이미지 처리 작업을 포팅하고 싶습니다. 아주 간단한 thresholding 알고리즘을 사용하고 있지만 이미지에 추가 필터를 결합하고 싶습니다 (예 : 대비).여러 개의 OpenGL 조각 쉐이더 결합

필자가 생각한 첫 번째 생각은 여러 조각 쉐이더를 사용하여이를 완료하는 것입니다. 그러나 나는 이것을 아주 빨리하고 싶다. 그래서 이것은 많은 국가 변화를 일으킬 것인가? 필자가 읽은 유일한 방법은 텍스처를 작업 한 다음 '프로그램 사용'을 여러 번 호출하여이 작업을 수행하는 것입니다.

더 효율적인 방법이 있습니까? 이상적으로는, 단계의 일부로 대비 스트레치 및 히스토그램 균형을 수행하고 싶습니다.

이것을 하나의 셰이더로 결합 할 수 없다면 FBO가 나를 위해 여기에서 효과가 있습니까?

저는 OpenGL에 조금 익숙합니다 (말할 수없는 경우를 대비하여).

감사합니다. 당신이 수동으로 할, 그래서 유일하게 제정신 선택해야 할 경우를 제외하고

사이먼

답변

4

당신은 "병합"조각 쉐이더 사용하여 식 코멘트 렌더링 "핑퐁"수 없습니다. FBO가 2 개 있고, 하나를 그리고 다른 것으로부터 읽은 다음 FBO를 전환하고 반복하면서 조각 셰이더를 렌더링간에 전환합니다.

+0

감사합니다. 샘플 (의사 코드 또는 기타)을 가지고 있습니까? – Simon

+0

샘플 코드는 다음과 같습니다. – Daryl

1

핑퐁 렌더링이 실제로이 목적에 매우 좋습니다! 다음은 실제로 화면에 그리는 '배치'개체가 LibGDX 내에서 작동하는 코드 샘플의 입력 우리는 프레임 버퍼로 캡처 할 수있는 :

FrameBuffer ping = fbo; // the framebuffer containing your rendered texture 
for (ShaderProgram shader : shaders) { 
    pong.clear(); 
    pong.begin(); 
    batch.begin(); 
    batch.setShader(shader); 
    batch.draw(ping.getColorBufferTexture(), 0, 0, width, height); 
    batch.end(); 
    pong.end(); 
    ping = pong; 
} 
batch.begin(); 
batch.draw(pong.getColorBufferTexture(), 0, 0, width, height); 
batch.end(); 

맑은 호출은 내 경우에는 (탁구하기 , 새로운 프레임 버퍼를 만드는 것은 비싸다. 그래서 미리 할당하는 것이 약간의 속도 향상을 제공 할 수있다. 이것은 마티스의 답변에 대한 후속 조치보다 더 많은 답변이지만 그 답은 맞지 않습니다.

관련 문제