2016-09-17 1 views
2

좋아, 그래서 첨부 파일 무리와 프레임 버퍼가 있습니다. 첨부 파일은 Color, Bloom, Velocity 및 Depth입니다.OpenGL 3.0 프레임 버퍼는 내가 지정하지 않고 첨부 파일로 출력합니까?

프레임 버퍼를 다음 코드로 선택한 값으로 지우기부터 시작합니다.

// Clear Color Buffer 
float colorDefaultValue[4] = { 0.5, 0.5, 0.5, 1.0 }; 
glClearBufferfv(GL_COLOR, 0, colorDefaultValue); 

// Clear Bloom Buffer 
float bloomDefaultValue[4] = { 0.0, 0.0, 1.0, 1.0 }; 
glClearBufferfv(GL_COLOR, 1, bloomDefaultValue); 

// Clear Depth Buffer 
float depth[1] = { 1.0 }; 
glClearBufferfv(GL_DEPTH, 0, depth); 

그런 다음 메인 쉐이더를 사용하여 장면을 렌더링합니다. 아래 코드에서 알 수 있듯이 출력을 지정했습니다.

// Layouts 
layout (location = 0) out vec4 o_vFragColor; 
layout (location = 1) out vec4 o_vBloomColor; 

그런 다음 조각 쉐이더에서 값을 출력합니다.

o_vFragColor = vec4(color, alpha); 
float brightness = dot(o_vFragColor.rgb, vec3(0.2126, 0.2126, 0.2126)); 
if(brightness > 1.0) 
    o_vBloomColor = vec4(o_vFragColor.rgb, 1.0); 

지금 제 질문은 : 조각이 충분히 밝지 않은 경우 왜 블룸 첨부 파일에 검정색이 출력됩니까? 나는 그것을 출력하기 위해 아직 지정하지 않았지만 어쨌든 그것을 조정합니다. 나는 녹색

// Clear Bloom Buffer 
float bloomDefaultValue[4] = { 0.0, 1.0, 0.0, 1.0 }; 
glClearBufferfv(GL_COLOR, 1, bloomDefaultValue); 

에 꽃 버퍼를 지우고 I 출력을 프래그먼트 쉐이더의 꽃 첨부 파일에 대한 값을 해달라고하면 예를 들어

는, 나는 꽃 버퍼에 검은 얻을. 당신은 다음 이미지를 볼 수 있습니다. 어떤 형상을 그려지지 된 위치 버퍼가 녹색

BloomBuffer

화상의 일부분이다. 검은 부분은 충분히 밝지 않은 기하학을 포함하고 따라서 블룸 버퍼에 아무 것도 출력하지 않아야하는 이미지 부분입니다. 그러나이 경우 분명히 검은 색으로 출력됩니다. 자주색 부분은 밝기 임계 값을 초과하고 의도 한대로 작동하는 조각입니다.

검은 색은 무엇입니까?

답변

0

조건부로 색상 버퍼에 쓸 수 없습니다.

출력 조각에는 쓰기 작업을 수행하지 않았더라도 항상 활성 색상 버퍼에 대한 값이 있습니다. 특정 출력에 쓰지 않으면 사용 된 값은 정의되지 않습니다. 하지만 뭔가가 일 것입니다.

color masking을 기반으로 조건부 작성을 할 수 있습니다. 그러나 이것은 draw-call 당 하나의 것이지 조각 쉐이더에서 할 수있는 것이 아닙니다. employ blending in that color buffer, 0을 사용하여 "쓰지 않음"을 의미하고 1의 알파는 그곳을 대체합니다.

+0

'폐기'로이 작업을 할 수 있습니까? – pleluron

+0

@pleluron : 그러면 조각 전체가 삭제됩니다. * 모든 색상. –

관련 문제