public class TextRenderer
extends java.lang.Object
Using the TextRenderer
is simple. Add a
"TextRenderer renderer;
" field to your GLEventListener
. In your init
method, add:
renderer = new TextRenderer(new Font("SansSerif", Font.BOLD, 36));
In the display
method of your
GLEventListener
, add:
renderer.beginRendering(drawable.getWidth(), drawable.getHeight()); // optionally set the color renderer.setColor(1.0f, 0.2f, 0.2f, 0.8f); renderer.draw("Text to draw", xPosition, yPosition); // ... more draw commands, color changes, etc. renderer.endRendering();Unless you are sharing textures and display lists between OpenGL contexts, you do not need to call the
dispose
method of the TextRenderer; the OpenGL resources it uses
internally will be cleaned up automatically when the OpenGL
context is destroyed. Note that the TextRenderer may cause the vertex and texture coordinate array buffer bindings to change, or to be unbound. This is important to note if you are using Vertex Buffer Objects (VBOs) in your application.
Internally, the renderer uses a rectangle packing algorithm to
pack both glyphs and full Strings' rendering results (which are
variable size) onto a larger OpenGL texture. The internal backing
store is maintained using a TextureRenderer
. A least
recently used (LRU) algorithm is used to discard previously
rendered strings; the specific algorithm is undefined, but is
currently implemented by flushing unused Strings' rendering
results every few hundred rendering cycles, where a rendering
cycle is defined as a pair of calls to beginRendering
/ endRendering
.
Modifier and Type | Class and Description |
---|---|
static class |
TextRenderer.DefaultRenderDelegate |
static interface |
TextRenderer.RenderDelegate
Class supporting more full control over the process of rendering the bitmapped text.
|
Constructor and Description |
---|
TextRenderer(java.awt.Font font)
Creates a new TextRenderer with the given font, using no
antialiasing or fractional metrics, and the default
RenderDelegate.
|
TextRenderer(java.awt.Font font,
boolean mipmap)
Creates a new TextRenderer with the given font, using no antialiasing or fractional metrics, and the default
RenderDelegate.
|
TextRenderer(java.awt.Font font,
boolean antialiased,
boolean useFractionalMetrics)
Creates a new TextRenderer with the given Font, specified font properties, and default RenderDelegate.
|
TextRenderer(java.awt.Font font,
boolean antialiased,
boolean useFractionalMetrics,
TextRenderer.RenderDelegate renderDelegate)
Creates a new TextRenderer with the given Font, specified font properties, and given RenderDelegate.
|
TextRenderer(java.awt.Font font,
boolean antialiased,
boolean useFractionalMetrics,
TextRenderer.RenderDelegate renderDelegate,
boolean mipmap)
Creates a new TextRenderer with the given Font, specified font properties, and given RenderDelegate.
|
Modifier and Type | Method and Description |
---|---|
void |
begin3DRendering()
Begins rendering of 2D text in 3D with this
TextRenderer into the current OpenGL drawable. |
void |
beginRendering(int width,
int height)
Begins rendering with this
TextRenderer into the current OpenGL drawable, pushing the
projection and modelview matrices and some state bits and setting up a two-dimensional orthographic projection
with (0, 0) as the lower-left coordinate and (width, height) as the upper-right coordinate. |
void |
beginRendering(int width,
int height,
boolean disableDepthTest)
Begins rendering with this
TextRenderer into the current OpenGL drawable, pushing the
projection and modelview matrices and some state bits and setting up a two-dimensional orthographic projection
with (0, 0) as the lower-left coordinate and (width, height) as the upper-right coordinate. |
void |
dispose()
Disposes of all resources this TextRenderer is using.
|
void |
draw(java.lang.CharSequence str,
int x,
int y)
Draws the supplied CharSequence at the desired location using the renderer's current color.
|
void |
draw(java.lang.String str,
int x,
int y)
Draws the supplied String at the desired location using the renderer's current color.
|
void |
draw3D(java.lang.CharSequence str,
float x,
float y,
float z,
float scaleFactor)
Draws the supplied CharSequence at the desired 3D location using the renderer's current color.
|
void |
draw3D(java.lang.String str,
float x,
float y,
float z,
float scaleFactor)
Draws the supplied String at the desired 3D location using the renderer's current color.
|
void |
end3DRendering()
Ends a 3D render cycle with this
TextRenderer . |
void |
endRendering()
Ends a render cycle with this
TextRenderer . |
void |
flush()
Causes the TextRenderer to flush any internal caches it may be maintaining and draw its rendering results to the
screen.
|
java.awt.geom.Rectangle2D |
getBounds(java.lang.CharSequence str)
Returns the bounding rectangle of the given CharSequence, assuming it was rendered at the origin.
|
java.awt.geom.Rectangle2D |
getBounds(java.lang.String str)
Returns the bounding rectangle of the given String, assuming it was rendered at the origin.
|
float |
getCharWidth(char inChar)
Returns the pixel width of the given character.
|
java.awt.Font |
getFont()
Returns the Font this renderer is using.
|
java.awt.font.FontRenderContext |
getFontRenderContext()
Returns a FontRenderContext which can be used for external text-related size computations.
|
boolean |
getSmoothing()
Indicates whether smoothing is enabled in the backing TextureRenderer of this TextRenderer.
|
boolean |
getUseVertexArrays()
Indicates whether vertex arrays are being used internally for rendering, or whether text is rendered using the
OpenGL immediate mode commands.
|
void |
setColor(java.awt.Color color)
Changes the current color of this TextRenderer to the supplied one.
|
void |
setColor(float r,
float g,
float b,
float a)
Changes the current color of this TextRenderer to the supplied one, where each component ranges from 0.0f - 1.0f.
|
void |
setSmoothing(boolean smoothing)
Sets whether smoothing (i.e., GL_LINEAR filtering) is enabled in the backing TextureRenderer of this
TextRenderer.
|
void |
setUseVertexArrays(boolean useVertexArrays)
Sets whether vertex arrays are being used internally for rendering, or whether text is rendered using the OpenGL
immediate mode commands.
|
public TextRenderer(java.awt.Font font)
TextRenderer(font, false,
false)
.font
- the font to render withpublic TextRenderer(java.awt.Font font, boolean mipmap)
mipmap
is true, attempts to use OpenGL's automatic mipmap generation for better
smoothing when rendering the TextureRenderer's contents at a distance. Equivalent to
TextRenderer(font, false, false)
.font
- the font to render withmipmap
- whether to attempt use of automatic mipmap generationpublic TextRenderer(java.awt.Font font, boolean antialiased, boolean useFractionalMetrics)
antialiased
and useFractionalMetrics
flags provide control over the same properties at
the Java 2D level. No mipmap support is requested. Equivalent to
TextRenderer(font, antialiased, useFractionalMetrics,
null)
.font
- the font to render withantialiased
- whether to use antialiased fontsuseFractionalMetrics
- whether to use fractional font metrics at the Java 2D levelpublic TextRenderer(java.awt.Font font, boolean antialiased, boolean useFractionalMetrics, TextRenderer.RenderDelegate renderDelegate)
antialiased
and useFractionalMetrics
flags provide control over the same properties at
the Java 2D level. The renderDelegate
provides more control over the text rendered. No mipmap
support is requested.font
- the font to render withantialiased
- whether to use antialiased fontsuseFractionalMetrics
- whether to use fractional font metrics at the Java 2D levelrenderDelegate
- the render delegate to use to draw the text's bitmap, or null to use the default onepublic TextRenderer(java.awt.Font font, boolean antialiased, boolean useFractionalMetrics, TextRenderer.RenderDelegate renderDelegate, boolean mipmap)
antialiased
and useFractionalMetrics
flags provide control over the same properties at
the Java 2D level. The renderDelegate
provides more control over the text rendered. If
mipmap
is true, attempts to use OpenGL's automatic mipmap generation for better smoothing when
rendering the TextureRenderer's contents at a distance.font
- the font to render withantialiased
- whether to use antialiased fontsuseFractionalMetrics
- whether to use fractional font metrics at the Java 2D levelrenderDelegate
- the render delegate to use to draw the text's bitmap, or null to use the default onemipmap
- whether to attempt use of automatic mipmap generationpublic void begin3DRendering() throws com.jogamp.opengl.GLException
TextRenderer
into the current OpenGL drawable. Assumes the end user is responsible for setting up the modelview
and projection matrices, and will render text using the draw3D
method. This method pushes some
OpenGL state bits, binds and enables the internal OpenGL texture object, sets the texture environment mode to
GL_MODULATE, and changes the current color to the last color set with this TextRenderer via setColor
.com.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void beginRendering(int width, int height) throws com.jogamp.opengl.GLException
TextRenderer
into the current OpenGL drawable, pushing the
projection and modelview matrices and some state bits and setting up a two-dimensional orthographic projection
with (0, 0) as the lower-left coordinate and (width, height) as the upper-right coordinate. Binds and enables the
internal OpenGL texture object, sets the texture environment mode to GL_MODULATE, and changes the current color
to the last color set with this TextRenderer via setColor
. This method disables the depth test
and is equivalent to beginRendering(width, height, true).width
- the width of the current on-screen OpenGL drawableheight
- the height of the current on-screen OpenGL drawablecom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void beginRendering(int width, int height, boolean disableDepthTest) throws com.jogamp.opengl.GLException
TextRenderer
into the current OpenGL drawable, pushing the
projection and modelview matrices and some state bits and setting up a two-dimensional orthographic projection
with (0, 0) as the lower-left coordinate and (width, height) as the upper-right coordinate. Binds and enables the
internal OpenGL texture object, sets the texture environment mode to GL_MODULATE, and changes the current color
to the last color set with this TextRenderer via setColor
. Disables the depth test if the
disableDepthTest argument is true.width
- the width of the current on-screen OpenGL drawableheight
- the height of the current on-screen OpenGL drawabledisableDepthTest
- whether to disable the depth testcom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void dispose() throws com.jogamp.opengl.GLException
com.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void draw(java.lang.CharSequence str, int x, int y) throws com.jogamp.opengl.GLException
str
- the string to drawx
- the x coordinate at which to drawy
- the y coordinate at which to drawcom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void draw(java.lang.String str, int x, int y) throws com.jogamp.opengl.GLException
draw(CharSequence, int, int)
.str
- The string to draw.x
- The x coordinate at which to draw.y
- The y coordinate at which to draw.com.jogamp.opengl.GLException
public void draw3D(java.lang.CharSequence str, float x, float y, float z, float scaleFactor)
str
- the string to drawx
- the x coordinate at which to drawy
- the y coordinate at which to drawz
- the z coordinate at which to drawscaleFactor
- a uniform scale factor applied to the width and height of the drawn rectanglecom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void draw3D(java.lang.String str, float x, float y, float z, float scaleFactor)
draw3D(CharSequence, float, float, float, float)
.str
- the string to drawx
- the x coordinate at which to drawy
- the y coordinate at which to drawz
- the z coordinate at which to drawscaleFactor
- a uniform scale factor applied to the width and height of the drawn rectanglepublic void end3DRendering() throws com.jogamp.opengl.GLException
TextRenderer
. Restores several OpenGL state bits. Should be
paired with begin3DRendering
.com.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void endRendering() throws com.jogamp.opengl.GLException
TextRenderer
. Restores the projection and modelview matrices
as well as several OpenGL state bits. Should be paired with beginRendering
.com.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void flush()
public java.awt.geom.Rectangle2D getBounds(java.lang.CharSequence str)
GlyphVector.getVisualBounds()
. Most applications will use only the width and height of the returned
Rectangle for the purposes of centering or justifying the String. It is not specified which Java 2D bounds (getVisualBounds
,
getPixelBounds
, etc.) the returned bounds correspond to,
although every effort is made to ensure an accurate bound.str
- The character sequence to evaluate.public java.awt.geom.Rectangle2D getBounds(java.lang.String str)
getBounds(CharSequence)
.str
- the string to evaluate.public float getCharWidth(char inChar)
inChar
- the char to testpublic java.awt.Font getFont()
public java.awt.font.FontRenderContext getFontRenderContext()
beginRendering
/ endRendering
pairs.public boolean getSmoothing()
public final boolean getUseVertexArrays()
public void setColor(java.awt.Color color) throws com.jogamp.opengl.GLException
color
- the new color to use for rendering textcom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void setColor(float r, float g, float b, float a) throws com.jogamp.opengl.GLException
Texture
, although premultiplied colors are used internally. The default
color is opaque white.r
- the red component of the new colorg
- the green component of the new colorb
- the blue component of the new colora
- the alpha component of the new color, 0.0f = completely transparent, 1.0f = completely opaquecom.jogamp.opengl.GLException
- If an OpenGL context is not current when this method is calledpublic void setSmoothing(boolean smoothing)
smoothing
- the setting to apply.public void setUseVertexArrays(boolean useVertexArrays)
useVertexArrays
- the setting to apply.