package com.jogamp.opengl.test.bugs; import java.awt.BorderLayout; import java.awt.Font; import java.awt.Frame; import java.awt.event.*; import java.awt.geom.*; import com.jogamp.common.util.InterruptSource; import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2; import com.jogamp.opengl.GLAutoDrawable; import com.jogamp.opengl.GLEventListener; import com.jogamp.opengl.awt.GLCanvas; import com.jogamp.opengl.fixedfunc.GLMatrixFunc; import com.jogamp.opengl.glu.*; import com.jogamp.opengl.util.awt.TextRenderer; /** Test Code adapted from TextCube.java (in JOGL demos) * * @author spiraljetty * @author kbr */ public abstract class Issue344Base implements GLEventListener { GLU glu = new GLU(); TextRenderer renderer; float textScaleFactor; Font font; boolean useMipMaps; protected Issue344Base() { font = new Font("default", Font.PLAIN, 200); useMipMaps = true; //false } protected abstract String getText(); protected void run(final String[] args) { final Frame frame = new Frame(getClass().getName()); frame.setLayout(new BorderLayout()); final GLCanvas canvas = new GLCanvas(); canvas.addGLEventListener(this); frame.add(canvas, BorderLayout.CENTER); frame.setSize(512, 512); frame.addWindowListener(new WindowAdapter() { public void windowClosing(final WindowEvent e) { new InterruptSource.Thread(null, new Runnable() { public void run() { System.exit(0); } }).start(); } }); try { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { public void run() { frame.setVisible(true); } } ); } catch(final Exception ex) { throw new RuntimeException(ex); } } public void init(final GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glEnable(GL.GL_DEPTH_TEST); renderer = new TextRenderer(font, useMipMaps); final Rectangle2D bounds = renderer.getBounds(getText()); final float w = (float) bounds.getWidth(); // final float h = (float) bounds.getHeight(); textScaleFactor = 2.0f / (w * 1.1f); gl.setSwapInterval(0); } public void display(final GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); gl.glLoadIdentity(); glu.gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); renderer.begin3DRendering(); final Rectangle2D bounds = renderer.getBounds(getText()); final float w = (float) bounds.getWidth(); final float h = (float) bounds.getHeight(); renderer.draw3D(getText(), w / -2.0f * textScaleFactor, h / -2.0f * textScaleFactor, 3f, textScaleFactor); renderer.end3DRendering(); } public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { final GL2 gl = drawable.getGL().getGL2(); gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(15, (float) width / (float) height, 5, 15); } public void dispose(final GLAutoDrawable drawable) {} }