/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.tecnosens.ladon.streaming; import com.jogamp.common.nio.Buffers; import com.jogamp.opengl.util.awt.TextRenderer; import java.awt.Font; import java.nio.FloatBuffer; import java.nio.IntBuffer; import javax.media.opengl.GL; import javax.media.opengl.GL2; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; import javax.media.opengl.awt.GLCanvas; import javax.media.opengl.glu.GLU; /** * * @author Matteo Battaglio */ public class JOGLTextRenderingCanvas extends GLCanvas implements GLEventListener { private static final float[] quadVertexArray = {-1.0f, -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, 0.0f}; private static final FloatBuffer quadVertices = Buffers.newDirectFloatBuffer(quadVertexArray); private int quadVerticesHandle; private final GLU glu = new GLU(); private TextRenderer textRenderer; public JOGLTextRenderingCanvas() { addGLEventListener(this); } @Override public void init(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glEnable(GL.GL_DEPTH_TEST); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); IntBuffer vboHandles = IntBuffer.allocate(1); gl.glGenBuffers(vboHandles.capacity(), vboHandles); quadVerticesHandle = vboHandles.get(0); gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, quadVerticesHandle); gl.glBufferData(GL2.GL_ARRAY_BUFFER, quadVertices.capacity() * 4, quadVertices, GL2.GL_STATIC_DRAW); gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); this.textRenderer = new TextRenderer(new Font(Font.SANS_SERIF, Font.BOLD, 14)); textRenderer.setUseVertexArrays(true); } @Override public void dispose(GLAutoDrawable drawable) { } @Override public synchronized void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glEnableClientState(GL2.GL_VERTEX_ARRAY); gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -5.0f); gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, quadVerticesHandle); gl.glVertexPointer(3, GL2.GL_FLOAT, 0, 0); gl.glDrawArrays(GL2.GL_TRIANGLE_STRIP, 0, 4); gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); gl.glDisableClientState(GL2.GL_VERTEX_ARRAY); textRenderer.beginRendering(drawable.getWidth(), drawable.getHeight()); textRenderer.draw("JOGL is fantastic", 10, 10); textRenderer.endRendering(); } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { GL2 gl = drawable.getGL().getGL2(); if (height <= 0) { // avoid a divide by zero error! height = 1; } float panelAspectRatio = (float) width / (float) height; gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL2.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(45.0f, panelAspectRatio, 1.0f, 1000.0f); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); } }