Autor Wątek: Direct3D 11.0 "Okno pojawia się i zaraz znika"  (Przeczytany 776 razy)

Offline FireBoll8

  • Użytkownik

# Lipiec 26, 2010, 23:42:46
Wątpię by komuś chciało się ściągać i sprawdzać kod no ale ;p
Witam tak jak w temacie mam problem z oknem w podstawowej aplikacji Direct3D 11.0

Wspierając się dokumentacją SDK(June 2010) postanowiłem pouczyć się Direct3D 11.0, na początku wychodziło mi całkiem nieźle, fakt że odpowiedzi na wszystkie pytania początkującego tam nie znajdę ale jak na początek to dobre samouczki ;] No więc dzięki dokumentacjom i przykładowemu kodowi z pierwszego samouczka o podstawach Direct3D 11 postanowiłem napisać własną aplikacje która na początek wyświetlała by okienko o określonym kolorze tła ...

Podłączyłem wszystkie lib i pliki header, ustaliłem ścieżki w VC++Directories, napisałem kod i wreszcie dumny tego iż kompilator nie wskazuje żadnych błędów odpaliłem ów program.

Niestety okno pokazał się ledwo na sekundę i znikło z mych oczu. Podejrzewam iż spartaczyłem gdzieś sprawę z funkcją Inicjującą zasoby Direct i wywołującą metody działające na buforach, nie jestem jednak do końca pewny ...

Proszę także o łagodną ocenę, to mój pierwszy program w Direct.

Na wszelki wypadek podam tutaj kod funkcji inicjującej :
HRESULT DeviceInit()
{
HRESULT hr = S_OK;
UINT width = 640;
UINT height = 480;
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd,sizeof(sd));
sd.BufferCount = 1;
sd.BufferDesc.Height = height;
sd.BufferDesc.Width = width;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.OutputWindow = g_hWnd;
sd.Windowed = TRUE;

D3D_FEATURE_LEVEL FeatureLevelRequested = D3D_FEATURE_LEVEL_11_0;
UINT numberLevelsRequested = 1;
    D3D_FEATURE_LEVEL  FeatureLevelsSupported;
       if(FAILED(hr = D3D11CreateDeviceAndSwapChain(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,0,&FeatureLevelRequested,numberLevelsRequested,D3D11_SDK_VERSION,
&sd,&g_pSwapChain,&g_pDevice,&FeatureLevelsSupported,&g_pImmediateDevice )))
   {
   return hr;
   }

ID3D11Texture2D* pBackBuffer;

hr = g_pSwapChain->GetBuffer(0,__uuidof( ID3D11Texture2D),
( LPVOID* )&pBackBuffer );

hr = g_pDevice->CreateRenderTargetView(pBackBuffer,NULL,&g_pRenderTargetView);

g_pImmediateDevice->OMSetRenderTargets(1,&g_pRenderTargetView,NULL);



D3D11_VIEWPORT vp;
vp.Height =(FLOAT) height;
vp.Width =(FLOAT) width;
vp.MaxDepth = 1.0f;
vp.MinDepth = 0.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
g_pImmediateDevice->RSSetViewports(1,&vp);
return S_OK;
}

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Lipiec 26, 2010, 23:48:48
A co pokazuje debug runtime? No i w którym momencie wychodzi? Sprawdzasz rezultaty wywołań metod DX? Twoja karta obsługuje feature level 11?

Offline FireBoll8

  • Użytkownik

# Lipiec 26, 2010, 23:58:05
Bardzo dziękuje za pomoc!! Pomogła zmiana stałej :
D3D_FEATURE_LEVEL FeatureLevelRequested = D3D_FEATURE_LEVEL_11_0;
na:
D3D_FEATURE_LEVEL FeatureLevelRequested = D3D_FEATURE_LEVEL_10_1;

Czyli oznacza to że jednak nie obsługuje FEATURE_LEVEL 11.0
Chciał bym się jeszcze spytać czym jest debug RunTime ?

EDIT DOWN

Dzieki Jeszcze raz za taką dawkę zawsze przydatnej wiedzy :D
« Ostatnia zmiana: Lipiec 27, 2010, 00:53:27 wysłana przez FireBoll8 »

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Lipiec 27, 2010, 00:13:08
To wersja .dllek wypisująca na wyjściu masę informacji o wykonaniu programu. Przydaje się w szukaniu błędów. Dla DX11 wystarczy chyba przełączyć cośtam w panelu kontrolnym DirectX. Więcej info w google ('directx debug runtime').