Hallo allerseits,
ich habe hier ein (wissenschaftliches) Programm, welches seine grafische Ausgabe per OpenGL realisiert. Eingaben können per Maus und Tastatur erfolgen und werden in grafische Ausgaben umgesetzt. Der Programmablauf ist dabei wie folgt (vereinfacht):
Das Problem ist dabei die doppelte while-Schleife. Die Innere wird benötigt, damit kein Event verloren geht. So ist es z.B. wichtig bei Mausbewegungen jeden Punkt aufzuzeichnen, dies funktioniert nicht, wenn die innere Schleife einfach in die äußere Schleife transformiert wird, da pro Sekunde mehr Events erzeugt werden können, als FPS dargestellt werden. Dadurch würden nicht mehr alle Events abgearbeitet werden können, was schließlich dazu führt, dass die grafische Darstellung verfälscht wird bzw. der Eingabe extrem hinterherhängt.
Ich würde daher gerne wissen, wie man in diesem Fall die Eingabe von der Darstellung entkoppeln kann, so dass beides flüssig arbeiten kann. Die Entwicklung geschieht unter Linux.
Gruß,
Trench
ich habe hier ein (wissenschaftliches) Programm, welches seine grafische Ausgabe per OpenGL realisiert. Eingaben können per Maus und Tastatur erfolgen und werden in grafische Ausgaben umgesetzt. Der Programmablauf ist dabei wie folgt (vereinfacht):
Code:
while(1) {
while(getInputEvents()) {
code = getInputEvent(&event);
if(code == 0) {
switch(val) {
case EVENT_MOUSE_MOVE:
...
}
}
}
}
Das Problem ist dabei die doppelte while-Schleife. Die Innere wird benötigt, damit kein Event verloren geht. So ist es z.B. wichtig bei Mausbewegungen jeden Punkt aufzuzeichnen, dies funktioniert nicht, wenn die innere Schleife einfach in die äußere Schleife transformiert wird, da pro Sekunde mehr Events erzeugt werden können, als FPS dargestellt werden. Dadurch würden nicht mehr alle Events abgearbeitet werden können, was schließlich dazu führt, dass die grafische Darstellung verfälscht wird bzw. der Eingabe extrem hinterherhängt.
Ich würde daher gerne wissen, wie man in diesem Fall die Eingabe von der Darstellung entkoppeln kann, so dass beides flüssig arbeiten kann. Die Entwicklung geschieht unter Linux.
Gruß,
Trench