Возможно ли создать элемент OpenGL, GLCanvas() в macOS X 10.15 (Java)?

#java #macos #opengl #macos-catalina #jogl

#java #macos #opengl #macos-catalina #jogl

Вопрос:

В настоящее время я пытаюсь обновить программу, которая использует OpenGL. Мне нужно заставить программу работать в macOS X 10.15. Я использую JDK SE 14 и самую последнюю версию JOGL, найденную по адресу https://jogamp.org /. Проблема, с которой я сталкиваюсь, заключается в том, что когда программа пытается создать GLCanvas() или GLJPanel() , она мгновенно завершается сбоем. Ниже приведен фрагмент кода, который вызывает сбой.

 public void initFrame(){
    
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

    JRootPane root = frame.getRootPane( );   // make small title bar
    root.putClientProperty( "Window.style", "small" );
    
   GLCanvas canvas = new GLCanvas();

    frame.setUndecorated(undecorated);
    canvas.addGLEventListener(this);
    canvas.addMouseListener(this);
    canvas.addMouseMotionListener(this);
    

    frame.setSize(frameWidth, frameHeight);
    frame.setLocation(frameX,frameY);

    frame.add(canvas);

    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice device = env.getDefaultScreenDevice();

    FPSAnimator animator = new FPSAnimator(canvas,33);  

    frame.setVisible(true);
    
    animator.start();
}
  

Следующая ошибка возникает, когда код достигает GLCanvas canvas = new GLCanvas()

    WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.jogamp.common.os.NativeLibrary$3 (file:/Users/bendavidson/NetBeansProjects/mlsim-master/lib/gluegen-rt.jar) to method java.lang.ClassLoader.findLibrary(java.lang.String)
WARNING: Please consider reporting this to the maintainers of com.jogamp.common.os.NativeLibrary$3
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-08-24 14:59:37.054 java[1489:26665] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff31959797 __exceptionPreprocess   250
    1   libobjc.A.dylib                     0x00007fff6a653a9e objc_exception_throw   48
    2   CoreFoundation                      0x00007fff3198211c -[NSException raise]   9
    3   AppKit                              0x00007fff2eb6eddc -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled]   310
    4   AppKit                              0x00007fff2eb56842 -[NSWindow _initContent:styleMask:backing:defer:contentView:]   1416
    5   AppKit                              0x00007fff2eb562b3 -[NSWindow initWithContentRect:styleMask:backing:defer:]   42
    6   libnativewindow_macosx.jnilib       0x000000012f2053fe Java_jogamp_nativewindow_macosx_OSXUtil_CreateNSWindow0   398
    7   ???                                 0x000000011c5bb6b0 0x0   4770739888
)
libc  abi.dylib: terminating with uncaught exception of type NSException
Java Result: 134
  

Я не уверен, как интерпретировать эту ошибку, и мне было интересно, есть ли какие-либо обходные пути для того, чтобы заставить GLCanvas() работать в macOS X 10.15. Я планирую перевести все приложение на Metal в ближайшие месяцы, но мне нужно быстрое исправление для предстоящего проекта.

Комментарии:

1. Лучше задайте свой вопрос на официальном форуме JogAmp. Не беспокойтесь о предупреждениях, используйте последний релиз-кандидат JOGL 2.4.0, чтобы избавиться от большинства из них. Это работает как шарм.

2. @gouessej Получается, что я не использовал самую последнюю версию JOGL… Я думал, что при выборе текущего zip-файла на веб-сайте Jogamp будет получена самая последняя версия. Оказывается, это была версия 2.3.2, а не 2.4. Нашел JOGL 2.4.0, и теперь он отлично работает!

3. Это релиз-кандидат, а не релиз. Когда релиз будет готов, то то, что вы называете текущей версией, станет JOGL 2.4.0. Я рад видеть, что у вас это работает.