Ich bin ziemlich neu in GLFW und OpenGL im Allgemeinen, und ich arbeite an einem kleinen Modell-Renderer. Ich arbeite gerade an den Eingängen, und ich bin mit einem Problem konfrontiert, wie GLFW Eingaben verarbeitet, lassen Sie mich erklären: Jede Tutorials sagen, um glfwGetKey und eine "if-Wald" zu verwenden, um zu sehen, ob der und der Schlüssel gedrückt wurde. Das Problem, das ich damit habe, ist, dass es langsam werden könnte, wenn ich viele Schlüssel abdecke, und es ist hässlich. Also verwende ich Funktionszeiger Tabellen und glfwSetKeyCallback, um dies zu beschleunigen und einen saubereren Code zu haben. Das Problem, das ich habe, ist, dass ich sehe, was aussieht wie eine Race Condition, die Kamera scheint zu stottern. Ich verwende eine Delta-Zeit für jeden Frame berechnet, um konstante Geschwindigkeit zu haben. Von dem, was ich sehen konnte, scheint es, dass die Key-Callback-Funktion ab und zu und nicht jedes Mal an jedem Frame aufgerufen wird, wenn ein Schlüssel wiederholt wird ... Ich benutze die neueste Version von GLFW3 von ihrem Github, ich tausche der Puffer am Anfang jeder Schleife und am Ende glfwPollEvents() verwenden.GLFW Key Callback Synchronisation
Meine Frage ist die folgende: Gibt es eine Möglichkeit, den glfwPollEvents-Aufruf und das Rendering zu synchronisieren, um das Stottern und den Differenzzeitunterschied zwischen Rendering-Schleife und der Rückruffunktion zu vermeiden? Vielen Dank im Voraus für Ihre Hilfe!
Wie gehen Sie davon aus, dass "if forest" Ihnen Leistungsprobleme bereiten würde? Hast du es tatsächlich gemessen? Ja, es sieht hässlich aus und das ist schwer zu pflegen ist der berechtigte Grund, es zu vermeiden. Aber Leistung ist kein Grund. – datenwolf
In der Tat, der Leistungsunterschied wird nicht groß mit modernen CPU sein, aber stell dir vor, du hast 1000 wenn ... sonst wenn Aussagen und der aktuelle Fall der letzte ist, es bedeutet, dass dein Programm alle 999 anderen Möglichkeiten vorher prüfen wird etwas tun, gegen einen einfachen Funktionsaufruf im Falle der Funktionszeiger-Tabelle. Auch, wie Sie sagten, es ist hässlich und schwierig zu pflegen, so "wenn Wälder" zu jedem Preis Leistung Kosten oder nicht IMHO vermeiden sollen. – Tab
Dort gibt es eine partielle Antwort: http://StackOverflow.com/Questions/6805026/is-Switch-Faster-Than-if Obwohl ich nicht wirklich weiß, wie Compiler interpretieren wenn sonst Wälder, nehme ich vernünftigerweise an Tonnen von bedingten Prüfungen wäre logisch langsamer als eine einfache Funktion Zeiger Tabelle ... – Tab