Direct3D 12 프로그래밍 환경 설정

생산성 높은 Direct3D 12 개발 환경을 구성하는 설치, 도구 및 지원되는 라이브러리를 설명합니다.

개발 환경

Direct3D 12 헤더 및 라이브러리는 Windows 10 SDK의 일부입니다. Direct3D 12를 사용하기 위해 별도의 다운로드 또는 설치가 필요하지 않습니다.

Windows 10 SDK 소프트웨어와 Visual Studio를 설치하면 Direct3D 12의 프로그래밍 환경의 설치가 완료됩니다. Visual Studio 2019는 D3D12 그래픽 디버깅 도구를 포함하므로 권장되지만 이전 버전의 Visual Studio를 사용하여 프로그램을 개발할 수 있습니다.

Direct3D 12 API를 사용하려면 D3d12.h를 포함하고 D3d12.lib에 연결하거나, D3d12.dll에 직접 진입점을 쿼리합니다.

다음 헤더 및 라이브러리를 사용할 수 있습니다. 정적 라이브러리의 위치는 컴퓨터에서 실행되는 Windows 10의 버전(32비트 또는 64비트)에 따라 달라집니다.

헤더 또는 라이브러리 파일 이름 설명 설치 위치
D3d12.h Direct3D 12 API 헤더 %WindowsSdkDir\Include%WindowsSDKVersion%\\um
D3d12.lib 정적 Direct3D 12 API 스텁 라이브러리 %WindowsSdkDir\Lib%WindowsSDKVersion%\\um\arch
D3d12.dll 동적 Direct3D 12 API 라이브러리 %WINDIR%\System32
D3d12SDKLayers.h Direct3D 12 디버그 헤더 %WindowsSdkDir\Include%WindowsSDKVersion%\\um
D3d12SDKLayers.dll 동적 Direct3D 12 디버그 라이브러리 %WINDIR%\System32

지원되는 언어

C++는 Direct3D 12 개발용으로 유일하게 지원되는 언어이며, C# 및 다른 .NET 언어는 지원되지 않습니다.

도우미 구조체

특히 다양한 D3D12 구조체를 쉽게 초기화할 수 있도록 지원하는 많은 도우미 구조체가 있습니다. 이러한 구조체 및 일부 유틸리티 함수는 D3dx12.h 헤더에 있습니다. 이 헤더는 오픈 소스로, 개발자는 필요에 따라 수정할 수 있습니다. D3D12 도우미 라이브러리에서 다운로드한 후 D3D12용 도우미 구조체 및 함수를 참조하세요.

메모리 관리 라이브러리

메모리 관리 도우미 라이브러리는 다운로드하여 사용할 수 있으며 D3D11 메모리 관리 동작과 보다 가깝게 일치하도록 앱에 통합할 수 있습니다. 이 라이브러리는 D3D11 스타일 관리 라이브러리이므로 커밋된 리소스 스타일 할당 전략을 사용하는 앱에서 가장 효과적입니다. 특히, 이 라이브러리는 메모리 제한 시나리오(예: 저사양 메모리 카드, 4k, 울트라 설정 등)에서 뛰어난 성능의 D3D11 메모리 관리를 다시 활용할 수 있도록 하는 디딤돌이 될 수 있습니다. D3D12 API에서는 D3D11보다 더 나은 메모리 효율성을 얻을 수 있는 기술을 지원하지만 이러한 기술은 구현하기 까다롭고 시간도 많이 소요될 수 있습니다.

이 라이브러리는 현재 개발 중이며 앞으로 변경될 수 있습니다. 아래 링크를 사용하여 라이브러리 및 샘플에 액세스합니다.

지원되는 도구 및 라이브러리

다음 라이브러리는 모두 Direct3D 12에서 사용할 수 있습니다.

