Wskazówki: programowe przechwytywanie informacji graficznych
Można użyć Visual Studio programistycznie przechwytywanie informacji grafiki z aplikacji Direct3D diagnozowania grafiki.
Przechwytywanie programowe jest szczególnie przydatna do debugowania programów do cieniowania obliczeniowe w programach, które wywołują nigdy nie Present, lub gdy problem z renderowaniem jest trudne do przewidywania i przechwytywanie w instrukcji testowania, ale można przewidzieć programistycznie przy użyciu informacje o stanie aplikacji w czasie wykonywania.
Przechwytywanie programistycznych w DirectX 11.2
Ta część Instruktaż pokazuje programistyczny przechwytywania w aplikacjach używających technologii DirectX 11.2 interfejsu API, który używa metody niezawodne przechwytywanie.Informacje na temat do użycia w aplikacjach używających wcześniejszych wersji programu DirectX przechwytywania programistycznych, zobacz programowych przechwytywania w DirectX 11.1 i wcześniej później w tej procedury.
W tej części przedstawiono sposób wykonaj następujące zadania:
Trwa przygotowywanie swoją aplikację do używania programistyczny przechwytywania
Trwa pobieranie interfejsu IDXGraphicsAnalysis
Przechwytywanie informacji graficznych
[!UWAGA]
Poprzedni implementacje programistyczny przechwytywania korzystali z Remote Tools for Visual Studio zapewnienie przechwytywania funkcji, ale DirectX 11.2 obsługuje przechwytywanie bezpośrednio.W związku z tym nie będzie trzeba zainstalować zdalnego narzędzi programistycznych przechwytywania w aplikacjach używających interfejsu API programu DirectX 11.2.
Trwa przygotowywanie swoją aplikację do używania programistyczny przechwytywania
Przygotowywanie do użycia przechwytywania programowe aplikacji Direct3D 11.2 jest do dwuetapowego procesu.Najpierw upewnij się, że obejmują pliki nagłówka wymaga programistyczny przechwytywania i definiujesz interfejsu IDXGraphicsAnalysis w kodzie źródłowym swojej aplikacji.
Aby uwzględnić nagłówki programistyczny przechwytywania
Obejmują te nagłówki w pliku źródłowym, gdzie został zdefiniowany interfejsu IDXGraphicsAnalysis:
#include <DXGItype.h> #include <dxgi1_2.h> #include <dxgi1_3.h>
Ważne Nie ma pliku nagłówka vsgcapture.h— które obsługuje programowe przechwytywania w DirectX 11.1 i wcześniej — do wykonania przechwytywania programowe w aplikacji DirectX 11.2.Nagłówek ten jest niezgodny z DirectX 11.2.Jeśli ten plik jest dołączony po d3d11_2 nagłówka jest uwzględniony, kompilator generuje ostrzeżenie.Jeśli vsgcapture.h znajduje się przed d3d11_2, nie można uruchomić aplikacji.
[!UWAGA]
Jeśli czerwca 2010 na tym komputerze jest zainstalowany zestaw SDK programu DirectX i ścieżka include swój projekt zawiera %DXSDK_DIR%include\x86, przenieś go do końca ścieżki include.Egzekwowanie dla swojej ścieżki biblioteki.
Aby zdefiniować interfejsu IDXGraphicsAnalysis
Definiuje interfejs IDXGraphicsAnalysis w tym samym pliku, w którym uwzględnione pliki nagłówków.
interface DECLSPEC_UUID("9f251514-9d4d-4902-9d60-18988ab7d4b5") DECLSPEC_NOVTABLE IDXGraphicsAnalysis : public IUnknown { STDMETHOD_(void, BeginCapture)() PURE; STDMETHOD_(void, EndCapture)() PURE; };
Jako udogodnienie można wykonać następujące kroki w nowym pliku nagłówka i umieścić je w razie potrzeby swojej aplikacji.
Trwa pobieranie interfejsu IDXGraphicsAnalysis
Zanim będzie można przechwytywać grafiki informacji z DirectX 11.2, należy utworzyć interfejs do interfejsu DXGI debugowania.
Aby uzyskać interfejsu IDXGraphicsAnalysis
Aby obsługiwać interfejs IDXGraphicsAnalysis DXGI interfejsu debugowania, należy użyć następującego kodu.
IDXGraphicsAnalysis* pGraphicsAnalysis; HRESULT getAnalysis = DXGIGetDebugInterface1(0, __uuidof(pGraphicsAnalysis), reinterpret_cast<void**>(&pGraphicsAnalysis));
Należy sprawdzić HRESULT zwrócone przez DXGIGetDebugInterface1 do zapewnienia otrzymujemy nieprawidłowy interfejs przed jego użyciem:
if (FAILED(getAnalysis)) { // Abort program or disable programmatic capture in your app. }
[!UWAGA]
Jeśli aplikacja nie jest uruchomiony w ramach diagnostyki grafiki (Alt + F5 w Visual Studio), DXGIGetDebugInterface1 zwraca błąd: E_NOINTERFACE nie obsługuje takiego interfejsu.
Przechwytywanie informacji graficznych
Teraz, kiedy użytkownik ma prawidłowy IDXGraphicsAnalysis interfejsu, można użyć BeginCapture i EndCapture do przechwytywania informacji grafiki.
Uzyskanie informacji grafiki
Aby rozpocząć przechwytywanie informacji grafiki, należy użyć BeginCapture:
... pGraphicsAnalysis->BeginCapture(); ...
Przechwytywanie rozpoczyna się natychmiast po BeginCapture jest wywoływana; go nie oczekuje na następną ramkę rozpocząć.Przechwytywanie kropki, po bieżącej ramki są prezentowane lub podczas wywoływania EndCapture:
... pGraphicsAnalysis->EndCapture(); ...
Przechwytywanie programistycznych w DirectX 11.1 i wcześniej
Ta część Instruktaż pokazuje programistyczny przechwytywania w aplikacjach używających technologii DirectX 11.1 interfejsu API, który używa metody przechwytywania starszej wersji.Informacje na temat do użycia w aplikacjach używających technologii DirectX 11.2 przechwytywania programistycznych, zobacz Programmatic przechwytywane w DirectX 11.2 wcześniej w tej procedury.
Ta część zawiera następujące zadania:
Przygotowanie komputera do przechwytywania programowe
Trwa przygotowywanie swoją aplikację do używania programistyczny przechwytywania
Konfigurowanie nazwę i lokalizację pliku dziennika grafiki
Przy użyciu CaptureCurrentFrame interfejsu API
Przygotowanie komputera do przechwytywania programowe
Remote Tools for wykorzystywany przez program Przechwytywanie interfejsu API Visual Studio umożliwiają korzystanie z funkcji przechwytywania.Komputer, na którym aplikacja zostanie uruchomiony musi mieć zdalnego narzędzia zainstalowane, nawet w przypadku korzystania z przechwytywania programowych na komputerze lokalnym.Visual Studionie musi być uruchomiona podczas wykonywania programistyczny przechwytywania na komputerze lokalnym.
Aby użyć zdalnego przechwytywania interfejsów API w aplikacji, która jest uruchomiona na komputerze, najpierw należy zainstalować Remote Tools for Visual Studio na tym komputerze.Różne wersje narzędzia zdalnego obsługuje innych platform sprzętowych.Informacje na temat instalowania narzędzia remote tools, zobacz strona pobierania narzędzia zdalnego w programie Microsoft — pliki do pobrania witryny sieci Web.
Możesz też Visual Studio instaluje składniki niezbędne do wykonania zdalnego przechwytywania dla aplikacji 32-bitowych.
[!UWAGA]
Ponieważ większość aplikacji Windows — w tym Visual Studio— nie są obsługiwane w Windows 8 dla urządzeń ARM, za pomocą narzędzia Remote Tools for Visual Studio wraz z programem przechwytywania Programistyczny interfejs API jest jedynym sposobem Przechwytywanie diagnostyki grafiki na urządzeniach ARM.
Trwa przygotowywanie swoją aplikację do używania programistyczny przechwytywania
Aby użyć narzędzia diagnostyczne grafiki, należy najpierw przechwytują informacje grafiki, które opiera się na.Informacje można przechwycić programistycznie przy użyciu CaptureCurrentFrame interfejsu API.
Przygotowanie aplikacji do przechwytywania informacji grafiki programistycznie
Upewnij się, że vsgcapture.h nagłówka jest uwzględniony w kodzie źródłowym aplikacji.Mogły zostać uwzględnione w tylko jednej lokalizacji — na przykład w pliku kodu źródłowego, na którym będzie wywoływać programistyczny Przechwytywanie interfejsu API — lub w pliku wstępnie skompilowanej nagłówka do wywołania interfejsu API ze źródła wielu plików kodu.
W kodzie źródłowym aplikacji, zawsze, gdy chcesz przechwycić pozostała część bieżącej ramki, należy wywołać g_pVsgDbg->CaptureCurrentFrame().Ta metoda nie ma parametrów i nie zwraca wartości.
Konfigurowanie nazwę i lokalizację pliku dziennika grafiki
Dziennik grafiki jest tworzony w lokalizacji, która jest definiowana za pomocą DONT_SAVE_VSGLOG_TO_TEMP i VSG_DEFAULT_RUN_FILENAME makra.
Aby skonfigurować nazwę i lokalizację pliku dziennika grafiki
Aby zapobiec dziennika grafiki zapisywana do katalogu tymczasowego przed #include <vsgcapture.h> wiersz, dodaj to:
#define DONT_SAVE_VSGLOG_TO_TEMP
Można określić tę wartość do zapisania w dzienniku grafiki do lokalizacji, która jest względem katalogu roboczego lub ścieżkę absolutną Jeśli definicja VSG_DEFAULT_RUN_FILENAME jest ścieżką bezwzględną.
Zapisz dziennik grafiki do innej lokalizacji lub nadaj inną nazwę pliku, przed #include <vsgcapture.h> wiersz, dodaj to:
#define VSG_DEFAULT_RUN_FILENAME <filename>
Jeśli nie wykonasz tego kroku, nazwa pliku jest default.vsglog.Jeśli nie została zdefiniowana DONT_SAVE_VSGLOG_TO_TEMP, a następnie lokalizację pliku są określane względem katalogu tymczasowego; w przeciwnym razie jest względem katalogu roboczego lub w innej lokalizacji, jeśli określony bezwzględnej nazwy pliku.
Dla Windows Store aplikacji, lokalizację katalogu tymczasowego właściwymi dla każdego użytkownika i aplikacji i zwykle znajduje się w lokalizacji, takich jak C:\users\nazwy użytkownika\AppData\Local\Packages\Nazwa rodziny pakietu\TempState\.Dla aplikacji komputerowych, lokalizację katalogu tymczasowego właściwymi dla każdego użytkownika i zwykle znajduje się w lokalizacji, takich jak C:\Users\nazwy użytkownika\AppData\Local\Temp\.
[!UWAGA]
Do zapisu w określonej lokalizacji, musi mieć uprawnienia do zapisywania w tej lokalizacji. w przeciwnym razie wystąpi błąd.Należy pamiętać, że Windows Store aplikacje są bardziej ograniczony niż aplikacje komputerowe o gdzie może zapisywać dane i może być wymagana dodatkowa konfiguracja można zapisać do określonych lokalizacji.
Przechwytywanie informacji grafiki
Po przygotowany do przechwycenia programowe aplikacji i opcjonalnie skonfigurować lokalizację i nazwę grafiki pliku dziennika, tworzenie aplikacji i uruchom lub debugowanie go do przechwytywania danych; Nie uruchamiaj diagnostyki grafiki z Visual Studio przy użyciu programowych przechwytywania interfejsu API.Dziennik grafiki są zapisywane w określonej lokalizacji.Jeśli chcesz zachować tę wersję dziennika, umieści ją w innej lokalizacji. w przeciwnym razie zostaną zastąpione, gdy ponownie uruchom aplikację.
Porada |
---|
Można nadal przechwycić informacje grafiki ręcznie podczas korzystania z przechwytywania programistyczny — z aplikacji w fokus, wystarczy nacisnąć klawisz ekranu Drukuj.Ta metoda służy do przechwytywania grafiki dodatkowe informacje, które nie jest przechwytywana przez programistyczny przechwytywania interfejsu API. |
Następne kroki
Niniejszy przewodnik pokazano sposób programistycznie przechwytywanie informacji grafiki.W następnym kroku rozważ tej opcji:
- Dowiedz się, jak analizować przechwycone grafiki informacje przy użyciu narzędzia diagnostyczne grafiki.Zobacz Diagnostyka grafiki — Przegląd.
Zobacz też
Zadania
Wskazówki: przechwytywanie informacji graficznych