• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Transition 질문있읍니다.

21.12.14 00:39 작성 조회수 147

0

CommandQueue::RenderBegin 함수와 RenderEnd 함수에서 Transition함수를 호출하는데, 이 Transition 함수가 정확히 무엇을 하는지 잘 모르겠습니다.

일단 제가 이해한 것은 이렇습니다.

swapchain에 버퍼가 2개 있습니다. 각 버퍼에는 리소스가 담겨있으며,  각 버퍼를 0번 버퍼, 1번 버퍼라고 하겠습니다.  하나는 현재 화면에 출력하는 용도(이하 Present), 다른 하나는 GPU가 다음 화면에 출력할 내용을 기록하는 용도(이하 RenderTarget) 입니다.

현재 0번 버퍼는 Present, 1번 버퍼는 RenderTarget로 사용되고 있는 상태팁니다. 이 때, RenderBegin의 Transition 함수 호출문은 Present 버퍼를 RenderTarget 버퍼로 바꿉니다. 즉 0번 버퍼를 RenderTarget으로 바꿉니다. 

그렇다면 여기서 의문점이 생깁니다. 

Present 버퍼의 상태를 바꿀 건데 어째서 Transition 함수에 첫 번째 인자로  RenderTarget 버퍼를 넘겨주었나요? 

또, 0번 버퍼를 RenderTarget으로 바꾸면 0번, 1번 버퍼 둘다 RenderTarget인 상태가 맞나요? 

만약 그렇다면, RenderEnd 에서 Transition 함수는 RenderTarget  버퍼를 Present 버퍼로 바꾸는데, 0번과 1번 둘 중 어떤 RenderTarget 버퍼를 바꿔주나요? 

아니라면 제가 잘못 이해하고 있는 부분은 어떤 것인가요??

 

질문이 길었는데 읽어주셔서 감사합니다.

답변 1

답변을 작성해보세요.

0

해당 부분은 후반에 또 나오므로 일단은 넘어가시기 바랍니다.
간단히 설명드리면, 1개는 화면 출력 (Present) 용도로,
다른 한 개는 화면을 그리는 (RenderTarget) 용도로 활용되고
동시에 두개를 RT으로 활용하진 않습니다.
매 프레임마다 용도를 뒤바꿔주며 교체해주게 되는데요.
Transition은 이렇나 용도 변경이라고 보시면 됩니다.
그냥 1개로 화면 출력 / 버퍼 용도로 공유하지 않는 이유는
출력되고 있는 화면에 그림을 그릴 시 화면에 잔상이 남을 수 있기 때문입니다.