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);
		}
	}
}