Für mein Praktikum am Brain-Computer Interfacing muss ich einige sehr schnelle flackernde Quadrate auf einem CRT-Monitor erzeugen (flackernd = alternierend zwischen zwei Farben). Die Bildwiederholrate des Monitors beträgt 85 Hz und wir möchten, dass dies der Engpass ist, was bedeutet, dass das Neuzeichnen aller Quadrate höchstens 1000/85 = 11 ms dauern kann.Wie generiere ich einfache 2D-Grafiken in Echtzeit?
Meine bevorzugte Sprache für GUI/Grafik-Programmierung ist Java, also habe ich versucht, einen Prototyp mit AWT zu machen, weil es synchron ist (im Gegensatz zu Swing). Ich habe jetzt scheinbar zwei Probleme: Zum einen zeigen die Zeitmessungen, dass das Übermalen von 9 Quadraten einfach zu lange dauert. Mein Algorithmus nimmt die gewünschte Frequenz und berechnet die Zeiten, zu denen das System im Voraus neu streichen sollte und verwendet dann eine Schleife (ohne Schlaf-/Warteverzögerung), die jedes Mal prüft, ob die nächste "Zeit" erreicht wurde Quadrate, um sie neu zu streichen. Die Art, wie ich es jetzt implementiert habe, ist, dass die Quadrate Panels mit Hintergrundfarbe A sind und in einem anderen Panel mit Hintergrundfarbe B enthalten sind und das Flackern geschieht, weil die Sichtbarkeit der Panels geändert wird. Ich dachte mir, dass das schneller wäre als ein Panel, das ständig Rechtecke zeichnen muss. Ich habe kein anständiges Profiling-Tool (kann nicht Eclipse TPTP oder NetBeans Profiler arbeiten), so kann ich nicht sicher sein, aber ich habe das Gefühl, dass der Engpass ist eigentlich nicht in der Neulackierung, sondern in der Schleife (mit bedingter Prüfung etc.). Können Sie mir etwas empfehlen, was ich tun sollte?
Das zweite Problem ist, dass es scheint, als ob die Quadrate von oben nach unten gerendert werden. Es ist, als ob sie sich wirklich schnell ausrollen, aber immer noch sichtbar. Das ist inakzeptabel. Was ich jedoch frage, ist, was das verursacht. Ist es Java/AWT oder Windows oder schreibe ich nur einen langsamen Algorithmus?
Können Sie mir einige Dinge empfehlen, die ich ausprobieren kann? Ich bevorzuge Java, aber ich werde C (oder etwas) verwenden, wenn ich muss.