AWT быстрая графика и безопасность потоков

Я портирую действительно старую игру AWT на действительно новое устройство.

В игре есть множество ошибок, включая очень слабый подход к безопасности потоков: игровой движок пытается рисовать прямо на экране в своем потоке движка, используя графический контекст, полученный из потока пользовательского интерфейса. Это не работает на устройстве.

Мне удалось заставить его работать, заставив поток движка отрисовывать внеэкранный буфер, а затем заставить поток пользовательского интерфейса периодически вызывать repaint () в компоненте отображения и компонент отображения копирует буфер на экран, но производительность отстой - неудивительно, учитывая все переключатели контекста и двойную буферизацию.

На самом деле я не особо хорошо осведомленный программист AWT; это достаточно противно, что я избегал этого до сих пор. Но эта проблема - когда поток движка хочет рисовать на экране - должна быть распространенной. Кто-нибудь знает какие-нибудь достойные стратегии (и желательно пример кода!) Того, как сделать это безопасным способом, который выжимает из системы как можно больше производительности?

(Что мне особенно хотелось бы, так это безопасный ярлык для позволить потоку движка напрямую отображать контекст экранной графики, когда он чувствует себя готовым к этому, и поэтому избегайте необходимости указывать потоку пользовательского интерфейса запрос на перерисовку. Это позволит мне избавиться от целого уровня двойной буферизации. Но я не знаю, возможно ли такое ...)

Это все на PBP 1.1.2 --- да, это не полная Java и не честный MidP ...

7
задан David Given 27 May 2011 в 22:27
поделиться