Udostępnij za pośrednictwem


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żna uwagaWaż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

  1. 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.

  2. 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ę.

PoradaPorada

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:

Zobacz też

Zadania

Wskazówki: przechwytywanie informacji graficznych

Koncepcje

Przechwytywanie informacji graficznych