Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[DirectX3D] Brak odpowiedzi po skompilowaniu i uruchomieniu aplikacji

Ostatnio zmodyfikowano 2014-05-23 21:03
Autor Wiadomość
TheReclif
Temat założony przez niniejszego użytkownika
» 2014-05-04 20:28:47
Program kompiluje się, ale nie działa tak, jak powinien działać(program nie odpowiada, a konsola zwraca błąd 255 (0xFF)).
P-109311
RazzorFlame
» 2014-05-05 17:02:42
Nie chodzi o kompilacje tylko o działanie.
Zrób coś na przykładzie tego:
C/C++
int * wskaznik = NULL;
cout << "Wskaznik stworzony" << endl;
jakasfunkcja();
cout << "Jakasfunkcja wywolana" << endl;
* wskaznik = 2421;
cout << "Przypisano wartosc do zmiennej" << endl;
Oczywiście ostatni tekst się tutaj nie wyświetli bo aplikacja przestanie działać poprzez przypisanie za pomocą wskaźnika, który nie posiada poprawnego adresu.
Musisz w podobny sposób u siebie zobaczyć, na której linijce aplikacja sie wysypuje.
P-109332
TheReclif
Temat założony przez niniejszego użytkownika
» 2014-05-05 19:41:48
Zrobiłem tak i błąd znalazłem w funkcji DrawScene:
C/C++
void DrawScene( ID3D11DeviceContext * d3d11DevCon, ID3D11RenderTargetView * renderTargetView, IDXGISwapChain * SwapChain )
{
    float bgColor[] = { 0.0, 0.7, 0.0, 1.0 };
    d3d11DevCon->ClearRenderTargetView( renderTargetView, bgColor );
    SwapChain->Present( 0, 0 );
}
W tych linijkach:
C/C++
d3d11DevCon->ClearRenderTargetView( renderTargetView, bgColor );
SwapChain->Present( 0, 0 );
Za każdym uruchomieniem każdej z tych linijek program reaguje tak samo(to znaczy nie reaguje i nie odpowiada).
Kiedy umieszczę między nimi komentarze, program działa jak podstawowy program okienkowy.
P-109340
xordi
» 2014-05-05 21:24:41
Czegoś nie rozumiem, co ma konkretnie robić ta funkcja?? Bo z tego co widzę to czyści back buffer a potem go wyświetla.

Najpierw powinieneś wyczyścić back buffer (i depth stencil view), potem narysować to co masz do narysowania w back buffer a na samym końcu wykonać

SwapChain->Present(0, 0);

Ja bym szukał gdzieś indziej problemu, najpierw sprawdź czy poprawnie tworzy Ci się device i device context, pomoże Ci w tym macro:

C/C++
#if defined(DEBUG) | defined(_DEBUG)
#ifndef HR
#define HR(x)                                              \
  {                                                          \
  HRESULT hr = (x);                                      \
  if(FAILED(hr))                                         \
  {                                                      \
  DXTraceW(__FILE__, (DWORD)__LINE__, hr, L#x, true); \
  }                                                      \
  }
#endif
#else
#ifndef HR
#define HR(x) (x)
#endif
#endif

I wtedy używasz tego w ten sposób(tutaj w wersji DirectX10):
C/C++
HR( D3D10CreateDeviceAndSwapChain( pAdapter,
m_pCurrentDeviceSettings->DriverType,
NULL,
m_pCurrentDeviceSettings->CreateFlags,
D3D10_SDK_VERSION,
& m_pCurrentDeviceSettings->sd,
& m_pSwapChain,
& m_pDevice ) );

Jeśli pójdzie coś nie tak to dostaniesz piękne okienko :)

Albo zainicjalizuj zerem wskaźnik do SwapChain i po jego stworzeniu przyrównaj do zera, jeśli nadal będzie zerowy tzn. że wystąpił błąd a jeśli będzie różny od zera tzn że jest prawidłowy.

albo (tego nie jestem pewien):

C/C++
assert( SwapChain );
P-109343
TheReclif
Temat założony przez niniejszego użytkownika
» 2014-05-06 17:12:32
Mam małe pytanie: jakiego typu zmienną jest m_pCurrentDeviceSettings?
edit: Pytanie w linijce wyżej jest już nieaktualne
P-109376
TheReclif
Temat założony przez niniejszego użytkownika
» 2014-05-07 22:06:23
Wykonałem test, ale jego wynik mnie zdziwił. Wskaźnik do SwapChain za każdym razem jest pusty, a program zwraca 1 oraz wyświetla Message Boxa z informacją o błędzie krytycznym(wskaźnik jest pusty), ale jest to mechanizm wpisany w program w celu sprawdzenia, co jest tu nie tak.
P-109458
xordi
» 2014-05-23 21:03:51
Przepraszam ze nie odpisywaniem, całkiem o Tobie zapomniałem, masa zajęć. Jeśli jeszcze nie rozwiązałes problemu to udzielam odpowiedzi na pytania m_pCurrentDeviceSettings to jest moja struktura przechowujaca cześć ustawień directx, mój program przy starcie odczytuje ustawienia z pliku xml (jak istnieje), sprawdza czy ustawienia z pliku są poprawne (czy udaje sie stworzyć device itp.) a na koniec zapisuje to do tej struktury i tworzy device

A to okienko które wyskakiwalo to znaczy ze jest jakiś błąd przy tworzeniu device i swap chain taki właśnie był zamysł tego skryptu który Ci wkleiłem, stawiam ze złe wypełniłeś któraś ze struktur do tworzenia device, albo jest tez możliwość ze nie masz zainstalowanego dx11, lub karta go nie obsługuje.

Jak. chcesz to mogę zajrzeć do tego co tam na pisałeś, ale musialbys wysłać źrodła, jak coś to pisz :)
P-110757
1 « 2 »
Poprzednia strona Strona 2 z 2