[BITTE HELFEN]Textur laden
-
Hi,
Ich bin noch ziemlich neu beim Programmieren mit C++ DirectX (Davor habe ich mit XNA programmiert).
Nun wollte ich mich erstmal mit 2D Spielen beschäftigen und dann auf 3D umsteigen.Ich hab alles nach einem Tutorial gemacht und mein Code sieht nun so aus:
#include<Windows.h> #include<d3d9.h> #include<d3dx9.h> #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #define SCREEN_WIDTH 800 #define SCREEN_HEIGHT 600 bool GameRun = TRUE; LPDIRECT3D9 D3D; LPDIRECT3DDEVICE9 D3DDEV; LPDIRECT3DTEXTURE9 texture = NULL; LPD3DXSPRITE sprite = NULL; void Init(HWND hWnd); void Render(void); void Clean(void); LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); const char szAppName[] = "Tut"; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = szAppName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,NULL,NULL,hInstance,NULL); ShowWindow(hWnd,iCmdShow); UpdateWindow(hWnd); Init(hWnd); while(GameRun) { while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); if(msg.message == WM_QUIT) GameRun = FALSE; } Render(); } Clean(); return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd,message,wParam,lParam); } void Init(HWND hWnd) { D3D = Direct3DCreate9(D3D_SDK_VERSION); D3DPRESENT_PARAMETERS D3DPP; ZeroMemory(&D3DPP,sizeof(D3DPP)); D3DPP.Windowed = TRUE; D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD; D3DPP.hDeviceWindow = hWnd; D3DPP.BackBufferFormat = D3DFMT_X8R8G8B8; D3DPP.BackBufferWidth = SCREEN_WIDTH; D3DPP.BackBufferHeight = SCREEN_HEIGHT; D3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&D3DPP,&D3DDEV); D3DXCreateTextureFromFile(D3DDEV,"texture.png",&texture); D3DXCreateSprite(D3DDEV,&sprite); D3DDEV->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); D3DDEV->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); D3DDEV->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR ); } void Render(void) { D3DDEV->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,40,100),1.0f,0.0f); D3DDEV->BeginScene(); D3DXVECTOR3 pos; pos.x = 0.0f; pos.y = 0.0f; pos.z = 0.0f; sprite->Begin(D3DXSPRITE_ALPHABLEND); sprite->Draw(texture,NULL,NULL,&pos,D3DCOLOR_XRGB(255,255,255)); sprite->End(); D3DDEV->EndScene(); D3DDEV->Present(NULL,NULL,NULL,NULL); } void Clean(void) { D3D->Release(); D3DDEV->Release(); texture->Release(); }
texture.png befindet sich im Ordner Ressourcendateien.
1.Problem:Wenn ich es jetzt starte dann wird keine Textur gezeichnet.
2.Problem:Wenn ich es beende öffnet sich ein Fenster wo folgendes steht:
Unbehandelte Ausnahme bei 0x012138a2 in dddd.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
Buttons:Unterbrechen,WeiterIch hoffe ihr könnt mir helfen
mfg BreakBlack
-
Wo genau tritt der Fehler auf? Mein Tipp: Dein Device wird schon nicht korrekt erzeugt und ist daher 0...
-
Also beim ersten Problem weiß ich ja nicht wo der Fehler ist.Und beim zweiten Problem ist ein Pfeil neben texture->Release.Dann ist wohl da der Fehler.
Und was meinst du damit das Device wird nicht richtig erzeugt? Wie macht man das dann richtig?Hoffe mir kann jmd weiterhelfen
-
Gib doch mal die Rueckgabewerte aller Funktionsaufrufe aus. Die gibts ja nicht nur zum Spass.