2013-05-13 3 views
2

현재 렌더링 된 프레임 버퍼에서 조각을 읽는 방법이 있습니까?현재 프레임 버퍼 읽기

그래서 현재 조각이 덮어 쓸 장소에있는 조각에서 색 정보를 읽는 방법을 찾고 있습니다. 이전에 렌더링 된 조각의 정확한 위치입니다.

쉐이더에 특정 EXT_ 확장을 추가하여 gl_FragData 및 gl_LastFragData를 찾았지만 필요한 경우이를 사용하는 방법을 설명 할 수 있습니까?

OpenGL 또는 OpenGL ES 2.0 솔루션을 찾고 있습니다.

편집 :

내가 나를 쉐이더에서 액세스 할 수 & 쓰기 읽기 "균일 한"어떤 종류의를 가질 수 있도록 할 것 솔루션을 찾고 있었다 모든 시간. 유사한 점을 찾고있는 사용자는 OpenGL 버전 4.3+ imagebuffer 저장 유형을 지원합니다. 동시에 읽기 및 쓰기가 가능하며 컴퓨팅 쉐이더와 함께 매우 강력한 도구로 입증되었습니다.

+2

데스크톱 OpenGL 또는 OpenGL ES를 의미합니까? –

+0

그것은 관계가 없습니다. 누구나 할 것이다. –

답변

5

귀하의 질문은 다소 혼란스러워 보입니다.

프래그먼트 셰이더의 프레임 버퍼에서 읽을 수 있는지 묻는 질문 (첫 번째 문장)이 있습니다. 대답은 일반적으로 아니오입니다. 이렇게 할 수있는 an OpenGL ES 2.0 extension이 있지만 일부 하드웨어에서만 지원됩니다. 데스크톱 GL 4.2+에서 arbitrary image load/store을 사용하면 동일한 효과를 얻을 수 있습니다. 그러나 당신은 그 이미지를 더 이상 렌더링 할 수 없습니다. 이미지 저장 기능을 사용하여 데이터를 작성해야합니다.

gl_LastFragData은 매우 간단합니다.이 조각화 쉐이더로 덮어 쓸 프레임 버퍼의 샘플 색상입니다. 사용할 수있는 경우 원하는대로 할 수 있습니다.

질문의 두 번째 부분 (두 번째 단락)은 개의 다른 질문입니다. 프레임 버퍼에 이 쓰여지지 않은 조각에 대해 묻습니다. 조각 쉐이더에서 읽을 수는 없습니다. 이미지를 읽을 수만 있습니다. 조각이 깊이 테스트에 실패하면 데이터가 결코 이미지에 렌더링되지 않습니다. 그래서 당신은 그것을 읽을 수 없습니다.

+0

gl_LastFragData와 그 사용법에 대한 자세한 설명이있는 링크가 있습니까? 의존성이란 무엇입니까? webGL이 지원합니까? 그것은 내가 필요로하는 것처럼 보인다. 그러나 나는 그것을 google 할 수 없다. :/ –

+0

@AbstractAlgorithm : 링크 된 확장 프로그램에서 가져온 것입니다. 의존성은 ... 확장입니다. 확장 기능이 지원되지 않으면 사용할 수 없습니다. 사용법은 ... 쓰고있는 샘플의 색상을 알고 싶다면 읽습니다. 다른 변수와 마찬가지로 그것은 단지 변수 일뿐입니다. 그것은 마법이 아닙니다. 다른 변수에 "사용법"이있는 방식 외에 "사용"이있는 것은 아닙니다. 네가 뭘 찾고 있는지 모르겠다. –

1

대부분의 nVidia 하드웨어에서 GL_NV_texture_barrier 확장을 사용하여 현재 프레임 버퍼에 바인딩 된 텍스처를 읽을 수 있습니다. 그러나 이전 무승 콜에서 생성 된 것보다 더 최근의 데이터를 읽을 수는 없다는 것을 명심하십시오.