우선 :
Windows XP SP3, 2GB RAM, Intel 코어 2 듀오 2.33GHz, nVidia 9600GT 1GB RAM. OpenGL 3.3이 완전히 업데이트되었습니다.OpenGL - FBO를 사용하여 루프에서 텍스처를 업데이트하는 중에 성능이 떨어지고 부정확 한 결과가 발생합니다.
내가하고있는 일에 대한 간단한 설명 :
이상적으로 glTexSubImage2D를 사용하여 GL 텍스처 (A)에 하나의 픽셀을 매 프레임마다 배치해야합니다.
그런 다음 shader-FBO-quadfacing 카메라 설정에서 텍스처를 수정하고 원본 이미지를 결과 FBO로 바꿉니다.
물론 FBO 피드백 루프를 원하지 않기 때문에 대신 수정 된 버전을 임시 텍스처 안에 넣고 glCopyTexSubImage2D를 사용하여 별도로 업데이트하십시오.
시퀀스
해주기이다1) glTexSubImage2D 폭 높이 = = 1)와 함께 매 프레임 (GL 이용한 텍스처 (A)의 하나 개의 픽셀을 넣어.
2)이 수정 된 버전 A는 다른 텍스처 (B)로 렌더링되도록 쉐이더 -FBO-quad 설정 내에서 사용/수정됩니다.
3) 결과 텍스처 B는 glCopyTexSubImage2D를 사용하여 A 위로 덮어 씁니다.
4) 반복 ...
이 루프를 반복하면 쉐이더의 색상 값에 매 프레임마다 0.99를 곱하여 느린 페이딩 효과를 얻고 싶습니다.
2 가지가 잘못되었습니다 :
1) 프레임마다 반복되는 페이딩 인자 0.99로 페이딩은 RGB 48,48,48에서 멈 춥니 다. 따라서, 회색 픽셀의 흔적은 완전히 사라지지 않습니다.
2) 프로그램은 100FPS에서 실행됩니다. 아주 나쁜. 왜냐하면 glCopyTexSubImage2D를 주석 처리하면 프로그램이 1000FPS가됩니다 !!
glTexSubImage2D를 주석 처리하고 glCopyTexSubImage2D 만 남겨 두어 1000FPS를 달성합니다. 이 사실은 glTexSubImage2D와 glCopyTexSubImage2D가 병목 현상이 아니라는 것을 분명히하기 위해 (나는 glCopyTexSubImage2D를 2 차 FBO로 대체하여 동일한 결과를 얻으려고했다.)
관측 : 두 명령이 모두 작동하면 병목 현상이 나타납니다!
하드 모드 : PBOs 없음 pls. 소스와 EXE와
링크 :
http://www.mediafire.com/?ymu4v042a1aaha3
FPS 카운트 stdout.txt
에 기록된다 (CodeBlocks 및 SDL 사용).
예상 결과 : 800-1000 FPS에서 완전 검정으로 전체 페이드 아웃 효과.
당신은 여기에 몇 가지 정밀 (양자화) 문제가 발생 : 문제 1로
참고로, glTexSubImage2D의 많은 구현은 느립니다. 그래픽 파이프 라인을 중단하여 프로세스의 후반부에있는 데이터를 수정합니다. 나는 당신의 페이드 아웃을 달성하기 위해 다른 방법을 사용할 것을 강력하게 제안 할 것이다. –
"* shader-FBO-quad setup *"그게 무슨 뜻입니까? 또한이 질문에는 정보가 부족합니다. 예를 들어,'glTexSubImage2D'로 텍스처를 수정한다고 해봅시다. 좋아요,하지만 어떻게 * 그렇게합니까? 이미지의 이미지 형식에 따라 빠른 방법과 느린 방법이 있기 때문입니다. 페이딩 팩터에 관해서 이야기하지만, 당신이 이것을 어떻게 적용하는지 명시하지는 않습니다. 우리는 더 많은 정보가 필요합니다. –
Nicol, 다운로드 링크를 확인하십시오. 나는 코드 copypaste로 질문을 거듭 만들고 싶지 않았다. 페이드는 다음과 같이 적용됩니다 : 픽셀 쉐이더의 texture2D (..., ...). rgb * fadefactor. – user2464424