Как использовать модель JOGL NEWT для создания окна в Mac OS X

На работе я создаю программу визуализации музыки. JOGL был выбран потому, что нам нужен был API для программирования 3D-графики, который сразу же работал на нескольких платформах. На данный момент я использую GLCanvas для рендеринга всей работы, однако недостатком является то, что он использует EDT для рендеринга цикла OpenGL, а EDT также используется для диспетчеризации других взаимодействий с графическим интерфейсом. Поэтому, если я заставлю рендерер спать в течение определенного времени, чтобы дождаться структуры данных или контролировать FPS, тогда я заставлю весь EDT спать и, следовательно, замедлить графический интерфейс.

Я хочу, чтобы музыкальный проигрыватель (в одном потоке) взаимодействовал со структурами данных, которые использует визуализатор. Я бы сделал это, имея 2 синхронизированных метода, которые уведомляют другой поток или ждут сами, в зависимости от того, что происходит. Проблема с тем, что я только что упомянул, заключается в том, что на данный момент программа реализована там, где EDT запускает рендеринг (это то, что происходит с GLCanvas). В этом случае, когда цикл рендеринга (поток EDT) переходит к получению пустой структуры данных, ему предлагается подождать. Поток будет ждать, пока песня будет загружена, а затем воспроизведена, однако я не могу загрузить песню с помощью графического интерфейса, потому что поток EDT ожидает, пока песня будет загружена и воспроизведена, но песня не может быть загружена, потому что EDT находится в спящем режиме. По сути, это мертвый замок.

Прошу прощения за все написанное. Надеюсь, я делаю это легко читаемым. Идеальным решением моей проблемы является использование JOGL's NEWT, который запускает цикл рендеринга в отдельном потоке, а затем отдельно EDT. Это позволит мне приостановить поток рендеринга и поток музыкального проигрывателя вперед и назад, не касаясь EDT, который обрабатывает все взаимодействия с графическим интерфейсом.

Прежде чем я включу NEWT в реальный проект, я просто хочу попробовать базовые вещи с NEWT, такие как открытие окна в Mac OS 10.7. Поэтому я создал проект, который просто открывает окно и терпит неудачу. Код для этого (ну, один из способов сделать это, это единственный код в моем проекте):

Display display = NewtFactory.createDisplay(null); 
GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2)); 
Screen screen = NewtFactory.createScreen(display, 0); 
Window window = NewtFactory.createWindow(screen, capabilities); 
window.setVisible(true); 

or:

GLProfile.initSingleton(true);
GLProfile glp = GLProfile.get(GLProfile.GL2);;
GLCapabilities caps = new GLCapabilities(glp);
Renderer r = new Renderer();
GLWindow window = GLWindow.create(caps);
window.addGLEventListener(r);
window.setSize(300, 300);
window.setTitle("NEWT Window Test");
window.addWindowListener(new WindowAdapter() {
        public void windowDestroyNotify(WindowEvent e) {
            System.exit(0);
        }
});
Animator a = new FPSAnimator(window);
a.start();
window.setVisible(true);

Независимо от того, какой способ я использую, я все равно получаю те же ошибки, а именно:

  1. В консоли написано:

Обнаруженный размер экрана 1280x800. рип = 0x10df02478

  1. Откроется окно с сообщением: NEWTTRY неожиданно завершил работу при использовании подключаемого модуля libnewt.jnilib.

Я искал в Интернете в течение нескольких дней и подробно прочитал API NEWT, который плохо документирован. Я надеюсь, что кто-то может помочь, потому что использование NEWT в высокопроизводительных программах чрезвычайно полезно и более гибко, чем использование GLCanvas.

Я использую:

Версия ОС: Mac OS X 10.7 (11A511) Версия отчета: 9 Модель: MacBook5,1, BootROM MB51.007D.B03, 2 процессора, Intel Core 2 Duo, 2 ГГц, 4 ГБ, SMC 1.40f2 Графика: NVIDIA GeForce 9400M, NVIDIA GeForce 9400M, PCI, 256 МБ Последнее обновление Java для Mac jogl-2.0-b23-20110303-macosx


person Mike    schedule 16.08.2011    source источник


Ответы (1)


Это руководство, которое я использовал для изучения операций тритона https://sites.google.com/site/justinscsstuff/jogl-tutorial-2.

Это объясняет Newt, а также настройку JFrame.

person Pixelapp    schedule 22.05.2012