2017-03-07 3 views
0

gbuffer 프레임 버퍼를 디버그하려고합니다. 나는 RGB 구성 요소를 쉽게 blit 할 수 있었지만 혼합하지 않고 alpha 구성 요소를 디버깅 할 수 있도록 alpha를 red 또는 rgb로 그레이 스케일로 다시 매핑하려고합니다. 이것을 할 수있는 방법이 있습니까? 미리 감사드립니다!OPENGL : blit을 사용하여 알파를 빨간색 채널로 옮길 수 있나요?

+0

알파를 읽을 수없는 이유가 있습니까? –

+0

@ Nicol 제 질문은 알파를 다른 채널로 옮기는 것에 관한 것입니다. RGB에 대한 값을 갖고 있다면 알파 채널을 사용하여 해독 할 수 있습니다. –

답변

1

단순히 단일 색상 채널을 표시하려면 glColorMask이면 충분합니다.

당신은 빨강 채널을 표시하고 싶은 말은, 당신이 할 수 있습니다 :

glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); 

당신이 다음 쉐이더를 통해 모든 실행, 그레이 스케일 효과를 2 개 색상 채널을 전환하거나 적용하려면 아마 가장 쉬운 방법입니다 방법 : 프레임 버퍼를 블리트의 그래서 instread

uniform sampler2D frame; 

in vec2 uv; 

out vec4 fragColor; 

void main() 
{ 
    vec4 color = texture(frame, uv); 

    // Grayscale 
    color.rgb = vec3((color.r + color.g + color.b) * 0.33); 

    // Switch red and alpha channels 
    color.ra = color.ar; 

    fragColor = color; 
} 

, 당신은 바인딩 텍스처와 프레임 버퍼와 전체 화면 쿼드을 그립니다.

+0

감사, Vallentin! 채널을 바꾸는 다른 방법은 없지만? 가능하다면 오버 헤드를 최소화하고 싶습니다. 명령을 사용하는 것이 좋을 것 같습니다. –

+0

@KarimAbdelHamid 내가 기억하는 한, 존재하지 않는다. 또한 blitting은 전체 스크린 쿼드를 그리는 것보다 빠르지 만 느려질 수 있습니다. 그래서 평소에 그 일을하는 것이 낫습니다. 결론은 실제로 벤치 마크가되고 실제 성능에 문제가있는 경우입니다. – Vallentin

+0

쿼드 루트로 가기로 결심했습니다. 감사! –

관련 문제