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_v3 implements GLEventListener { JFrame frame = null; NewtCanvasAWT canvas = null; static GLWindow glw = null; public static Font font; public static RenderState renderState = null; public static RegionRenderer regionRenderer = null; public static TextRenderer textRenderer = null; public static GlyphString glyphString = null; public static GLRegion region = 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); 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_v3 tr = new TestTextRendering_v3(); 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); if(!regionRenderer.isInitialized()) { System.out.println("Initializing"); regionRenderer.init(gl); regionRenderer.setAlpha(gl, 1.0f); regionRenderer.setColorStatic(gl, 1, 0, 0); } else { System.out.println("Initialized"); } renderState.getShaderState().useProgram(gl, true); regionRenderer.resetModelview(gl); //renderState.pmvMatrix().glMultMatrixf(??, 0); regionRenderer.setColorStatic(gl, 1, 1, 0); regionRenderer.setAlpha(gl, 0.6f); regionRenderer.updateMatrix(gl); final float[] textPosition = new float[] {0, 0, 0}; final int[] texSize = new int[] { 400 }; regionRenderer.draw(gl, region, textPosition, texSize); renderState.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); glyphString = textRenderer.createString(gl, font, 20, "Hi2"); region = glyphString.createRegion(gl, 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) { } }