Nabend!
Kurze Vorgeschichte:
Ich beschäftige mich derzeit mit OpenGL, habe mit Nehes Tutorials
angefangen, bis Glaux verwendet wurde. Da ich Glaux nicht verwenden
will, habe ich mir ein anderes Tutorial gesucht.
Das Tutorial ist auch relativ lang und auch eher für Fortgeschrittene.
Vom ersten Part verstehe ich ja auch schon eine Menge, aber es gibt so
Sachen da blicke ich nicht durch. Vielleicht liegts an dem vollem Kopf, dem
Stress und der ständigen Depression durch einen fehlgeschlagenen Versuch
es zu verstehen.
Hier erst einmal die Funktion:
|
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
58
59
60
61
62
63
64
65
66
67
|
void CApplication::Run()
{
// Als erstes das Fenster erstellen
CMainWindow mainWindow(800,600,m_bFullScreen);
MSG Message;
Message.message = (~WM_QUIT);
DWORD dwNextDeadLine = GetTickCount() + FRAME_TIME;
DWORD dwSleep = FRAME_TIME; // FRAME_TIME als "75" definiert
bool bUpdate = false;
//Schleife, bis eine Nachricht WM_QUIT erhalten wird, also das Fenster
// zu schließen
while (Message.message != WM_QUIT)
{
// Wait until a message comes in or until the timeout expires. The
// timeout is recalculated so that this function will return at
// least every FRAME_TIME msec.
DWORD dwResult = MsgWaitForMultipleObjectsEx(0,NULL,dwSleep,QS_ALLEVENTS,0);
if (dwResult != WAIT_TIMEOUT)
{
// If the function returned with no timeout, it means that at
// least one message has been received, so process all of them.
while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
// If a message was waiting in the message queue, process it
TranslateMessage(&Message);
DispatchMessage(&Message);
}
// If the current time is close (or past) to the
// deadline, the application should be processed.
if (GetTickCount() >= dwNextDeadLine)
bUpdate = true;
else
bUpdate = false;
}
else
// On a timeout, the application should be processed.
bUpdate = true;
// Check if the application should be processed
if (bUpdate)
{
DWORD dwCurrentTime = GetTickCount();
// Fenster updaten
mainWindow.Update(dwCurrentTime);
// Fenster "zeichnen"
mainWindow.Draw();
dwNextDeadLine = dwNextDeadLine + FRAME_TIME;
}
// Process the sleep time, which is the difference
// between the current time and the next deadline.
dwSleep = dwNextDeadLine - GetCurrentTime();
// If the sleep time is larger than the frame time,
// it probably means that the processing was stopped
// (e.g. the window was being moved,...), so recalculate
// the next deadline.
if (dwSleep>FRAME_TIME)
{
dwSleep = FRAME_TIME;
dwNextDeadLine = GetCurrentTime() + FRAME_TIME;
}
}
}
|
Ok, einige Kommentare sind in Deutsch und in Englisch.
Was ich nicht verstehe, ist einmal folgende Zeile:
|
C-/C++-Quelltext
|
1
|
Message.message = (~WM_QUIT);
|
Besser gesagt, das "~". Wird die Nachricht nun
nicht auf WM_QUIT gesetzt?
Den ganzen Timeout und Deadline Kram verstehe ich nicht.
Wenn mir den vielleicht jemand mal erklären könnte? : )
Achso, und DWORD könnte man doch auch mit unsigned int vertauschen
oder?
Vielen Dank für eure Hilfe!