라이브러리 목적 설명서
DirectX 12용 DirectX 도구 키트 UWP(유니버설 Windows 플랫폼) 앱, Windows 10용 Win32 데스크톱 애플리케이션 및 Xbox One 배타적 앱을 위한 Direct3D 12 C++ 코드를 작성하기 위한 필수적인 도우미 클래스 컬렉션입니다. DirectX12TK wiki
DirectXTex DDS 파일을 읽고 쓰며, Direct3D 런타임 텍스처 리소스에 대해 크기 조정, 형식 변환, MIP 맵 생성, 블록 압축, 높이-맵에서 일반-맵으로의 변환과 같은 다양한 텍스처 콘텐츠 처리 작업을 수행하는 데 사용합니다. DirectXTex wiki
DirectXMesh 일반 프레임 및 탄젠트 프레임 생성, 삼각형 인접 계산 및 꼭짓점 캐시 최적화를비롯한 다양한 기하 도형 콘텐츠 처리 작업을 수행하는 데 사용합니다. DirectXMesh wiki
DirectXMath 벡터, 스칼라, 행렬, 사원수 및 여러 다른 수학 연산을 지원하기 위한 다양한 도우미 클래스 및 메서드입니다. MSDN의 DirectXMath 설명서
UVAtlas isochart 텍스처 아틀라스를 생성 및 압축하는 데 사용합니다. UVAtlas wiki

 

샘플

작업 D3D12 샘플 목록 및 이러한 샘플을 찾아서 실행하는 방법에 대해서는 작업 샘플을 참조하세요.

특정 기능을 사용하기 위한 코드 추가 방법을 연습하려면 D3D12 코드 연습을 참조하세요.

디버그 계층

디버그 계층은 포괄적인 추가 매개 변수 및 일관성 검사(예: 셰이더 연결 및 리소스 바인딩 유효성 검사, 매개 변수 일관성 검사 및 오류 설명 보고)를 제공합니다.

참고 항목

Windows 10의 경우, 디버그 계층을 지원하는 디바이스를 생성하려면 '그래픽 도구' 선택적 기능을 사용 설정합니다. Windows 10 22H2에서 시스템의 설정 패널로 이동합니다. 이전 Windows 10 버전에서는 앱에서 > 앱 &및 기능의 설정 패널로 이동합니다. 선택적 기능 > 기능 추가로 이동하여 '그래픽 도구'를 찾습니다.

디버깅 계층 D3D12SDKLayers.h를 지원하는 데 필요한 헤더는 기본적으로 d3d12.h에서 포함됩니다.

디버그 계층은 메모리 누수를 나열할 때 해당 이름과 함께 개체 인터페이스 포인터의 목록을 출력합니다. 기본 식별 이름은 "<이름 없음>"입니다. ID3D12Object::SetName 메서드를 사용하여 이 이름을 설정할 수 있습니다. 일반적으로 프로덕션 버전에서 이러한 호출을 컴파일해야 합니다.

디버그 계층을 사용하여 오류 및 경고가 없도록 앱을 디버그하는 것이 좋습니다. 디버그 계층은 Direct3D 12 코드 작성을 지원합니다. 또한 디버그 계층을 사용하여 소스에서 불확실한 렌더링 오류 또는 블랙 스크린의 원인을 즉시 확인할 수 있으므로 생산성이 개선될 수 있습니다. 디버그 레이어는 많은 문제에 대한 경고를 제공합니다. 예시:

  • 텍스처를 반드시 설정해야 하지만 픽셀 셰이더에서 읽어와야 합니다.
  • 깊이 출력. 깊이-스텐실 상태가 바인딩되지 않음
  • INVALIDARG를 나타내며 텍스처 생성이 실패했습니다.

컴파일러를 설정하여 D3DCOMPILE_DEBUG를 정의하고, 디버거 정보를 셰이더 Blob에 포함할 것을 HLSL 컴파일러에 지시합니다.

#define D3DCOMPILE_DEBUG 1

모든 디버그 인터페이스 및 메서드에 대한 자세한 내용은 디버그 계층 참조를 참조하세요.

디버그 계층 사용에 대한 개요 정보를 보려면 D3D12 디버그 계층 이해를 참조하세요.

교육용 비디오

DirectX 고급 학습 비디오 자습서에는 그래픽 디버깅 도구, 그래픽 버그 보고에 대한 비디오를 비롯하여 다양한 Direct3D 12 및 Windows 10 관련 비디오가 제공되어 있습니다.

Direct3D 12 이해