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.GLCapabilitiesImmutable; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLProfile; import javax.media.opengl.GLRunnable; import javax.media.opengl.awt.GLCanvas; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.vecmath.Vector3f; import jogamp.graph.curve.text.GlyphString; import simplebrowser.prototype.gl.BufferObject; import simplebrowser.prototype.gl.VertexArrayObject; import com.jogamp.common.nio.Buffers; import com.jogamp.graph.curve.opengl.GLRegion; import com.jogamp.graph.curve.opengl.RegionRenderer; 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.newt.awt.NewtCanvasAWT; import com.jogamp.newt.opengl.GLWindow; import com.jogamp.opengl.util.Animator; import com.jogamp.opengl.util.PMVMatrix; import com.jogamp.opengl.util.glsl.ShaderState; public class TestTextRendering_v2 implements GLEventListener { JFrame frame = null; NewtCanvasAWT canvas = null; static GLWindow glw = null; public static Font font; public static RenderState renderState = null; public static TextRenderer textRenderer = null; void init2() { // 1) capabilities GLProfile profile = GLProfile.get(GLProfile.GL3); GLCapabilities capabilities = new GLCapabilities(profile); capabilities.setDoubleBuffered(true); capabilities.setSampleBuffers(true); // 2) create window glw = GLWindow.create(capabilities); // 3) create canvas canvas = new NewtCanvasAWT(glw); //canvas.setPreferredSize(new Dimension(500, 500)); glw.addGLEventListener(this); // 4) create frame frame = new JFrame("TEXT RENDERER"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 800); frame.add(canvas); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { final TestTextRendering_v2 tr = new TestTextRendering_v2(); tr.init2(); } @Override public void display(GLAutoDrawable drawable) { System.out.println("display"); GL3 gl = new DebugGL3(drawable.getGL().getGL3()); drawable.setGL(gl); gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT); int width = drawable.getWidth(); int height = drawable.getHeight(); if(!textRenderer.isInitialized()) { textRenderer.init(gl); textRenderer.setAlpha(gl, 1.0f); textRenderer.setColorStatic(gl, 1, 0, 0); } textRenderer.getShaderState().useProgram(gl, true); textRenderer.reshapePerspective(null, 45.0f, width, height, 0.1f, 7000.0f); // has probably no effect 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.translate(gl, 250, 250, -6000); textRenderer.updateMatrix(gl); textRenderer.drawString3D(gl, font, "Hi", textPosition, fontSize, texSize); textRenderer.getShaderState().useProgram(gl, false); // UNCOMMENT BELOW TO MAKE APPLICATION THROW AN EXCEPTION IN THE NEXT CALL TO DISPLAY gl.glBindVertexArray(0); } @Override public void dispose(GLAutoDrawable drawable) { } @Override public void init(GLAutoDrawable drawable) { System.out.println("init"); GL3 gl = new DebugGL3(drawable.getGL().getGL3()); drawable.setGL(gl); gl.glEnable(GL3.GL_DEPTH_TEST); gl.glEnable(GL3.GL_MULTISAMPLE); try { font = FontFactory.get(FontFactory.UBUNTU).getDefault(); renderState = RenderState.createRenderState(new ShaderState(), SVertex.factory()); textRenderer = TextRenderer.create(renderState, 0); } 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 } @Override public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) { } }