DirectX 그래픽 디버깅

Visual Studio에는 DirectX 기반 게임 및 응용 프로그램에서 렌더링 문제를 해결하는 데 사용할 수 있는 진단 도구가 포함되어 있습니다.

Visual Studio에서 DirectX 그래픽 디버깅

게임 또는 응용 프로그램에서의 렌더링 문제를 디버깅하는 것은 보통 디버거를 시작하고 코드를 통해 단계를 밟는 것 만큼 쉽지는 않습니다.그래픽 렌더링 문제를 진단할 때는 몇 가지 고유한 문제가 있습니다.예를 들어, 주어진 프레임에서 수백 수천 개의 픽셀이 출력되고 전시된 횟수가 출력된 횟수보다 적다면 진단하려는 문제에 오직 일부 픽셀만이 전시된 것입니다.또한, 모든 렌더링된 프레임 뒤에는 기가바이트 데이터가 있습니다. 데이터가 더욱 복잡해질수록, 이 데이터들은 중앙처리장치(CPU)를 직접 관찰할 수 있는 수백 개 또는 수천 개의 특수 처리 장치 사이에서 작업 분할하는 전용 하드웨어에서 처리됩니다.전통적인 디버거는 이런 종류의 문제를 해결하도록 만들어지지 않았습니다.

Visual Studio의 그래픽 진단 도구는 문제를 표시하는 시각적 요소로 시작하여 관련 셰이더 코드, 그래픽 파이프라인, 그리기 호출, 리소스 및 장치 상태 그리고 응용 프로그램 자체 소스 코드를 추적함으로써 렌더링 문제의 소스를 찾도록 설계되었습니다.

Visual Studio에서 도움을 줄 수 있는 몇 가지 종류의 렌더링 문제입니다.

Hh315751.collapse_all(ko-kr,VS.110).gif장치 상태

모델 및 질감 데이터가 전체 응용 프로그램을 통해 충족시켜야 하는 기대치를 설정하기 때문에 그래픽 장치의 올바른 구성이 중요합니다.예를 들어, 장치 상태를 시계 방향으로 돌아가도록 지정하였다면, 반시계 방향으로 지정된 꼭짓점을 가진 모델은 올바르게 렌더링되지 않습니다. 또한, 만약 깊이 테스트 함수에 '보다 크게'로 설정된 경우에는 더 멀리 있는 개체는 가까이 있는 개체 위에 그려집니다.장치 상태 문제는 소스 코드에서의 문제의 근원이 종종 영향을 받은 개체로부터 멀리 제거되기 때문에 진단하기가 어려울 수 있습니다.

그래픽 진단은 픽셀의 데이터 및 데이터 장치를 검사하여 장치 상태 문제를 축소할 수 있도록 도와줍니다.

Hh315751.collapse_all(ko-kr,VS.110).gif셰이더 버그

코드가 C++ 또는 HLSL(High Level Shader Language)이든지 응용 프로그램 코드에서의 실수는 거의 피할 수 없습니다.그러나, C++ 및 다른 언어가 지원하는 다양한 디버깅을 지원하지 않으므로 HLSL 코드 디버깅은 전통적으로 어렵습니다.

그래픽 진단은 HLSL 코드의 디버깅을 가능하도록 하여 셰이더의 오류를 찾고 수정하도록 도와줍니다.그래픽 로그에 캡처된 정보를 사용하면 HSL 디버거는 셰이더 수준에서 그리기 이벤트를 '재생'할 수 있어서 단계적으로 실행하고 중단점을 설정하며 임시 변수, 매개 변수 및 상수 버퍼의 내용을 검사할 수 있습니다.올바른 일에 집중할 수 있도록 도움을 제공하기 위해 그래픽 진단에서는 그리기 이벤트(그래픽 파이프라인 단계 창을 통해)와 개별 픽셀(그래픽 픽셀 기록)의Graphics Pixel History) HLSL에 진입점을 제공합니다.

Hh315751.collapse_all(ko-kr,VS.110).gif초기화되지 않았거나 잘못된 매개 변수 및 상수

