This library allows for using OpenGL and Vulkan LWJGL 3 surfaces in AWT (and by extension, Swing) frames. Works with MacOS X, Windows, and Linux.
Support for OpenGL:
Support for Vulkan:
Note about compatibility: The minimum macOS version for OpenGL is 10.5, and the minimum for Vulkan is 10.11, since Vulkan runs on top of the Metal API introduced in that version.
Full code samples:
In order to create an OpenGL 3.3 core profile context with 4 sample MSAA, use:
JFrame frame = new JFrame("AWT test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLayout(new BorderLayout());
GLData data = new GLData();
data.majorVersion = 3;
data.minorVersion = 3;
data.profile = GLData.Profile.CORE;
data.samples = 4;
frame.add(new AWTGLCanvas(data) {
public void initGL() {
}
public void paintGL() {
}
});
if (!AWTVK.isPlatformSupported()) {
throw new RuntimeException("Platform not supported.");
}
JFrame frame = new JFrame("AWT test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setPreferredSize(new Dimension(600, 600));
Canvas canvas = new Canvas();
frame.add(canvas, BorderLayout.CENTER);
frame.pack(); // Packing causes the canvas to be lockable, and is the earliest time it can be used
long surface = AWTVK.create(canvas, instance);
// Do things with the surface
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
// Destroy the surface to prevent leaks and errors
KHRSurface.vkDestroySurfaceKHR(instance, surface, null);
}});