From 88f835d3895d8682f909f170e9b519d5daf0ff04 Mon Sep 17 00:00:00 2001 From: brausjonas <47791011+jonasbraus@users.noreply.github.com> Date: Wed, 26 Oct 2022 12:08:36 +0200 Subject: [PATCH] Example for including OpenGL in a java swing project --- Rendr/src/EngineTest/SwingTest.java | 95 ++++++++++++++++++++++ Rendr/src/RenderEngine/DisplayManager.java | 14 ++++ 2 files changed, 109 insertions(+) create mode 100644 Rendr/src/EngineTest/SwingTest.java diff --git a/Rendr/src/EngineTest/SwingTest.java b/Rendr/src/EngineTest/SwingTest.java new file mode 100644 index 0000000..0618480 --- /dev/null +++ b/Rendr/src/EngineTest/SwingTest.java @@ -0,0 +1,95 @@ +package EngineTest; + +import Entity.Camera; +import Entity.Entity; +import Models.RawModel; +import Models.TexturedModel; +import RenderEngine.DisplayManager; +import RenderEngine.Loader; +import RenderEngine.Renderer; +import Shaders.StaticShader; +import Textures.ModelTexture; +import Tools.Axis; +import Tools.OBJLoader; +import Tools.Space; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.util.vector.Vector3f; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class SwingTest +{ + public static void main(String[] args) + { + new SwingTest(); + } + + private Canvas canvas; + private JFrame frame; + private JPanel leftPanel; + private JPanel centerPanel; + + public SwingTest() + { + frame = new JFrame(); + frame.setSize(1600, 900); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(new BorderLayout()); + + canvas = new Canvas(); + + canvas.setIgnoreRepaint(true); + canvas.setPreferredSize(new Dimension(800, 600)); + canvas.setMinimumSize(new Dimension(320, 240)); + canvas.setVisible(true); + + leftPanel = new JPanel(); + centerPanel = new JPanel(); + + centerPanel.add(canvas); + + frame.add(leftPanel, BorderLayout.WEST); + frame.add(centerPanel, BorderLayout.CENTER); + frame.setVisible(true); + + new Thread(new Runnable() + { + @Override + public void run() + { + includeGL(); + } + }).start(); + } + + private void includeGL(){ + DisplayManager.createDisplay("Redr", false); + DisplayManager.setDisplayParent(canvas); + + Loader loader = new Loader(); + StaticShader shader = new StaticShader(); + Renderer renderer = new RenderEngine.Renderer(shader); + + Camera camera = new Camera(); + + while(!Display.isCloseRequested()) + { + renderer.prepare(0.2f, 0.2f, 0.2f); + shader.start(); + shader.loadViewMatrix(camera); +// renderer.render(entity, shader); + shader.stop(); + DisplayManager.updateDisplay(); + } + + shader.clear(); + loader.clear(); + DisplayManager.closeDisplay(); + } +} diff --git a/Rendr/src/RenderEngine/DisplayManager.java b/Rendr/src/RenderEngine/DisplayManager.java index 0923084..c547998 100644 --- a/Rendr/src/RenderEngine/DisplayManager.java +++ b/Rendr/src/RenderEngine/DisplayManager.java @@ -2,6 +2,9 @@ package RenderEngine; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.*; +import org.lwjgl.opengl.DisplayMode; + +import java.awt.*; public class DisplayManager { @@ -75,4 +78,15 @@ public class DisplayManager { return Display.isFullscreen(); } + + public static void setDisplayParent(Canvas parent) + { + try + { + Display.setParent(parent); + } catch (LWJGLException e) + { + throw new RuntimeException(e); + } + } }