제 목 질문이 있습니다. ID3D11Texture2D* 질문입니다.
작성자 너란봄 등록날짜 2022-03-17 08:24:57 / 조회수 : 178
강좌명 [패키지] 다이렉트X 2D, 3D 통합 패키지
  • 1. Part1 4강 초기화2 부분의 CreateBackBuffer() 함수에서

    지역변수 ID3D11Texture2D*   back_buffer를 만드신 뒤에 

    swap_chain->GetBuffer 함수를 이용해서 back_buffer에 얻어올 버퍼의 주소를 back_buffer에 저장을 하신 것 까지는 이해가 되었는데

    그 뒤에 CreateRenderTargetView()에서 해당 back_buffer가 가지고 있던 ID3D11Texture2D의 주소를 이용해서 RenderTarget View를 만들어주고 더 이상 쓰일일이 없기 때문에 Release 시켜주는 건가요?

    RenderTargetView를 만들 때 내부적으로 계속 참조를 하는 것인지 만드는 순간에만 필요했던 거였는지 궁금했던 것이었습니다. 

    해제해주는 걸로 봐서 정황상 후자일 것 같긴한데.. 확신이 들지 않아 여쭤봅니다. 

     

    Part1 7강 강의에서 Input Assemblur 단계에서 들어온 자료가 Vertex Shader에서 입력받은 자료와 같아야 하기 때문에 InputLayout으로 컴퓨터에게 ~부터 ~까지 무슨 자료형으로 어떻게 처리해라 라고 알려준다고 하셨는데.

    Excute 생성자에서 보면 Vertex Shader를 일부러 먼저 만드셨다고 하십니다. 순서상 InputLayout이 먼저 만들어져야 하는게 아닌가요?

     

    ps 질 좋은 강의 감사합니다. 좋은 하루 되세요!
     

  • 작성자 : 게임클래스 / 등록날짜 : 2022-03-17 15:04:12
  • 안녕하세요 게임클래스 입니다.

    문의주신 질문에 대해 답변 드립니다.

    --------------------------------------------------------------------

    1.지역변수 ID3D11Texture2D*   back_buffer 같은경우
    스왑체인에 바인딩 되어있는 백버퍼 주소를 받아오는역할을 하고있는데 사용이 끝난 백버퍼 해제가아닌
    지역변수로 사용이 다된 인터페이스 사용해제라고 보시면 됩니다.
    실제로 백버퍼 해제이후 다시 겟버퍼를 이용해 주소를 받아오면 같은주소값이 다시 들어오는걸 디버깅으로 확인할수 있으며
    스왑체인과 렌더타겟뷰가 같은 리소스를 사용할때 잠깐 바인딩용도로 백버퍼를 두었다가 해당 지역이 끝나기전에 용도가 더이상 없으므로 Release를 호출하는것일뿐 실제론 해제되진 않습니다.

    간단하게 얘기하면,

    학생분이 생각하고 있는게 맞습니다.

    기본으로 설정되어있는 백버퍼 정보를 사용하기위해 잠깐 사용한 것 뿐이라 필요한 정보를 다쓰고 지워준것 입니다

     

    2. 인풋레이아웃을 만들때는 컴파일된 쉐이더 주소,그리고 쉐이더 크기등이 필요하기 때문에 쉐이더를 먼저 만들어주는 부분입니다. 사실 그렇게 크게 중요하지는 않은 부분인데요. 장난감 로봇을 조립할때 어떤 파츠를 먼저 만들던 그게 중요한게 아니고 최종 조립할때 순서대로 조립하는 것이 중요한 것처럼, 결국 최종 Pipeline에 세팅된 상태에서 지정된 순서대로 조립되기 때문에 누가 먼저 만들어지던 상관이 없습니다.

    ------------------------------------------------------------------------------------------

    감사합니다.

     

댓글 1개
  • 너란봄 [ 2022-03-18 04:30:11 ]
  • 감사합니다!

    혹시 실제 해제가 되지 않는데 굳이 Release를 해준다는 것은 해당 주소를 지역변수를 이용해서 더 이상 사용하지 않겠다. 라고 확인을 받는 것과 같은 맥락으로 생각하면 될까요?

    머리속에 떠오르는 추측은 단순히 크리티컬한 일이 일어나는게 아니라
    더블프리 현상을 막으려고 Release를 안하면 그냥 단순히 레퍼런스 카운트만 하고 있어서 오류를 내보내는것으로 추측하고 있는데... 음... 혼자 그냥 뇌피셜인지... 궁금해서 여쭤봅니다.

    혹여나.. 단원 학습에 중요한 내용이 아닌 걸로 질문으로 번거롭게 하고 있는 거라면... 말씀해주시면 자중하겠습니다.