blojayble Temat założony przez niniejszego użytkownika |
[DirectX] Problem z pętlą komunikatów. » 2011-04-13 17:05:42 Witam ponownie. Tym razem mam problem z DirectX. Zaczynam naukę i na początku kompiluje parę przykładów. Kiedy już udało mi się wyeliminować błędy z napisami,(dodanie tchar.h) skompilowałem mój program, lecz się on zawiesza. Visual mówi mi że jest problem z msg, że jest używany bez inicjacji. #include "stdafx.h" #include "tsest.h"
struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
LRESULT CALLBACK ProcObslugi( HWND hOkno, UINT uMsg, WPARAM wPar, LPARAM lPar ); bool NoweOkno( HINSTANCE hProg, HWND * hWnd, LPSTR lpszTyt ); HRESULT InitD3D( HWND hOkno ); void Render(); void Cleanup(); HRESULT InitVB();
int WINAPI WinMain( HINSTANCE hProgram, HINSTANCE, LPSTR, int swPokaz ) { HWND hOkno; if( !NoweOkno( hProgram, & hOkno, "Direct3D - Program 3" ) ) return false; ShowWindow( hOkno, swPokaz ); UpdateWindow( hOkno ); if( InitD3D( hOkno ) != S_OK ) Cleanup(); MSG msg; while( msg.message != WM_QUIT ) { if( PeekMessage( & msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } else Render(); } Cleanup(); return msg.wParam; }
LRESULT CALLBACK ProcObslugi( HWND hOkno, UINT uMsg, WPARAM wPar, LPARAM lPar ) { switch( uMsg ) { case WM_KEYDOWN: switch( wPar ) { case VK_ESCAPE: PostQuitMessage( 0 ); break; }; break; case WM_CLOSE: DestroyWindow( hOkno ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; }; return DefWindowProc( hOkno, uMsg, wPar, lPar ); }
bool NoweOkno( HINSTANCE hProg, HWND * hWnd, LPSTR lpszTyt ) { WNDCLASS wc; wc.lpszClassName = _T( "Kurs DirectX" ); wc.hInstance = hProg; wc.lpfnWndProc = ProcObslugi; wc.style = 0; wc.hIcon = LoadIcon( NULL, IDI_WINLOGO ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH ) GetStockObject( BLACK_BRUSH ); wc.lpszMenuName = NULL; wc.cbClsExtra = 0; wc.cbWndExtra = 0; if( !RegisterClass( & wc ) ) return false; * hWnd = CreateWindowEx( 0, _T( "Kurs DirectX" ), lpszTyt, WS_POPUP, 100, 100, 200, 100, NULL, NULL, hProg, NULL ); if( * hWnd == NULL ) return false; else return true; }
HRESULT InitD3D( HWND hWnd ) { if( NULL ==( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS pp; ZeroMemory( & pp, sizeof( pp ) ); pp.Windowed = false; pp.BackBufferWidth = 640; pp.BackBufferHeight = 480; pp.BackBufferFormat = D3DFMT_A8R8G8B8; pp.SwapEffect = D3DSWAPEFFECT_FLIP; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, & pp, & g_pd3dDevice ) ) ) return E_FAIL; InitVB(); return S_OK; }
HRESULT InitVB() { CUSTOMVERTEX vertices[] = { { 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, }; if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, & g_pVB, NULL ) ) ) { return E_FAIL; } VOID * pVertices; if( FAILED( g_pVB->Lock( 0, sizeof( vertices ),( void ** ) & pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof( vertices ) ); g_pVB->Unlock(); return S_OK; }
void Render() { g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0L ); g_pd3dDevice->BeginScene(); g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); g_pd3dDevice->EndScene(); g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); }
void Cleanup() { if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); }
Niby wszystko cacy, a jednak pojawiają się błędy: 'tsest.exe': Loaded 'C:\Documents and Settings\Zolw\Moje dokumenty\Visual Studio 2010\Projects\tsest\Debug\tsest.exe', Symbols loaded. 'tsest.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\d3d9.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\d3d8thk.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\secur32.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\version.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\winmm.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\msvcr100d.dll', Symbols loaded. 'tsest.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll', Cannot find or open the PDB file 'tsest.exe': Loaded 'C:\WINDOWS\system32\MSCTF.dll', Cannot find or open the PDB file Run-Time Check Failure #3 - The variable 'msg' is being used without being initialized. The program '[3780] tsest.exe: Native' has exited with code 0 (0x0).
Próbowałem innych pętli, z google, ale wywalały jeszcze więcej błędów. Co zrobić aby wszystko ładnie chodziło, może to wina tych plików? |