다음을 통해 공유


Direct3D 11로 마이그레이션

이 섹션에서는 이전 버전의 Direct3D에서 Direct3D 11로 마이그레이션하는 방법에 대한 정보를 제공합니다.

Direct3D 9에서 Direct3D 11로

Direct3D 11 API는 Direct3D 10 및 10.1에서 개선된 인프라를 기반으로 합니다. Direct3D 9에서 Direct3D 11로 포팅하는 것은 Direct3D 9에서 Direct3D 10으로 이동하는 것과 비슷합니다. 이러한 노력의 주요 과제는 다음과 같습니다.

  • HLSL에서만 작성된 프로그래밍 가능한 셰이더(D3DX9 대신 D3DCompiler를 통해 컴파일됨)를 위해 모든 고정 함수 파이프라인 사용을 제거합니다.
  • 개별 상태 토글이 아닌 변경할 수 없는 개체를 기반으로 하는 상태 관리입니다.
  • 꼭짓점 버퍼 입력 레이아웃 및 셰이더 서명의 엄격한 연결 요구 사항을 준수하도록 업데이트합니다.
  • 셰이더 리소스 뷰를 모든 텍스처 리소스와 연결합니다.
  • 모든 16비트 색 형식 제거(5/5/5/1, 5/6/5, 4/4/4/4), 모든 24비트 색 형식 제거(8/8/8) 및 엄격한 RGB 색 순서 지정을 포함하여 모든 이미지 콘텐츠를 DXGI_FORMAT 매핑합니다.
  • 전역 상수 상태 사용량을 보다 효율적으로 업데이트된 몇 가지 작은 상수 버퍼로 분리합니다.

Direct3D 9에서 Direct3D 10으로 이동하는 방법에 대한 자세한 내용은 Direct3D 9에서 Direct3D 10 고려 사항을 참조하세요.

Direct3D 10에서 Direct3D 11로

Direct3D 10 또는 10.1 API를 사용하도록 작성된 프로그램을 변환하는 것은 Direct3D 11이 기존 API의 확장이므로 직선 프로세스입니다. 단 하나의 사소한 예외(아래에 언급된 단색 텍스트 필터링)를 사용하면 Direct3D 10/10.1의 모든 메서드와 기능을 Direct3D 11에서 사용할 수 있습니다. 아래 개요는 기존 코드를 업데이트하는 데 도움이 되는 두 API 간의 차이점을 설명합니다. 여기서 주요 차이점은 다음과 같습니다.

  • 렌더링 작업(그리기, 상태 등)은 더 이상 디바이스 인터페이스의 일부가 아니라 리소스 맵/매핑 해제 및 디바이스 쿼리 메서드와 함께 새 DeviceContext 인터페이스의 일부입니다.
  • Direct3D 11에는 Direct3D 10.0과 10.1 간의 모든 향상된 기능 및 변경 내용이 포함되어 있습니다.

열거형 및 정의

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMAT몇 가지 새로운 DXGI 형식이 정의되었습니다.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFRef로 전환 기능은 Direct3D 11에서 지원되지 않습니다.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPED3D_DRIVER_TYPE 열거형 식별자는 D3D10_DRIVER_TYPE 식별자에서 다시 정의되었습니다. 따라서 리터럴 숫자 대신 열거형 식별자를 사용해야 합니다.
D3D_DRIVER_TYPE D3Dcommon.h에 정의되어 있습니다.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAG이러한 플래그 중 상당수가 다시 정의되었으므로 리터럴 번호 대신 열거형 식별자를 사용해야 합니다.
D3D10_FILTER D3D11_FILTER텍스트 필터링 D3D10_FILTER_TEXT_1BIT Direct3D 11에서 제거되었습니다. DirectWrite 참조하세요.
D3D10_COUNTER D3D11_COUNTERDirect3D 11에 대한 공급업체 중립적 카운터는 거의 지원되지 않으므로 제거되었습니다.
D3D10_x D3D11_x 많은 열거형과 정의가 동일하거나, 제한이 크거나, 추가 값이 있습니다.

구조체

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYStream을 추가합니다.
D3D10_BLEND_DESC D3D11_BLEND_DESC렌더링 대상 혼합 상태를 제공하기 위해 이 구조체가 10에서 10.1로 크게 변경되었습니다.
D3D10_BUFFER_DESC D3D11_BUFFER_DESCCompute 셰이더 리소스에 사용할 StructureByteStride를 추가합니다.
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESC이 구조에는 10.1에 대한 추가 조합원이 추가되었습니다.
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESC새 Flags 멤버가 있습니다.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICS몇 가지 새 셰이더 단계 카운터를 추가합니다.
D3D10_x D3D11_x 두 API 간에 많은 구조체가 동일합니다.

인터페이스

Direct3D 10 Direct3D 11
ID3D10Device ID3D11디바이스ID3D11DeviceContext
디바이스 인터페이스는 이 두 부분으로 분할되었습니다. 빠른 포팅의 경우 ID3D11Device::GetImmediateContext를 사용할 수 있습니다.
"ID3D10Device::GetTextFilterSize" 및 "SetTextFilerSize" 메서드가 더 이상 존재하지 않습니다. DirectWrite 참조하세요.
Create*Shader는 ID3D11ClassLinkage에 대한 추가 선택적 매개 변수를 사용합니다.
*SetShader 및 *GetShader는 ID3D11ClassInstance에 대한 추가 선택적 매개 변수를 사용합니다.
CreateGeometryShaderWithStreamOutput 은 배열을 사용하고 여러 출력 스트림 진행에 대해 개수를 계산합니다.
Direct3D 11에서 CreateGeometryShaderWithStreamOutput 의 NumEntries 매개 변수에 대한 제한이 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT 증가했습니다.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefDirect3D 11에서는 Ref로 전환 기능이 지원되지 않습니다.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DMap 및 Unmap 메서드는 ID3D11DeviceContext로 이동되었으며 모든 Map 메서드는 void**가 아닌 D3D11_MAPPED_SUBRESOURCE 사용합니다.
ID3D10Asynchronous ID3D11AsynchronousBegin, End 및 GetData가 ID3D11DeviceContext로 이동되었습니다.
ID3D10x ID3D11x 많은 인터페이스는 두 API 간에 동일합니다.
10/10.1 솔루션 11 솔루션
HLSL 규격(D3D10Compile*, D3DX10Compile*) 및 셰이더 리플렉션 API D3DCompiler(D3DCompiler.h 참조) 참고: Windows 스토어 앱의 경우 D3DCompiler API 는 배포가 아닌 개발에만 지원됩니다.
효과 10 효과 11 은 온라인에서 공유 원본으로 사용할 수 있습니다. 참고: 이 솔루션은 런타임(배포)에 D3DCompiler API가 필요하기 때문에 Windows 스토어 앱에 적합하지 않습니다.
D3DX9/D3DX10 수학 DirectXMath
D3DX10 레거시 DirectX SDK DirectXTex, DirectXTKDirectXMesh 의 D3DX11은 레거시 D3DX10 및 D3DX11 라이브러리의 여러 기술에 대한 대안을 제공합니다.
Direct2DDirectWrite 스타일이 지정된 선 및 글꼴 렌더링에 대한 고품질 지원을 제공합니다.

레거시 DirectX SDK에 대한 자세한 내용은 DirectX SDK는 어디에 있나요?를 참조하세요.

Direct3D 10.1에서 Direct3D 11로

Direct3D 10.1은 Direct3D 10 인터페이스의 확장이며 Direct3D 10.1의 모든 기능은 Direct3D 11에서 사용할 수 있습니다. 10.1에서 11로의 대부분의 포팅은 이미 10에서 11로 이동하는 위에서 해결되었습니다.

열거형 및 정의

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVEL동일하지만 D3DCommon.h에 정의되어 있으며 10level9에 대한 D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 및 D3D_FEATURE_LEVEL_9_3 함께 11클래스 하드웨어에 대한 D3D_FEATURE_LEVEL_11_0 추가
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 및 D3D10_FEATURE_LEVEL_9_3 10.1에서 d3d10_1.h로 추가됨)

구조체

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESC11 버전은 10.1과 동일합니다.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESC11 버전은 10.1과 동일합니다.

인터페이스

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11DeviceID3D11DeviceContext
디바이스 인터페이스는 이 두 부분으로 분할되었습니다. 빠른 포팅의 경우 ID3D11Device::GetImmediateContext를 사용할 수 있습니다.
" ID3D10Device::GetTextFilterSize" 및 "SetTextFilerSize" 메서드가 더 이상 존재하지 않습니다. DirectWrite 참조하세요.
Create*Shader는 ID3D11ClassLinkage에 대한 추가 선택적 매개 변수를 사용합니다.
*SetShader 및 *GetShader는 ID3D11ClassInstance에 대한 추가 선택적 매개 변수를 사용합니다.
CreateGeometryShaderWithStreamOutput 은 배열을 사용하고 여러 출력 스트림 진행을 계산합니다.
CreateGeometryShaderWithStreamOutput의 NumEntries 매개 변수에 대한 제한이 Direct3D 11의 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT 증가했습니다.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Direct3D 11의 새로운 기능

코드가 Direct3D 11 API를 사용하도록 업데이트되면 고려해야 할 수많은 새로운 기능이 있습니다.

  • 명령 목록 및 여러 컨텍스트를 통한 다중 스레드 렌더링
  • 컴퓨팅 셰이더를 사용하여 고급 알고리즘 구현(4.0, 4.1 또는 5.0 셰이더 프로필 사용)
  • 새로운 11클래스 하드웨어 기능:
    • HLSL 셰이더 모델 5.0
    • 동적 셰이더 연결
    • 헐 및 도메인 셰이더를 통한 테셀레이션
    • 새로운 블록 압축 형식: HDR 이미지용 BC6H, 고화질 표준 이미지용 BC7
  • Windows Vista 및 Windows 7에서 저사용 비디오 하드웨어 지원을 위해 DIrect3D 11 API를 통해 많은 셰이더 모델 2.0 및 셰이더 모델 3.0 디바이스에서 렌더링하는 데 10level9 기술을 활용합니다.
  • WARP 소프트웨어 렌더링 디바이스를 활용합니다.

DirectX 11.1의 새로운 기능

Windows 8에는 Direct3D 11.1, DXGI 1.2, WDDM(Windows Display Driver Model) 1.2, 기능 수준 11.1 하드웨어, Direct2D 디바이스 컨텍스트 및 기타 개선 사항을 포함하여 DirectX 그래픽 코드를 구현할 때 고려해야 할 추가 DirectX 그래픽 기능이 포함되어 있습니다.

Direct3D 11.1에 대한 부분 지원은 Windows 7용 플랫폼 업데이트를 통해 Windows 7뿐만 아니라 Windows 7용 플랫폼 업데이트를 통해 사용할 수 있습니다.

DirectX 11.2의 새로운 기능

이 Windows 8.1 Direct3D 11.2, DXGI 1.3 및 기타 개선 사항이 포함됩니다.

Direct3D 11의 프로그래밍 지침

효과(Direct3D 11)