Для тех, кто хочет добавить OpenGL в TornadoFX, как я, мне удалось сделать это с помощью следующего кода, используя SwingNode
.
Для этого вам понадобятся зависимости JOGL 2.3.2.
import com.jogamp.opengl.*
import com.jogamp.opengl.awt.GLJPanel
import com.jogamp.opengl.glu.GLU
import javafx.embed.swing.SwingNode
import tornadofx.*
class GraphicsView : View("Graphics") {
override val root = stackpane {
}
init {
val swingNode = SwingNode()
val glprofile = GLProfile.get(GLProfile.GL2)
val glcapabilities = GLCapabilities(glprofile)
val gljpanel = GLJPanel(glcapabilities)
val obj = object : GLEventListener {
override fun reshape(glautodrawable: GLAutoDrawable, x: Int, y: Int, width: Int, height: Int) {
val gl2 = glautodrawable.getGL().getGL2()
gl2.glMatrixMode(GL2.GL_PROJECTION)
gl2.glLoadIdentity()
// coordinate system origin at lower left with width and height same as the window
val glu = GLU()
glu.gluOrtho2D(0.0f, width.toFloat(), 0.0f, height.toFloat())
gl2.glMatrixMode(GL2.GL_MODELVIEW)
gl2.glLoadIdentity()
gl2.glViewport(0, 0, width, height)
}
override fun init(glautodrawable: GLAutoDrawable) {
}
override fun dispose(glautodrawable: GLAutoDrawable) {
}
override fun display(glautodrawable: GLAutoDrawable) {
val width = 500
val height = 500
val gl2 = glautodrawable.getGL().getGL2()
gl2.glClear(GL.GL_COLOR_BUFFER_BIT)
// draw a triangle filling the window
gl2.glLoadIdentity()
gl2.glBegin(GL.GL_TRIANGLES)
gl2.glColor3f(1f, 0f, 0f)
gl2.glVertex2f(0f, 0f)
gl2.glColor3f(0f, 1f, 0f)
gl2.glVertex2f(width.toFloat(), 0f)
gl2.glColor3f(0f, 0f, 1f)
gl2.glVertex2f((width / 2).toFloat(), height.toFloat())
gl2.glEnd()
}
}
gljpanel.addGLEventListener(obj)
swingNode.content = gljpanel
root.children.add(swingNode)
}
}