Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Initialize the triangle HRESULT InitializeTriangle() { // Set vertice 1 cvTriangle[0].x = 150.0f; cvTriangle[0].y = 50.0f; cvTriangle[0].z = 0.5f; cvTriangle[0].rhw = 1.0f; cvTriangle[0].color = 0xff000000; // Set vertice 2 cvTriangle[1].x = 250.0f; cvTriangle[1].y = 250.0f; cvTriangle[1].z = 0.5f; cvTriangle[1].rhw = 1.0f; cvTriangle[1].color = 0x00ff0000; // Set vertice 3 cvTriangle[2].x = 50.0f; cvTriangle[2].y = 250.0f; cvTriangle[2].z = 0.5f; cvTriangle[2].rhw = 1.0f; cvTriangle[2].color = 0x0000ff00; // Fill the VertexBuffer if((p_D3DDevice->CreateVertexBuffer(sizeof(cvTriangle), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &p_VB, NULL))!=D3D_OK) return E_FAIL; VOID* p_Vertices; // Lock if(FAILED(p_VB->Lock(0, sizeof(cvTriangle), (void**)&p_Vertices, 0))) return E_FAIL; memcpy(p_Vertices, cvTriangle, sizeof(cvTriangle)); // Unlock p_VB->Unlock(); return S_OK; } |
C-/C++-Quelltext |
|
1 |
CreateVertexBuffer(sizeof(cvTriangle) * 3 |
Zitat
(Vista Meldung: Programm funktioniert nicht mehr).
Administrator
Zitat von »"Deppomat"«
C-/C++-Quelltext
1 CreateVertexBuffer(sizeof(cvTriangle) * 3
und mein locken auch mal 3, denn du hast ja schließlich 3 vertices und nicht eins.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
//-------------------------------------------------------------------------------------- // WinMain INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT) { // Register the Window class WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "Direct3D Tutorial", NULL}; RegisterClassEx(&wc); // Create the window HWND hwnd = CreateWindow("Direct3D Tutorial", "Direct3D Tutorial 02: Rendering Vertices", WS_OVERLAPPEDWINDOW, 0, 0, 400, 400, GetDesktopWindow(), NULL, hInst, NULL); // Show the window ShowWindow(hwnd, SW_SHOW); // Get DX version if(NULL == (p_D3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; // Fill the presenting parameters D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = true; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // Create the Device if(FAILED(p_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &p_D3DDevice))) return E_FAIL; MSG msg; // HIER: //////////////////////////////////////////////////////////////////////// InitializeTriangle(); ////////////////////////////////////////////////////////////////////////////////// ZeroMemory(&msg, sizeof(msg)); // Handle the messages while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else Render(); } return msg.wParam; } |
Zitat
Solange Sie nicht gerade vor immer wieder zitierten ausrangierten 386er-Laptop sitzen, auf dem sich ein Dutzend Hintergrundprogramme um nicht vorhandene Rechenzeit schlägt, befindet sich allerdings auch Windows den meisten Teil der Zeit im Leerlauf - tut also nichts weiter, als auf Tastatur- oder Mausereignisse zu warten. Ob es eine Möglichkeit gibt, sich von diesem Kuchen ein möglichst dickes Stück abzuschneiden und die Kontrolle nur dann zurückzugeben wenn tatsächlich irgendeine Nachricht zur Bearbeitung ansteht?
Genau darin liegt einer der Zwecke von PeekMessage - einer Funktion, die sich beispielsweise so aufrufen lässt:
PeekMessage (&msg, NULL, 0, 0, PM_REMOVE) ;
Zitat
Ein Aufruf von GetMessage in der Form
GetMessage (&msg, NULL, 0, 0) ;
liest die jeweils nächste Nachricht aus der Warteschlange und übergibt GetMessage einen Zeiger auf die (programmeigene) Variable msg.
Zitat
(Weshalb der Code auch nicht funktioniert, da das Device beim behandeln von WM_CREATE noch nicht erstellt wurde)
Werbeanzeige