Skip to content

Instantly share code, notes, and snippets.

@arya-s
Created April 17, 2014 09:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arya-s/10968151 to your computer and use it in GitHub Desktop.
Save arya-s/10968151 to your computer and use it in GitHub Desktop.
Trying to use JOGL's curve TextRenderer
package experiments;
import static javax.media.opengl.GL.GL_COLOR_BUFFER_BIT;
import static javax.media.opengl.GL.GL_DEPTH_BUFFER_BIT;
import java.awt.BorderLayout;
import java.awt.Container;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import javax.media.opengl.GL4;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
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.glsl.ShaderState;
public class TextRendererTest implements GLEventListener{
private ShaderState shaderState;
private RenderState renderState;
private TextRenderer textRenderer;
private float[] position;
private int[] texSize;
private int fontSize;
private Font font;
@Override
public void display(GLAutoDrawable glad) {
render(glad);
}
// Render a triangle
private void render(GLAutoDrawable glad) {
GL4 gl = glad.getGL().getGL4();
gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
shaderState.useProgram(gl, true);
textRenderer.resetModelview(null);
textRenderer.translate(gl, 10, 10, 0);
textRenderer.drawString3D(gl, font, "HELLO WORLD", position, fontSize, texSize);
shaderState.useProgram(gl, false);
}
@Override
public void reshape(GLAutoDrawable glad, int x, int y, int width, int height){
System.out.println("Reshape issued by "+Thread.currentThread()+": "+width+"x"+height);
}
@Override
public void init(GLAutoDrawable glad) {
GL4 gl = glad.getGL().getGL4();
shaderState = new ShaderState();
renderState = RenderState.createRenderState(shaderState, SVertex.factory());
textRenderer = TextRenderer.create(renderState, 0);
textRenderer.init(gl);
textRenderer.setAlpha(gl, 1f);
textRenderer.setColorStatic(gl, 1f, 1f, 1f);
position = new float[]{ 0f, 0f, 0f };
texSize = new int[] { 0 };
fontSize = 38;
try {
font = FontFactory.get(FontFactory.UBUNTU).getDefault();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void dispose(GLAutoDrawable glad) {
}
public static void main(String args[]) throws InterruptedException, InvocationTargetException {
GLCapabilities glCaps = new GLCapabilities(null);
final GLWindow glWindow = GLWindow.create(glCaps);
glWindow.setTitle("Fullscreen Test");
glWindow.addGLEventListener(new TextRendererTest());
final Animator animator = new Animator(glWindow);
animator.start();
final NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow);
final Container container = new Container();
container.setLayout(new BorderLayout());
container.add(newtCanvasAWT, BorderLayout.CENTER);
final JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(container, BorderLayout.CENTER);
final JFrame frame = new JFrame("JOGL Text Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame.setSize(640, 480);
frame.validate();
frame.setVisible(true);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment