AWTGLCanvas
他のGUI(ツリーとかリストとか)と一緒に使いたいのでorg.lwjgl.opengl.Displayじゃなくてorg.lwjgl.opengl.AWTGLCanvasを試している。
特に問題ないようだ。
Renderer.java
package jp.ousttrue; import org.lwjgl.opengl.GL11; class Renderer { public void initialize() { GL11.glClearColor(0.2f, 0.2f, 0.2f, 1.0f); } public void resize(int w, int h) { System.out.println("resize: "+w+", "+h); GL11.glViewport(0, 0, w, h); } public void draw() { System.out.println("draw"); GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); drawTriangle(); GL11.glFlush(); } private void drawTriangle() { GL11.glBegin(GL11.GL_TRIANGLES); GL11.glColor3f(1.0f, 0.0f, 0.0f); GL11.glVertex2f(-0.75f, -0.75f); GL11.glColor3f(0.0f, 1.0f, 0.0f); GL11.glVertex2f( 0.75f, -0.75f); GL11.glColor3f(0.0f, 0.0f, 1.0f); GL11.glVertex2f(0.0f, 0.75f); GL11.glEnd(); } }
App.java
package jp.ousttrue; import javax.swing.JFrame; import java.awt.Canvas; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.AWTGLCanvas; class MyCanvas extends AWTGLCanvas { Renderer renderer; boolean isResized=false; public MyCanvas() throws LWJGLException { System.out.println("MyCanvas"); renderer=new Renderer(); setVisible(true); } public void componentResized(java.awt.event.ComponentEvent e) { isResized=true; } protected void initGL() { System.out.println("initGL"); renderer.initialize(); } protected void paintGL() { if(isResized){ renderer.resize(getWidth(), getHeight()); isResized=false; } renderer.draw(); try{ swapBuffers(); } catch(LWJGLException e){ System.out.println(e); } } } class MyFrame extends JFrame { public MyFrame() throws LWJGLException { super("Graphics Demo"); setBounds(50,50,300,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyCanvas canvas=new MyCanvas(); this.getContentPane().add(canvas); } } public class App { public static void main(String[] argv) { try{ MyFrame frame=new MyFrame(); frame.setVisible(true); } catch(LWJGLException e){ System.out.println(e); } } }