그래픽 응용 프로그램은 매개 변수 및 그래픽 파이프라인 정보를 효과적으로 제공하는 상수 버퍼를 사용하여 사용자 지정 셰이더 코드에서 다른 개체들을 변형하거나 렌더링할 수 있습니다.매개 변수 또는 상수 버퍼 초기화 되지 않은 경우 또는 의도 한 값이 없는 경우 해당 개체는 잘못, 또는 전혀 어쩌면 렌더링 됩니다.매개 변수 또는 상수 버퍼 문제가 항상 일정 한 버퍼 또는 매개 변수를 가진 문제 또는 셰이더 코드의 버그로 인해 오류가 발생 하는지 여부 명확 하 게 때문에 경우 셰이더는 셰이더 상응 하는 버그를 진단 하는 데 어려울 수도 있습니다.

그래픽 진단은 오류에 따른 셰이더를 식별하고 셰이더 코드 검사에 HLSL 디버거를 사용할 수 있도록 하여 매개 변수 및 상수 버퍼 문제를 축소합니다.셰이더 코드가 정확하여 만족하면 HLSL 디버거를 사용하여 의심스러운 매개 변수 또는 상수를 식별하고 그래픽 이벤트 호출 스택을 사용하여 영향을 받는 개체를 렌더링하는 응용 프로그램 코드로 이동하고 매개 변수 또는 상수 버퍼를 마지막으로 설정된 위치를 찾을 수 있습니다.

DirectX 버전 호환성

그래픽 진단은 Direct3D 10, Direct3D 10.1, Direct3D 11, Direct3D 11.1을 사용하는 응용 프로그램을 지원하고, Direct2D를 사용하는 응용 프로그램에 대해 제한된 지원을 제공합니다.이전 버전의 Direct3D, DirectDraw 또는 다른 그래픽 API를 사용하는 응용 프로그램은 지원하지 않습니다.

Hh315751.collapse_all(ko-kr,VS.110).gif제한된 Direct2D 지원

Direct2D API에서 대부분의 기능에 Direct3D API를 사용하기 때문에 그래픽 진단을 사용하여 Direct2D를 사용하는 앱을 디버깅할 수 있습니다.그러나 그래픽 진단은 높은 수준의 Direct2D 이벤트 대신에 현재의 Direct3D를 후킹하므로 Direct3D를 사용하지 않은 Direct2D 이벤트의 세부 정보를 캡처하지 않습니다.또한 Direct2D API 호출 및 결과 Direct3D API 호출 사이의 관계가 항상 명확하지는 않기 때문에 Direct2D 앱을 위한 그래픽 진단을 사용하는 것은 간단한 일이 아닙니다.그러나 Direct2D를 사용하는 응용 프로그램에서 낮은 수준의 렌더링 문제에 대한 정보를 가져오는 데 그래픽 진단을 사용할 수 있습니다.

운영 체제 및 SDK 요구 사항

Windows 8에는 이 문서에서 설명한 그래픽 디버깅 기능에서 요구하는 런타임 구성 요소가 설치됩니다.Windows 7 및 Windows Vista에서 이러한 기능을 사용하려면 다음의 SDK(소프트웨어 개발 키트) 중 하나를 설치해야 합니다.

  • DirectX SDK(2010년 6월)

  • Windows SDK (버전 7.1)

관련 항목

제목

설명

그래픽 진단

그래픽 진단을 사용하여 DirectX 기반 응용 프로그램에서 렌더링 문제를 진단하고 디버깅하는 방법을 설명합니다.

그래픽 진단 예제

그래픽 진단 기능을 사용 하 여 그래픽 정보를 캡처하고 일반적인 렌더링 문제를 진단 하는 방법을 보여 주는 문서에 대 한 링크를 제공 합니다.

Visual Studio의 디버깅

Visual Studio에 디버깅 기능을 소개합니다.

DirectX Graphics and Gaming

DirectX 그래픽 기술을 설명 하는 문서의 링크를 제공 합니다.