NuGet으로 D3D12 설치하는 이유는?
엄밀히 말해 D3D12는 Windows SDK에 이미 포함되어 있으므로 "설치"가 필요한 건 아닙니다.
하지만 NuGet을 통해 추가적으로 개발에 편리한 헤더, 라이브러리, 샘플, 디버그 툴 등을 받아 쓸 수 있습니다.
대표적인 D3D 관련 NuGet 패키지
패키지 이름 | 설명 |
Microsoft.Direct3D.D3D12 | 최신 Direct3D 헤더/라이브러리 (Agility SDK 포함 가능) |
Microsoft.Direct3D.D3D12.Agility | D3D12 Agility SDK – 최신 GPU 기능을 지원하려면 필요 |
WinPixEventRuntime | PIX용 GPU 마커 삽입용 런타임 |
DirectXTex, DirectXTK | 이미지 로딩 및 텍스처 도구 (DirectXTex, DirectX ToolKit 등) |
언제 NuGet을 써야 할까?
대표적 사용 목적
목적 | 이유 |
D3D12 Agility SDK 사용 | 최신 GPU 기능 (예: Mesh Shader) 활용하려면 NuGet 패키지 필요 |
Visual Studio에 자동 연동 | NuGet은 VS 프로젝트에 자동으로 설정됨 (include/lib 경로 지정 포함) |
Windows SDK 버전과 별개로 최신 DX 기능 테스트 | OS에 종속되지 않고 최신 기능 테스트 가능 |
Direct3D는 왜 vcpkg로 안 받나요?
vcpkg와의 차이점 요약
항목 | NuGet | vcpkg |
목적 | Windows API 확장, 최신 SDK 배포 | 오픈소스 라이브러리 설치 및 빌드 자동화 |
대상 | 주로 Microsoft 내부/OS 플랫폼 레벨 SDK | 주로 게임/그래픽/유틸용 라이브러리 (stb, glm, imgui) |
설치 위치 | Visual Studio 솔루션 내 .nuget 폴더 | 전역 또는 사용자 지정 vcpkg_installed 폴더 |
DirectX 관련 | Agility SDK, PIX Runtime, HLSL Shader Compiler 등 지원 | 일부만 지원 (directxtk, directxmath, d3d12-memory-allocator 등) |
NuGet은 보통 .lib 파일은 자동 연결해주지만,
헤더 파일(.h) 경로는 직접 설정해줘야 할때가 많습니다.
YamYamEngine_CORE 에서 nuget 패키지관리 클릭
D3D12 검색후 아래 sdk 설치 최신버전을 설치하시면 됩니다.
YamYamEngine_Window 위 경로로 헤더경로를 잡아줍니다. 본인이 설치한 Nuget 패키지 버전으로 헤더경로를 잡아줍니다.
yaGraphics.h 에서 dx11을 제거해주신후 12버전을 다음과같이 헤더를 추가하여줍니다.
#include <include\d3dx12\d3dx12.h> 이부분이 잘 추가된후 빌드가 완료되면 세팅 완료
#pragma once
#include "CommonInclude.h"
#include <wrl.h>
#include <d3d12.h>
#include <dxgi1_6.h>
#include <d3dcompiler.h>
// d3dx12는 d3d12 이후 포함
//#include <include/d3dx12/d3dx12.h>
#include <include\d3dx12\d3dx12.h>
#pragma comment(lib, "d3d12.lib")
#pragma comment(lib, "dxgi.lib")
#pragma comment(lib, "d3dcompiler.lib")
#define CB_GETBINDSLOT(name) __CBUFFERBINDSLOT__##name##__
#define CBUFFER(name, slot) static const int CB_GETBINDSLOT(name) = slot; struct alignas(16) name
#define CBSLOT_TRANSFORM 0
//#define DX11_ENABLE
#define DX12_ENABLE
C++
복사
Agility SDK는 무엇인가요?
Agility SDK는 Microsoft에서 만든 새로운 시스템으로,
운영체제를 업데이트하지 않아도 최신 DirectX 12 기능을 사용할 수 있게 해주는 도구입니다.
예를 들어 최신 D3D12 기능(예: Mesh Shader, Shader Model 6.7 등)을 사용하려면
기존에는 Windows 자체를 업데이트해야 했습니다.
하지만 Agility SDK를 프로젝트에 포함시키면,
운영체제와 상관없이 최신 기능을 사용할 수 있습니다.
NuGet으로 Agility SDK를 설치하는 이유는 무엇인가요?
NuGet은 Visual Studio에서 사용하는 패키지 관리 도구입니다.
쉽게 말하면, 필요한 라이브러리나 SDK를 클릭 한 번으로 설치하고 자동으로 설정해주는 도우미입니다.
Agility SDK를 NuGet으로 설치하면 다음과 같은 이점이 있습니다:
1.
최신 d3d12.h 헤더 파일과 라이브러리, DLL을 자동으로 설치합니다.
2.
Visual Studio 프로젝트에 자동으로 연결됩니다.
3.
복잡한 설정 없이 바로 최신 기능을 사용할 수 있습니다.
실제로 실행 시 어떤 일이 일어날까요?
프로그램을 실행하면, 일반적으로는 Windows에 설치된 d3d12.dll을 사용합니다.
하지만 Agility SDK를 사용하면,
실행 파일 옆에 있는 최신 버전의 d3d12.dll을 우선적으로 로딩하게 됩니다.
이렇게 하면 운영체제가 구버전이라도
최신 GPU 기능을 사용할 수 있게 되는 것입니다.
정리
항목 | 설명 |
Agility SDK란? | 운영체제에 상관없이 최신 D3D12 기능을 사용하게 해주는 도구 |
NuGet 설치 이유 | Agility SDK의 헤더, 라이브러리, DLL을 쉽게 설치하고 자동 설정 |
작동 방식 | 실행 시 최신 d3d12.dll을 직접 로딩해서 최신 기능 활성화 |