다이렉트 x 예제

스왑 체인의 주요 목적은 렌더링된 이미지를 화면에 표시하는 것입니다. 스왑 체인은 장면을 렌더링하는 데 사용되는 두 개 이상의 버퍼를 저장합니다. 현재 렌더링 중인 버퍼를 백 버퍼라고 하며 현재 제공되는 버퍼를 전면 버퍼라고 합니다. 백 버퍼는 IDXGISwapChain::Present 메서드를 사용하여 전면 버퍼로 바뀝니까. 이전 버전의 DirectX에서 DXGI 프레젠테이션 모델은 비트 블록 전송(bitblt) 모델을 사용하여 렌더링된 이미지를 디스플레이에 표시했습니다. bitblt 프레젠테이션 모델을 사용하는 경우 Direct3D 런타임은 전면 버퍼의 내용을 DWM(데스크톱 창 관리자) 리디렉션 표면에 복사했습니다. 전면 버퍼의 내용이 리디렉션 표면에 완전히 복사된 후에만 이미지가 화면에 표시되었습니다. DirectX 12에서는 리소스를 사용하기 전에 리소스가 올바른 상태인지 확인하는 것은 그래픽 프로그래머의 책임입니다. 리소스 장벽을 사용하여 리소스 를 한 상태에서 다른 상태로 전환하고 해당 리소스 장벽을 명령 목록에 삽입해야 합니다.

예를 들어 스왑 체인의 백 버퍼를 렌더 대상으로 사용하기 전에 RENDER_TARGET 상태로 전환해야 하며 렌더링된 이미지를 화면에 표시하는 데 사용할 수 있으므로 현재 상태로 전환해야 합니다. 그렇다면 왜 COM? 글쎄, DirectX는 실제로 일련의 COM 개체이며 그 중 하나는 Direct3D입니다. Direct3D는 소프트웨어, 하드웨어 또는 모든 웨어를 사용하여 2D 및 3D 그래픽을 실행하는 데 필요한 모든 것을 포함하는 다소 고급 클래스입니다. 왜? 글쎄, 그렇지 않으면 나쁜 일이 될 것이라고 가정 해 봅시다. 기본적으로 Direct3D를 만들지만 닫지 않으면 프로그램 자체가 닫히더라도 다음 재부팅 이후에도 컴퓨터의 백그라운드에서 계속 실행됩니다. 나쁜. 당신이 당신의 게임에 자원이 많은 경우 특히 나쁜. 이 두 인터페이스를 해제하면 모든 것을 후크에서 벗어날 수 있으며 Windows가 메모리를 되찾을 수 있습니다. 명령 목록은 GPU에서 실행되는 명령을 기록하는 데 사용됩니다. 이전 버전의 DirectX와 달리 명령 목록에 기록된 명령의 실행은 항상 연기됩니다. 즉, 명령 목록에 그리기 또는 디스패치 명령을 호출하는 것은 명령 목록이 명령 큐로 전송될 때까지 실행되지 않습니다.

DirectX의 새로운 릴리스의 주요 기능 하이라이트는 드라이버 오버헤드를 줄일 수 있는 Direct3D 12용 고급 저수준 프로그래밍 API를 도입한 것입니다. 이제 개발자는 GPU에 자체 명령 목록 및 버퍼를 구현할 수 있으므로 병렬 계산을 통해 보다 효율적인 리소스 사용률을 구현할 수 있습니다. 수석 개발자 맥스 맥멀렌은 Direct3D 12의 주요 목표는 “휴대 전화, 태블릿 및 PC에서 콘솔 수준의 효율성”을 달성하는 것이라고 밝혔다. [36] Direct3D 12의 출시는 AMD 그래픽 카드용 AMD의 맨틀, iOS 및 macOS용 Apple의 메탈, 크로노스 그룹의 크로스 플랫폼 벌칸 을 포함한 저간접 그래픽 API를 위한 다른 이니셔티브와 함께 제공됩니다.