witam! rozpoczynam programowanie w directx i niestety kod, który ma za zadanie nie wyświetla niebieskiego tła... progeam się kompiluje, ale ma domyślne tło windows'owe.
nie mogę doszukać się błędu. Co może być nie tak? Za każdą pomoc z góry dzięki ;-)
#include <d3d9.h>
//DEKLARACJA FUNKCJI OBSŁUGI KOMUNIKATÓW
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LPDIRECT3D9 g_pD3D = NULL; //obiekt dający dostęp do innych funkcji dx3d
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//obiekt dający dostęp do funkcji renderujących
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)//główna funkcja aplikacji win32
{
HWND hwnd; //deklarujemy zmienną okna
MSG messages; //zmienna komunikatów okna
WNDCLASSEX wincl; //struktura danych okna
//wypełniamy strukturę okna
wincl.hInstance = hThisInstance;
wincl.lpszClassName = "WindowsApp";
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS; //obsługa podwójnego kliknięcia
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
//rejestrujemy w systemie klasę okna
if (!RegisterClassEx (&wincl)) return 0;
hwnd = CreateWindowEx (
0,//zawsze 0
"WindowsApp", //nazwa klasy z danymi okna
"Windows App",//tytuł okna
WS_OVERLAPPEDWINDOW|WS_VISIBLE,//styl okna
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);
//pętla obsługi komunikatów
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
HRESULT InitD3D(HWND hwnd)
{
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);//ładujemy do obiektu DX obecną wersję DX na kompie
D3DDISPLAYMODE d3ddm;//struktura zawierająca parametry wyświetlania
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);//przypisujemy tej strukturze domyślny wyświetlacz
D3DPRESENT_PARAMETERS d3dpp;//struktura parametrów rysowania
ZeroMemory(&d3dpp, sizeof(d3dpp) );//resetujemy zawartość tej struktury
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice );
return S_OK;
}
void Render()
{
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
g_pd3dDevice->BeginScene();
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
void Cleanup()
{
if( g_pd3dDevice != NULL)
g_pd3dDevice->Release();
if( g_pD3D != NULL)
g_pD3D->Release();
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//funkcja obsługi komunikatów
{
switch (message)
{
case WM_CREATE:
InitD3D(hwnd);
Render();
Cleanup();
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}