Jogl и JavaFX - PullRequest
       79

Jogl и JavaFX

0 голосов
/ 31 марта 2020

Я слышал, что можно интегрировать Jogl в JavaFX с NewtCanvasJFX, но я не могу заставить его работать. Я попробовал что-то подобное.

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("JavaFX Jogl");
    primaryStage.setScene(new Scene(root, 300, 275));
    primaryStage.show();

    //init Canvas
    final GLProfile glProfile = GLProfile.getDefault();
    final GLCapabilities capabilities = new GLCapabilities(glProfile);

    GLWindow glWindow = GLWindow.create(capabilities);

    NewtCanvasJFX glPanel = new NewtCanvasJFX(glWindow);
    glPanel.setWidth(300);
    glPanel.setHeight(300);

    StackPane openGLPane = new StackPane();
    openGLPane.getChildren().add(glPanel);

    glWindow.addGLEventListener(this);
}

Мне просто нужно, чтобы jogl и Javafx работали вместе над университетским проектом, поэтому, если у кого-то есть другие решения, я был бы очень признателен.

1 Ответ

0 голосов
/ 03 апреля 2020

Я не мог заставить его работать с NewtCanvasJFX, но я использовал gljpanel для объединения jogl и javafx.

Важно, чтобы все связанные с jogl вещи были внутри SwingUtilities.invokeLater, иначе ничего не будет визуализировано. Вы можете просто использовать холст, чтобы добавить gleventlistener.

@Override
public void start(Stage primaryStage) throws Exception{ 
    root = new StackPane();

    final GLProfile glProfile = GLProfile.getDefault();
    final GLCapabilities capabilities = new GLCapabilities(glProfile);

    canvas = new GLJPanel(capabilities);

    swingNode = new SwingNode();

    root.getChildren().add(swingNode);

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            swingNode.setContent(canvas);
            //jogl stuff here           
        }
    });


    primaryStage.setTitle("JavaFX OpenGL");
    primaryStage.setScene(new Scene(root, 1920, 1080));
    primaryStage.show();         
}
...