Udostępnij przez


Błędy wewnętrzne sterownika (Direct3D 9)

W wersji Direct3D 9 funkcja Direct3D umożliwi sterownikowi zwrócenie kodów błędów, takich jak E_OUTOFMEMORY, D3DERR_OUTOFVIDEOMEMORY i D3DERR_UNSUPPORTEDCOLORARG, dzięki czemu aplikacja będzie mogła odpowiedzieć na nie. Jednak czasami wywołania interfejsu API, które wygenerowały te typy zwracane, są ładowane do buforu poleceń i są wsadowe wysyłane do procesora GPU (zobacz Kontrolowanie środowiska uruchomieniowego i optymalizacji sterowników). W takim przypadku błędy nie mogą być przekazywane do aplikacji, gdy należy wykonać akcję, więc kod błędu jest używany przez środowisko uruchomieniowe, a na obiekcie urządzenia jest wykonywana notatka. Później, gdy aplikacja wywołuje IDirect3DDevice9::P resent, IDirect3DDevice9::P resent zwróci D3DERR_DRIVERINTERNALERROR. Dlatego najlepszym rozwiązaniem dla aplikacji podczas odbierania D3DERR_DRIVERINTERNALERROR z usługi IDirect3DDevice9::P resentna jest zniszczenie i ponowne utworzenie urządzenia.

Jeśli chcesz spróbować debugować dalej, poniżej przedstawiono kilka sugestii dotyczących próby uzyskania informacji o tym, które wywołanie interfejsu API generuje błąd:

  • Ponieważ lista możliwych wartości zwracanych nie jest kompletna, możesz spróbować znaleźć, które wywołanie kończy się niepowodzeniem, otaczając każde wywołanie interfejsu API w następujący sposób:

    TRACE ( "Calling DrawPrimitive" );
    d3ddev->DrawPrim(...);
    TRACE ( "done\n" );
    

    Strumień debugowania danych wyjściowych powinien następnie wyświetlić wywołanie powodujące problem.

  • Ponadto w celach debugowania spróbuj wywołać IDirect3DDevice9::ValidateDevice bezpośrednio przed każdym IDirect3DDevice9::D rawPrimitive, aby sprawdzić, czy istnieje dodatkowy problem ze sterownikiem urządzenia (nieobsługiwana operacja, nieprzydatna kombinacja formatów tekstur itp.).

    Nuta

    IDirect3DDevice9::ValidateDevice należy używać ostrożnie i oszczędnie ze względu na ilość pracy weryfikacji, którą sterownik musi wykonać, aby zwrócić odpowiedź.

     

porady dotyczące programowania