package simplebrowser.prototype; import java.awt.Dimension; import java.nio.ByteBuffer; import java.nio.IntBuffer; import javax.media.opengl.DebugGL3; import javax.media.opengl.GL3; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLProfile; import javax.media.opengl.awt.GLCanvas; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.vecmath.Vector3f; import simplebrowser.prototype.gl.BufferObject; import simplebrowser.prototype.gl.VertexArrayObject; import com.jogamp.common.nio.Buffers; import com.jogamp.graph.curve.opengl.RenderState; import com.jogamp.graph.curve.opengl.TextRenderer; import com.jogamp.graph.font.Font; import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.geom.opengl.SVertex; import com.jogamp.opengl.util.Animator; import com.jogamp.opengl.util.glsl.ShaderState; public class TestTextRendering implements GLEventListener { JFrame frame = null; GLCanvas canvas = null; public static Font font; public static RenderState textRenderState = null; public static TextRenderer textRenderer = null; void init() { frame = new JFrame("TEXT RENDERER"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GLProfile profile = GLProfile.get(GLProfile.GL3); GLCapabilities capabilities = new GLCapabilities(profile); capabilities.setDoubleBuffered(true); capabilities.setSampleBuffers(true); canvas = new GLCanvas(capabilities); canvas = new GLCanvas(capabilities); canvas.setPreferredSize(new Dimension(500, 500)); canvas.addGLEventListener(this); frame.add(canvas); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { final TestTextRendering tr = new TestTextRendering(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { tr.init(); } }); } @Override public void display(GLAutoDrawable drawable) { GL3 gl = drawable.getGL().getGL3(); gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT); int width = drawable.getWidth(); int height = drawable.getHeight(); textRenderer.reshapePerspective(null, 45.0f, width, height, 0.1f, 7000.0f); textRenderer.reshapeOrtho(null, width, height, 0.1f, 7000.0f); final float[] textPosition = new float[] {0, 0, 0}; final int[] texSize = new int[] { 400 }; final int fontSize = 50; textRenderer.resetModelview(null); textRenderer.setColorStatic(gl, 0.0f, 0.0f, 1.0f); textRenderer.translate(gl, 250, 250, -6000); textRenderer.drawString3D(gl, font, "Hi", textPosition, fontSize, texSize); } @Override public void dispose(GLAutoDrawable drawable) { } @Override public void init(GLAutoDrawable drawable) { GL3 gl = new DebugGL3(drawable.getGL().getGL3()); drawable.setGL(gl); gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f); gl.glEnable(GL3.GL_DEPTH_TEST); gl.glEnable(GL3.GL_MULTISAMPLE); try { font = FontFactory.get(FontFactory.UBUNTU).getDefault(); textRenderState = RenderState.createRenderState(new ShaderState(), SVertex.factory()); textRenderer = TextRenderer.create(textRenderState, 0); textRenderer.init(gl); textRenderer.setAlpha(gl, 1.0f); textRenderer.setColorStatic(gl, 0.0f, 0.0f, 0.0f); } catch(Exception e) { throw new RuntimeException(e); } // here, I would create a VA, IB, VB, set them up, etc, only to finally break the bind // on the vertex array // UNCOMMENT BELOW TO MAKE APPLICATION THROW AN EXCEPTION gl.glBindVertexArray(0); } @Override public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) { } }