학습
학습 경로
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Direct3D 9 게임에서 사용하는 기능이 Direct3D 11 및 UWP(유니버설 Windows 플랫폼)로 변환되는 방식을 이해합니다.
또한 DirectX 포트 계획 및 Direct3D 9에서 Direct3D 11로 중요한 변경 내용을 참조하세요.
Direct3D는 여전히 DirectX 그래픽의 기초이지만 DirectX 9 이후 API가 변경되었습니다.
Direct3D 11 기능의 전체 목록은 Direct3D 11 기능 및 Direct3D 11 기능을 참조하세요.
Direct2D(Windows)는 여전히 DirectX 그래픽 및 Windows의 중요한 부분입니다. Direct2D를 사용하여 2D 게임을 그리고 Direct3D 위에 오버레이(HUD)를 그릴 수 있습니다.
Direct2D는 Direct3D를 기반으로 실행됩니다. 2D 게임은 API를 사용하여 구현할 수 있습니다. 예를 들어 Direct3D를 사용하여 구현된 2D 게임은 직교 프로젝션을 사용하고, Z 값을 설정하여 기본 형식의 그리기 순서를 제어하고, 픽셀 셰이더를 사용하여 특수 효과를 추가할 수 있습니다.
Direct2D는 Direct3D를 기반으로 하므로 DXGI 및 디바이스 컨텍스트도 사용합니다. Direct2D API 개요를 참조하세요.
DirectWrite API는 Direct2D를 사용하여 서식이 지정된 텍스트에 대한 지원을 추가합니다. DirectWrite 소개를 참조하세요.
D3DX 및 DXUT는 더 이상 사용되지 않으며 UWP 게임에서 사용할 수 없습니다. 이러한 도우미 라이브러리는 텍스처 로드 및 메시 로드와 같은 작업에 대한 리소스를 제공했습니다.
효과를 포함한 D3DX 유틸리티 라이브러리(D3DX 9, D3DX 10 및 D3DX 11)는 UWP에서 더 이상 사용되지 않습니다. UWP용 모든 DirectX 게임은 효과 없이 HLSL을 사용하여 그래픽 파이프라인을 구동합니다.
Visual Studio는 여전히 내부적으로 FXC를 사용하여 셰이더 개체를 컴파일합니다. UWP 게임 셰이더는 미리 컴파일됩니다. 바이트 코드는 런타임에 로드된 다음 각 셰이더 리소스가 적절한 렌더링 패스 중에 그래픽 파이프라인에 바인딩됩니다. 셰이더는 별도의 셰이더로 이동해야 합니다. HLSL 파일 및 렌더링 기술은 C++ 코드에서 구현해야 합니다.
셰이더 리소스 로드에 대한 자세한 내용은 Direct3D 9에서 UWP로의 단순 포트를 참조하세요.
Direct3D 11에는 Direct3D 기능 수준 11_0 이상이 필요한 셰이더 모델 5가 도입되었습니다. Direct3D 12용 HLSL 셰이더 모델 5 기능을 참조하세요.
XNAMath(또는 D3DXMath)를 사용하는 코드를 DirectXMath로 마이그레이션해야 합니다. DirectXMath에는 x86, x64 및 Arm에서 이식 가능한 형식이 포함됩니다. XNA 수학 라이브러리에서 코드 마이그레이션을 참조하세요.
DirectXMath float 형식은 셰이더와 함께 사용하기에 편리합니다. 예를 들어 XMFLOAT4 및 XMFLOAT4X4 상수 버퍼에 대한 데이터를 편리하게 정렬합니다.
DirectSound는 UWP에 대해 지원되지 않습니다.
DirectInput은 UWP에 대해 지원되지 않습니다.
DirectShow는 더 이상 DirectX API(또는 Windows API)의 일부가 아닙니다. Microsoft 미디어 파운데이션은 공유 화면을 사용하여 Direct3D에 비디오 콘텐츠를 제공합니다. Direct3D 11 비디오 API를 참조하세요.
Microsoft DirectPlay는 더 이상 사용되지 않습니다. 게임에서 네트워크 서비스를 사용하는 경우 UWP 요구 사항을 준수하는 네트워킹 코드를 제공해야 합니다. 다음 API를 사용합니다.
다음 문서는 네트워킹 기능을 추가하고 앱의 패키지 매니페스트에서 네트워킹에 대한 지원을 선언하는 데 도움이 됩니다.
모든 UWP 앱(게임 포함)은 특정 유형의 백그라운드 작업을 사용하여 앱이 일시 중단되는 동안 연결을 유지 관리합니다. 게임이 일시 중단된 상태에서 연결 상태를 기본 확인해야 하는 경우 네트워킹 기본 사항을 참조하세요.
다음 표를 사용하여 코드를 Direct3D 9에서 Direct3D 11로 변환할 수 있습니다. 디바이스 컨텍스트와 디바이스 컨텍스트를 구분하는 데도 도움이 될 수 있습니다.
Direct3D9 | Direct3D 11 등가물 |
---|---|
그래픽 파이프라인 단계는 그래픽 파이프라인에 설명되어 있습니다. |
|
DXGI_PRESENT_TEST 플래그가 설정된 IDXGISwapChain1::Present1을 호출합니다. |
|
ID3D11DeviceContext::DrawIndexed ID3D11DeviceContext::DrawIndexedInstanced ID3D11DeviceContext::DrawInstanced |
|
직접적으로 해당하는 항목이 없습니다. |
|
표준 커서 API를 사용합니다. |
|
LOST 디바이스 및 POOL_MANAGED가 더 이상 존재하지 않습니다. IDXGISwapChain1::Present1은 DXGI_ERROR_DEVICE_REMOVED 반환 값과 함께 실패할 수 있습니다. |
|
IDirect3DDevice9:DrawRectPatch IDirect3DDevice9:MultiplyTransform |
고정 함수 파이프라인은 더 이상 사용되지 않습니다. |
IDirect3DDevice9:CheckDepthStencilMatch IDirect3DDevice9:CheckDeviceFormat |
기능 비트는 기능 수준으로 대체됩니다. 지정된 기능 수준에서는 몇 가지 형식 및 기능 사용 사례만 선택 사항입니다. 이러한 항목은 ID3D11Device::CheckFeatureSupport 및 ID3D11Device::CheckFormatSupport를 통해 확인할 수 있습니다. |
다음 표를 사용하여 Direct3D 9 형식을 DXGI 형식으로 변환합니다.
Direct3D 9 형식 | Direct3D 11 형식 |
---|---|
D3DFMT_UNKNOWN |
DXGI_FORMAT_UNKNOWN |
D3DFMT_R8G8B8 |
사용할 수 없음 |
D3DFMT_A8R8G8B8 |
DXGI_FORMAT_B8G8R8A8_UNORM DXGI_FORMAT_B8G8R8A8_UNORM_SRGB |
D3DFMT_X8R8G8B8 |
DXGI_FORMAT_B8G8R8X8_UNORM DXGI_FORMAT_B8G8R8X8_UNORM_SRGB |
D3DFMT_R5G6B5 |
DXGI_FORMAT_B5G6R5_UNORM |
D3DFMT_X1R5G5B5 |
사용할 수 없음 |
D3DFMT_A1R5G5B5 |
DXGI_FORMAT_B5G5R5A1_UNORM |
D3DFMT_A4R4G4B4 |
DXGI_FORMAT_B4G4R4A4_UNORM |
D3DFMT_R3G3B2 |
사용할 수 없음 |
D3DFMT_A8 |
DXGI_FORMAT_A8_UNORM |
D3DFMT_A8R3G3B2 |
사용할 수 없음 |
D3DFMT_X4R4G4B4 |
사용할 수 없음 |
D3DFMT_A2B10G10R10 |
DXGI_FORMAT_R10G10B10A2 |
D3DFMT_A8B8G8R8 |
DXGI_FORMAT_R8G8B8A8_UNORM DXGI_FORMAT_R8G8B8A8_UNORM_SRGB |
D3DFMT_X8B8G8R8 |
사용할 수 없음 |
D3DFMT_G16R16 |
DXGI_FORMAT_R16G16_UNORM |
D3DFMT_A2R10G10B10 |
사용할 수 없음 |
D3DFMT_A16B16G16R16 |
DXGI_FORMAT_R16G16B16A16_UNORM |
D3DFMT_A8P8 |
사용할 수 없음 |
D3DFMT_P8 |
사용할 수 없음 |
D3DFMT_L8 |
DXGI_FORMAT_R8_UNORM
참고 Direct3D 9 동작을 가져오려면 셰이더에서 .r swizzle을 사용하여 빨간색을 다른 구성 요소에 복제합니다.
|
D3DFMT_A8L8 |
DXGI_FORMAT_R8G8_UNORM
참고 Direct3D 9 동작을 가져오려면 셰이더에서 swizzle .rrrg를 사용하여 빨간색을 복제하고 녹색을 알파 구성 요소로 이동합니다.
|
D3DFMT_A4L4 |
사용할 수 없음 |
D3DFMT_V8U8 |
DXGI_FORMAT_R8G8_SNORM |
D3DFMT_L6V5U5 |
사용할 수 없음 |
D3DFMT_X8L8V8U8 |
사용할 수 없음 |
D3DFMT_Q8W8V8U8 |
DXGI_FORMAT_R8G8B8A8_SNORM |
D3DFMT_V16U16 |
DXGI_FORMAT_R16G16_SNORM |
D3DFMT_W11V11U10 |
사용할 수 없음 |
D3DFMT_A2W10V10U10 |
사용할 수 없음 |
D3DFMT_UYVY |
사용할 수 없음 |
D3DFMT_R8G8_B8G8 |
DXGI_FORMAT_G8R8_G8B8_UNORM
참고 Direct3D 9에서 데이터는 255.0f씩 스케일 업되었지만, 이는 셰이더에서 처리할 수 있습니다.
|
D3DFMT_YUY2 |
사용할 수 없음 |
D3DFMT_G8R8_G8B8 |
DXGI_FORMAT_R8G8_B8G8_UNORM
참고 Direct3D 9에서 데이터는 255.0f씩 스케일 업되었지만, 이는 셰이더에서 처리할 수 있습니다.
|
D3DFMT_DXT1 |
DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB |
D3DFMT_DXT2 |
DXGI_FORMAT_BC1_UNORM & DXGI_FORMAT_BC1_UNORM_SRGB
참고 DXT1과 DXT2는 API/하드웨어 관점에서 동일합니다. 유일한 차이점은 미리 곱한 알파가 사용되는지 여부이며, 애플리케이션에서 추적할 수 있으며 별도의 형식이 필요하지 않습니다.
|
D3DFMT_DXT3 |
DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB |
D3DFMT_DXT4 |
DXGI_FORMAT_BC2_UNORM & DXGI_FORMAT_BC2_UNORM_SRGB
참고 DXT3과 DXT4는 API/하드웨어 관점에서 동일합니다. 유일한 차이점은 미리 곱한 알파가 사용되는지 여부이며, 애플리케이션에서 추적할 수 있으며 별도의 형식이 필요하지 않습니다.
|
D3DFMT_DXT5 |
DXGI_FORMAT_BC3_UNORM & DXGI_FORMAT_BC3_UNORM_SRGB |
D3DFMT_D16 & D3DFMT_D16_LOCKABLE |
DXGI_FORMAT_D16_UNORM |
D3DFMT_D32 |
사용할 수 없음 |
D3DFMT_D15S1 |
사용할 수 없음 |
D3DFMT_D24S8 |
사용할 수 없음 |
D3DFMT_D24X8 |
사용할 수 없음 |
D3DFMT_D24X4S4 |
사용할 수 없음 |
D3DFMT_D16 |
DXGI_FORMAT_D16_UNORM |
D3DFMT_D32F_LOCKABLE |
DXGI_FORMAT_D32_FLOAT |
D3DFMT_D24FS8 |
사용할 수 없음 |
D3DFMT_S1D15 |
사용할 수 없음 |
D3DFMT_S8D24 |
DXGI_FORMAT_D24_UNORM_S8_UINT |
D3DFMT_X8D24 |
사용할 수 없음 |
D3DFMT_X4S4D24 |
사용할 수 없음 |
D3DFMT_L16 |
DXGI_FORMAT_R16_UNORM
참고 D3D9 동작을 가져오려면 셰이더에서 .r swizzle을 사용하여 빨간색을 다른 구성 요소에 복제합니다.
|
D3DFMT_INDEX16 |
DXGI_FORMAT_R16_UINT |
D3DFMT_INDEX32 |
DXGI_FORMAT_R32_UINT |
D3DFMT_Q16W16V16U16 |
DXGI_FORMAT_R16G16B16A16_SNORM |
D3DFMT_MULTI2_ARGB8 |
사용할 수 없음 |
D3DFMT_R16F |
DXGI_FORMAT_R16_FLOAT |
D3DFMT_G16R16F |
DXGI_FORMAT_R16G16_FLOAT |
D3DFMT_A16B16G16R16F |
DXGI_FORMAT_R16G16B16A16_FLOAT |
D3DFMT_R32F |
DXGI_FORMAT_R32_FLOAT |
D3DFMT_G32R32F |
DXGI_FORMAT_R32G32_FLOAT |
D3DFMT_A32B32G32R32F |
DXGI_FORMAT_R32G32B32A32_FLOAT |
D3DFMT_CxV8U8 |
사용할 수 없음 |
D3DDECLTYPE_FLOAT1 |
DXGI_FORMAT_R32_FLOAT |
D3DDECLTYPE_FLOAT2 |
DXGI_FORMAT_R32G32_FLOAT |
D3DDECLTYPE_FLOAT3 |
DXGI_FORMAT_R32G32B32_FLOAT |
D3DDECLTYPE_FLOAT4 |
DXGI_FORMAT_R32G32B32A32_FLOAT |
D3DDECLTYPED3DCOLOR |
사용할 수 없음 |
D3DDECLTYPE_UBYTE4 |
DXGI_FORMAT_R8G8B8A8_UINT
참고 셰이더에서 UINT 값을 가져오지만 Direct3D 9 스타일의 정수 부동 소수점 숫자(0.0f, 1.0f... 255.f)가 필요한 경우 셰이더에서 UINT를 float32로 변환할 수 있습니다.
|
D3DDECLTYPE_SHORT2 |
DXGI_FORMAT_R16G16_SINT
참고 셰이더에서 SINT 값을 가져오지만 Direct3D 9 스타일의 정수 부동 소수점 숫자가 필요한 경우 셰이더에서 SINT를 float32로 변환할 수 있습니다.
|
D3DDECLTYPE_SHORT4 |
DXGI_FORMAT_R16G16B16A16_SINT
참고 셰이더에서 SINT 값을 가져오지만 Direct3D 9 스타일의 정수 부동 소수점 숫자가 필요한 경우 셰이더에서 SINT를 float32로 변환할 수 있습니다.
|
D3DDECLTYPE_UBYTE4N |
DXGI_FORMAT_R8G8B8A8_UNORM |
D3DDECLTYPE_SHORT2N |
DXGI_FORMAT_R16G16_SNORM |
D3DDECLTYPE_SHORT4N |
DXGI_FORMAT_R16G16B16A16_SNORM |
D3DDECLTYPE_USHORT2N |
DXGI_FORMAT_R16G16_UNORM |
D3DDECLTYPE_USHORT4N |
DXGI_FORMAT_R16G16B16A16_UNORM |
D3DDECLTYPE_UDEC3 |
사용할 수 없음 |
D3DDECLTYPE_DEC3N |
사용할 수 없음 |
D3DDECLTYPE_FLOAT16_2 |
DXGI_FORMAT_R16G16_FLOAT |
D3DDECLTYPE_FLOAT16_4 |
DXGI_FORMAT_R16G16B16A16_FLOAT |
FourCC 'ATI1' |
DXGI_FORMAT_BC4_UNORM
참고 기능 수준 10.0 이상이 필요합니다.
|
FourCC 'ATI2' |
DXGI_FORMAT_BC5_UNORM
참고 기능 수준 10.0 이상이 필요합니다.
|
IDirect3DDevice9::SetGammaRamp를 통한 비디오 카드의 하드웨어 감마 램프 제어는 IDXGIOutput::SetGammaControl로 대체됩니다. 감마 보정 사용을 참조하세요.
IDirect3DDevice9::ProcessVertices는 기하 도형 셰이더의 Stream-Output 기능으로 대체됩니다. 스트림 출력 단계 시작을 참조하세요.
사용자 클립 평면을 설정하는 IDirect3DDevice9::SetClipPlane 메서드는 VS_4_0 이상에서 사용 가능한 HLSL SV_ClipDistance 꼭짓점 셰이더 출력 의미 체계(의미 체계 참조) 또는 새 HLSL 클립 평면 함수 특성으로 대체되었습니다(기능 수준 9 하드웨어의 사용자 클립 평면 참조).
IDirect3DDevice9::SetPaletteEntries 및 IDirect3DDevice9::SetCurrentTexturePalette는 더 이상 사용되지 않습니다. 대신 256x1 R8G8B8A8 질감에서 색을 찾는 픽셀 셰이더로 대체합니다.
DrawRectPatch, DrawTriPatch, SetNPatchMode 및 DeletePatch와 같은 고정 기능 공간 분할 함수는 더 이상 사용되지 않습니다. 프로그래밍 가능한 파이프라인 SM5.0 공간 분할 셰이더로 대체합니다(하드웨어에서 공간 분할 셰이더를 지원하는 경우).
IDirect3DDevice9::SetFVF 및 FVF 코드는 더 이상 지원되지 않습니다. D3D11 입력 레이아웃으로 포팅하기 전에 D3D8/D3D9 FVF 코드에서 D3D9 꼭짓점 선언으로 포팅해야 합니다.
직접 지원되지 않는 모든 D3DDECLTYPE 형식은 VS_4_0 이상에서 적은 수의 비트 연산을 통해 꼭짓점 셰이더의 시작 부분에 상당히 효율적으로 에뮬레이트할 수 있습니다.
학습
학습 경로
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization