게임 개발자를 위한 Direct3D 11 배포
이 문서에서는 필요한 경우 시스템에 Direct3D 11 구성 요소를 배포하는 방법을 설명합니다.
- 개요
- Direct3D 11.3
- Direct3D 11.2
- Direct3D 11.1
- D3D11InstallHelper.dll
- D3D11Install.exe
- 설치 프로그램에 통합
- 디버깅 팁
- 회사 설정
- 관련 문서
개요
Direct3D 11 API는 다중 스레드 렌더링 및 리소스 생성, 컴퓨팅 셰이더, 하드웨어 테셀레이션, BC6H/BC7 텍스처 압축 및 동적 셰이더 링크로 HLSL 셰이더 모델 5.0을 지원하여 기존 Direct3D 10.1 API를 확장합니다. Direct3D 11 구성 요소 외에도 DirectX 11 런타임에는 Direct3D 11, DXGI 1.1, 10level9 기능 수준, WARP10 소프트웨어 렌더링 디바이스, Direct2D, DirectWrite 및 10level9 및 WARP10을 지원하는 업데이트된 Direct3D 10.1 등의 다양한 추가 그래픽 구성 요소가 포함되어 있습니다. 이러한 구성 요소 및 기타 Windows 그래픽 구성 요소에 대한 자세한 내용은 Windows의 그래픽 API를 참조 하세요.
이러한 모든 새로운 그래픽 구성 요소는 Windows 7 및 Windows Server 2008 R2 운영 체제에 기본 제공됩니다. Direct3D 11 API 및 관련 구성 요소는 Windows 업데이트 시스템 업데이트를 사용하여 Windows Vista에 설치할 수도 있습니다. 이 업데이트에는 Windows Vista 및 서비스 팩 2가 필요합니다. 따라서 자동 업데이트를 사용하는 최종 사용자는 모든 Windows 7 사용자와 마찬가지로 Direct3D 11 구성 요소가 이미 설치되어 있을 수 있습니다.
D3D11InstallHelper 샘플은 Direct3D 11 API의 검색을 간소화하고, 최종 사용자의 컴퓨터에 해당하는 경우 시스템 업데이트를 자동으로 설치하고, 최신 서비스 팩이 필요한 경우 수동 프로시저에서 최종 사용자에게 적절한 메시지를 제공하도록 설계되었습니다.
참고 항목
HLSL 컴파일러(D3DCompile*.dll) 및 Direct3D 11용 D3DX 유틸리티 라이브러리(D3DX11*.dll)는 Windows 운영 체제의 어떤 버전에도 빌드되지 않지만 기존 DirectSetup 기술을 사용하여 애플리케이션 설치 관리자의 일부로 배포할 수 있습니다. DirectSetup 사용에 대한 자세한 내용은 게임 개발자용 DirectX 설치를 참조 하세요. "효과 11"은 Direct3D 11 업데이트용 효과에서 공유 원본 지원 라이브러리로 사용할 수 있으며, DXUT 유틸리티 라이브러리와 마찬가지로 앱에 직접 포함할 수 있습니다. 따라서 추가 런타임 재배포 요구 사항이 없습니다.
Direct3D 11.3
Windows 10에는 Direct3D 11.3 API가 기본 제공되어 있습니다. Direct3D 11.3 API의 새로운 기능 목록은 Direct3D 11.3 기능을 참조하세요.
Direct3D 11.2
Windows 8.1 및 Windows Server 2012 R2는 Direct3D 11.2 API가 기본 제공되어 있습니다. Direct3D 11.2 API의 새로운 기능 목록은 Direct3D 11.2 기능을 참조하세요.
Direct3D 11.1
Windows 8 및 Windows Server 2012는 Direct3D 11.1 API 가 기본 제공되어 있습니다. Direct3D 11.1 API에 대한 부분 지원은 Windows 7 또는 Windows Server 2008 R2에서 Windows 7용 플랫폼 업데이트가 설치된 상태에서 사용할 수 있습니다. Windows 7용 플랫폼 업데이트에 대한 자세한 내용은 Windows 7용 플랫폼 업데이트를 참조하세요.
D3D11InstallHelper.dll
D3D11InstallHelper.dll은 Direct3D 11 구성 요소를 검색하고 해당하는 경우 Windows 업데이트 서비스를 통해 시스템 업데이트를 수행하기 위한 핵심 기능을 호스팅합니다. DLL은 메시지 또는 대화 상자를 직접 표시하지 않습니다.
DLL은 다음 진입점으로 구성됩니다.
-
CheckDirect3D11Status
-
이 함수는 필요한 검사 수행하고 이 컴퓨터에서 Direct3D 11의 상태 반환합니다. 이 함수에는 관리자 권한이 필요하지 않습니다.
- D3D11IH_STATUS_INSTALLED 상태 Direct3D 11이 컴퓨터에 이미 설치되어 있고 사용할 준비가 되었음을 나타냅니다.
- D3D11IH_STATUS_NOT_SUPPORTED 이 버전의 Windows가 Direct3D 11 또는 관련 기술을 지원하지 않음을 나타냅니다.
- D3D11IH_STATUS_NEED_LATEST_SP 상태 사용자가 최신 Windows Vista 서비스 팩을 설치해야 했음을 나타냅니다.
- 마지막으로 D3D11IH_STATUS_REQUIRES_UPDATE 상태 시스템에 Direct3D 11이 설치되어 있지 않지만 시스템 업데이트가 이 버전의 Windows에 적용됨을 나타냅니다.
-
DoUpdateForDirect3D11
-
이 함수는 Windows 업데이트 API를 사용하여 해당하는 경우 이 시스템에 Direct3D 11을 설치하기 위한 시스템 업데이트를 수행합니다. 이 함수는 성공하려면 Windows 업데이트 네트워크 연결과 관리 권한이 필요합니다. 선택적 진행률 콜백 함수 및 사용자 컨텍스트 포인터를 사용하고 완료되면 최종 결과 코드를 반환합니다.
- D3D11IH_RESULT_SUCCESS 결과는 시스템 업데이트가 적용되었고 사용할 준비가 되었음을 나타내며, D3D11IH_RESULT_SUCCESS_REBOOT 시스템 업데이트가 완료되기 전에 컴퓨터를 다시 시작해야 했음을 나타냅니다. 이 함수는 시스템 다시 시작을 예약하지 않습니다.
- D3D11IH_RESULT_NOT_SUPPORTED 시스템 업데이트가 이 버전의 Windows에 적용되지 않음을 나타냅니다. CheckDirect3D11Status에서 D3D11IH_STATUS_REQUIRES_UPDATE 상태 받은 후에만 이 함수가 호출되는 경우에는 이 결과가 발생하지 않습니다.
- D3D11IH_RESULT_UPDATE_NOT_FOUND 결과는 Windows 업데이트 서버에서 시스템 업데이트 패키지를 찾을 수 없음을 나타냅니다.
- Windows 업데이트 다운로드 또는 설치가 실패하면 D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED 또는 D3D11IH_RESULT_UPDATE_INSTALL_FAILED 결과로 반환됩니다.
- Windows 업데이트 API에서 네트워크 연결 오류가 반환되면 문제가 간헐적이거나 네트워크 구성 또는 방화벽 설정과 관련될 수 있음을 나타내는 D3D11IH_RESULT_WU_SERVICE_ERROR 결과가 반환됩니다. 업데이트 함수를 다시 시도하면 성공할 수 있습니다.
Windows 업데이트 API에 대한 자세한 내용은 Windows 업데이트 에이전트 API를 참조하세요.
D3D11Install.exe
참고 항목
D3D11Install.exe를 실행하려면 D3D11InstallHelper.dll이 필요합니다.
D3D11Install.exe는 D3D11InstallHelper.dll을 UI 및 최종 사용자 메시지가 포함된 독립 실행형 설치 관리자로 사용할 뿐만 아니라 DLL의 적절한 사용을 위한 예제 역할을 하는 도구입니다. Direct3D 11이 이미 설치되어 있거나, 시스템을 다시 시작하지 않고 시스템 업데이트가 성공적으로 적용되거나, 서비스 팩을 설치해야 하는 경우 또는 이 컴퓨터에서 Direct3D 11을 지원하지 않는 경우 프로세스가 0으로 종료됩니다. 시스템 업데이트가 성공적으로 적용되고 시스템을 다시 시작해야 완료해야 하는 경우 1이 반환됩니다. 다른 오류 조건에 대해 2가 반환됩니다. 이 실행 파일을 실행하려면 관리자 권한이 필요하며 UAC를 사용하도록 설정된 Windows Vista 또는 Windows 7에서 실행할 때 권한 상승을 요청하는 매니페스트가 있습니다. D3D11Install.exe는 Direct3D 11 업데이트를 배포하기 위한 독립 실행형 도구로 사용하거나 설치 관리자가 직접 사용할 수 있습니다.
다음 명령줄 스위치를 지원합니다.
-
/조용한
-
메시지, 프롬프트, 진행률 대화 상자 또는 오류 메시지를 표시하지 않습니다.
-
/수동
-
메시지, 프롬프트 또는 오류 메시지를 표시하지 않지만 진행률 대화 상자가 표시됩니다.
-
/최소
-
최소한의 프롬프트만 표시합니다.
-
/Y
-
표준 및 최소 설치를 위해 필요한 경우 업데이트 설치를 확인하는 메시지를 표시하지 않습니다.
-
/langid decimal
-
최종 사용자 메시지 및 대화 상자 리소스를 표시할 때 사용할 언어 식별자 코드를 강제로 적용합니다. 기본값은 시스템 기본 언어 설정을 사용하는 1024입니다.
-
/우
-
관리되는 서버 또는 다른 비표준 구성에서 실행되는 WSUS(Windows Server Update Services)일 수 있는 시스템 기본값이 아닌 Windows 업데이트 강제로 사용합니다.
설치 프로그램에 통합
Windows용 게임용 지원 쉬운 설치, 기술 요구 사항 3.1을 준수하려면 설치 프로세스 초기에 최종 사용자 프롬프트가 표시되고 UAC 관련 권한 상승 프롬프트가 여러 개인지 확인하기 위해 주의해야 합니다. 이 목표를 달성하기 위한 세 가지 기본 선택은 다음과 같습니다.
- 가장 기본적인 방법은 명령줄 스위치 /minimal을 사용하여 D3D11Install.exe를 실행하는 것입니다. 이 작업은 설치 관리자 Q&A 초기에 수행해야 하며 설치 시 반환 값 1을 사용하여 설치가 끝날 때 다시 시작을 예약해야 함을 나타냅니다. 프로그램을 실행하려면 관리 권한이 필요합니다.
- D3D11InstallHelper.dll을 직접 사용하여 업데이트의 필요성을 감지하여 상태 D3D11IH_STATUS_NEED_LATEST_SP 필요한 최종 사용자 메시지를 제공합니다. 여기서 확인에는 수동 사용자 작업이 필요합니다. D3D11IH_STATUS_NOT_SUPPORTED 상태 결과는 Direct3D 11 관련 자산의 설치를 제어하거나 Direct3D 11 전용 애플리케이션에 대한 오류 조건으로 사용할 수 있지만, 그렇지 않으면 반드시 유용한 최종 사용자 메시지는 아닙니다. 상태 D3D11IH_STATUS_REQUIRES_UPDATE 설치 관리자는 DLL 진입점 DoUpdateForDirect3D11을 직접 사용하여 업데이트를 수행하고 다양한 결과 최종 사용자 메시지를 처리할 수 있습니다. 표준 메시지의 예는 D3D11Install.exe 대화 상자 및 문자열 테이블 리소스를 검사하여 찾을 수 있습니다. 업데이트 진입점에는 관리자 권한이 필요합니다.
- 하이브리드 방법은 D3D11InstallHelper.dll로 검사 상태 것이며, 상태 코드 D3D11IH_STATUS_NEED_LATEST_SP 또는 D3D11IH_STATUS_REQUIRES_UPDATE 경우 D3D11Install.exe를 스위치 /minimal 및 /y로 실행하여 대화 상자를 표시하거나 필요에 따라 업데이트를 수행할 수 있습니다. 이러한 단계는 일반적으로 Q&A 직후 설치 프로세스 초기에 수행해야 하며 실행 파일을 실행하려면 관리 권한이 필요합니다.
InstallShield에 통합
InstallShield의 InstallScript에서 Direct3D 11 배포를 처리하는 작업은 D3D11InstallHelper 샘플을 사용하여 쉽게 수행할 수 있습니다. InstallScript를 사용하여 InstallShield와 통합하는 데 필요한 단계는 다음과 같습니다(이전 섹션에서 설명한 방법 3 사용).
InstallShield 편집기에서 InstallScript 프로젝트를 엽니다.
지원 파일의 프로젝트에 D3D11InstallHelper.dll 및 D3D11Install.exe를 추가합니다.
InstallShield 프로젝트에 파일을 추가하려면
- 설치 디자이너 탭의 왼쪽 탐색 창에서 동작 및 논리 아래의 지원 파일/빌보드를 클릭합니다.
- 언어 독립적을 클릭한 다음 파일 창을 마우스 오른쪽 단추로 클릭하고 파일 삽입을 선택합니다. D3D11InstallHelper.dll 및 D3D11Install.exe를 추가하려면 찾습니다. 이러한 파일의 기본 위치는 SDK root\Samples\C++\Misc\Bin\x86입니다.
InstallScript 탐색기에서 왼쪽 탐색 창의 동작 및 논리 아래에 있는 DLL 또는 실행 파일을 호출하는 InstallScript 파일(일반적으로 Setup.rul)을 클릭합니다.
다음 InstallScript를 위쪽 근처에 있는 파일에 붙여넣습니다.
#define D3D11IH_STATUS_INSTALLED 0 #define D3D11IH_STATUS_NOT_SUPPORTED 1 #define D3D11IH_STATUS_REQUIRES_UPDATE 2 #define D3D11IH_STATUS_NEED_LATEST_SP 3 #define D3D11IH_STATUS_ERROR -1 프로토타입 NUMBER D3D11InstallHelper.CheckDirect3D11StatusIS();
#define D3D11IH_RESULT_SUCCESS 0 #define D3D11IH_RESULT_SUCCESS_REBOOT 1 #define D3D11IH_RESULT_NOT_SUPPORTED 2 #define D3D11IH_RESULT_UPDATE_NOT_FOUND 3 #define D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED 4 #define D3D11IH_RESULT_UPDATE_INSTALL_FAILED 5 #define D3D11IH_RESULT_WU_SERVICE_ERROR 6 #define D3D11IH_RESULT_ERROR -1 프로토타입 NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); '''
다음 InstallScript를 반환 0 바로 앞에 OnFirstUIBefore 함수의 파일에 붙여넣습니다.
Dlg_D3D11: UseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" ); nResult = D3D11InstallHelper.CheckDirect3D11StatusIS(); UnUseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" ); if ( nResult = D3D11IH_STATUS_REQUIRES_UPDATE || nResult = D3D11IH_STATUS_NEED_LATEST_SP) then nResult = LaunchAppAndWait( SUPPORTDIR^"D3D11Install.exe", "/minimal /y", WAIT); if ( nResult < 0 ) then MessageBox("Unable to launch D3D11Install.exe", SEVERE); elseif ( nResult == 1 ) then BATCH_INSTALL = 1; endif; endif;
MSI 패키지에 통합
다음은 MSI 사용자 지정 작업을 사용하여 Direct3D 11 배포를 통합하는 데 필요한 단계에 대한 개략적인 설명입니다(이 항목의 앞부분에서 설명한 방법 3 사용).
- 설치하는 동안 D3D11Install.exe 및 D3D11InstallHelper.dll에 대한 상대 경로가 포함된 RelativePathToD3D11IH라는 MSI 속성 테이블에 속성을 추가합니다(일반적으로 미디어 이미지에 포함됨). 또한 MSI 속성 D3D11IH_STATUS CheckDirect3D11Status에서 반환된 상태 설정합니다(열거형 기호 또는 "ERROR"와 같은 문자열 속성).
- CostFinalize 작업 후에는 D3D11InstallHelper.dll 함수 SetD3D11InstallMSIProperties 를 즉시 사용자 지정 작업으로 호출하여 다른 사용자 지정 작업에 적절한 MSI 속성을 설정합니다.
- 설치 시 D3D11InstallHelper.dll 함수 DoD3D11InstallUsingMSI를 호출하는 InstallFiles 작업 후에 지연된 사용자 지정 작업을 트리거합니다. 사용자 지정 작업은 관리자 권한 컨텍스트에서 실행되도록 msidbCustomActionTypeNoImpersonate 플래그를 설정해야 합니다.
- InstallFinalize 작업 후 필요한 경우 성공적인 재부팅 요청 결과 코드를 처리하는 즉각적인 사용자 지정 작업으로 D3D11InstallHelper.dll 함수 FinishD3D11InstallUsingMSI 를 호출합니다.
이 절차는 Orca 편집기 같은 MSI 편집기를 사용하여 수행할 수 있는 프로세스를 설명하는 다음 지침에 자세히 설명되어 있습니다. 일부 MSI 편집기에서는 이러한 구성 단계 중 일부를 간소화하는 마법사가 있습니다.
D3D11InstallHelper.dll과 통합하기 위해 MSI 패키지를 구성하려면
Orca에서 MSI 패키지를 엽니다.
MSI 패키지의 이진 테이블에 다음 표에 표시된 행을 추가합니다.
이름 데이터 D3D11IH DLL\D3D11InstallHelper.dll에 대한 파일 경로 참고 항목
이 파일은 MSI 패키지에 포함되므로 D3D11InstallHelper.dll을 다시 컴파일할 때마다 이 단계를 수행해야 합니다.
MSI 패키지의 CustomAction 테이블에 다음 표에 표시된 행을 추가합니다.
작업 형식 원본 대상 Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI 다음 표의 Action, Condition 및 Sequence에 대해 표시된 값을 MSI 패키지의 InstallExecuteSequence 테이블에 추가합니다.
작업 조건 시퀀스 주의 Direct3D11SetProps 1016 시퀀스 번호는 CostFinalize 직후에 작업을 배치합니다. Direct3D11DoInstall 설치되지 않음 4004 이 사용자 지정 작업은 모든 사용자에 대해 새로 설치하는 동안에만 발생합니다. 시퀀스 번호는 InstallFiles 뒤와 롤백 후에 작업을 배치합니다. Direct3D11Finish 6615 시퀀스 번호는 InstallFinalize 직후에 작업을 배치합니다. 다음 표에 표시된 행을 MSI 패키지의 속성 테이블에 추가합니다.
속성 값 RelativePathToD3D11IH D3D11Install.exe 및 D3D11InstallHelper.dll을 포함하는 상대 파일 경로 참고 항목
경로에 지정된 위치는 설치 경로에서 지정한 위치(예: "redist\")를 기준으로 합니다.
MSI 패키지를 저장합니다. MSI 패키지 및 Windows Installer에 대한 자세한 내용은 Windows Installer를 참조 하세요.
디버깅 팁
D3D11InstallHelper.dll 및 D3D11Install.exe는 모두 Visual Studio의 디버그 구성을 사용하여 빌드할 수 있으며, 이러한 버전은 표준 Windows 디버그 출력 메커니즘에 메시지를 출력합니다.
회사 설정
D3D11InstallHelper 샘플은 소비자가 게임을 설치하는 가장 일반적인 시나리오인 Windows 업데이트 통해 표준 배포를 위해 설계되었습니다. 그러나 퍼블리셔 및 개발 스튜디오에서 작업하는 많은 게임 개발자는 WSUS(Windows Server Update Services) 기술을 사용하여 소프트웨어 업데이트를 제공하는 로컬 관리 서버가 있는 엔터프라이즈 설정에서 이 작업을 수행합니다. 이러한 유형의 환경에서 로컬 IT 관리자는 회사 네트워크 내의 컴퓨터에서 사용할 수 있는 업데이트를 승인 제어할 수 있으며 표준 소비자 버전의 업데이트 KB 971644 사용할 수 없습니다.
회사/엔터프라이즈 설정에서 DirectX 11을 배포하기 위한 세 가지 기본 솔루션이 있습니다.
- 일부 구성에서는 로컬로 관리되는 WSUS 서버를 사용하지 않고 직접 검사 Windows 업데이트 수 있습니다. 이러한 이유로 D3D11InstallHelper는 /wu 명령줄 스위치를 지원합니다. 그러나 모든 회사 네트워크에서 공용 Microsoft 서버에 대한 연결을 허용하는 것은 아닙니다.
- 로컬 IT 관리자는 Direct3D 11 API를 포함하는 WSUS에서 배포된 엔터프라이즈 지원 업데이트인 KB 971512 승인할 수 있습니다. 이 옵션은 표준 사용자가 완전히 잠긴 환경에서 Direct3D 11 업데이트를 가져올 수 있는 유일한 옵션입니다.
- 또는 KB 971512 수동으로 설치할 수 있습니다.
게이머의 컴퓨터가 로컬로 관리되는 WSUS 서버에서만 업데이트를 받을 수 있는 경우는 매우 드물며, 대규모 조직의 개발자만 이러한 환경에 있을 수 있습니다.