LWJGL, Clojure, один поток для команд OpenGL

Короткий вопрос:

Учитывая модель параллелизма Clojure, как я могу гарантировать, что все функции LWJGL OpenGL Update вызываются из одного и того же потока?

Длинный вопрос

После долгой и славной битвы, Используя lwjgl в Leiningen/Clojure, теперь у меня есть LWJGL + Leiningen + Clojure, работающие вместе.

Однако, согласно документации LWJGL, клиентские команды OpenGL имеют локальное состояние потока, и если я вызываю команды OpenGL из разных потоков, могут произойти Bad Things (TM).

Таким образом, мой вопрос: как правильно в Clojure настроить что-то вроде Swing Threads (но я не могу использовать Swing Threads / должен настроить свой собственный), чтобы:

(1) — это один основной поток, который отвечает за все вызовы OpenGL

(2) другие потоки в той или иной степени взаимодействуют с этим основным потоком для координации вызовов OpenGL

Мой опыт

Я знаком с многопоточностью в C /С++. Я знаком с моделью агента/атома/ссылки Clojure. Однако я не знаком с "ручным" параллелизмом/поточностью в Clojure.

Спасибо!

6
задан Community 23 May 2017 в 11:59
поделиться