aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/jogamp/graph
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/jogamp/graph')
-rwxr-xr-xsrc/com/jogamp/graph/curve/Region.java11
-rw-r--r--src/com/jogamp/graph/curve/opengl/RegionRenderer.java4
-rw-r--r--src/com/jogamp/graph/curve/opengl/Renderer.java14
-rw-r--r--src/com/jogamp/graph/curve/opengl/TextRenderer.java46
4 files changed, 54 insertions, 21 deletions
diff --git a/src/com/jogamp/graph/curve/Region.java b/src/com/jogamp/graph/curve/Region.java
index 5c4e8dad1..051cb1c38 100755
--- a/src/com/jogamp/graph/curve/Region.java
+++ b/src/com/jogamp/graph/curve/Region.java
@@ -46,14 +46,17 @@ import com.jogamp.opengl.util.PMVMatrix;
public interface Region {
/** The vertices index in an OGL object
*/
- public static int VERTEX_POS_INDX = 0;
+ public static int VERTEX_ATTR_IDX = 0;
/** The Texture Coord index in an OGL object
*/
- public static int TEX_COORD = 1;
+ public static int TEXCOORD_ATTR_IDX = 1;
- public static int SINGLE_PASS = 10;
- public static int TWO_PASS = 20;
+ /** single pass rendering, fast, but AA might not be perfect */
+ public static int SINGLE_PASS = 1;
+
+ /** two pass rendering, slower and more resource hungry (FBO), but AA is perfect */
+ public static int TWO_PASS = 2;
/** Updates a graph region by updating the ogl related
* objects for use in rendering. if called for the first time
diff --git a/src/com/jogamp/graph/curve/opengl/RegionRenderer.java b/src/com/jogamp/graph/curve/opengl/RegionRenderer.java
index 746eba636..c1fec10b8 100644
--- a/src/com/jogamp/graph/curve/opengl/RegionRenderer.java
+++ b/src/com/jogamp/graph/curve/opengl/RegionRenderer.java
@@ -59,7 +59,7 @@ public abstract class RegionRenderer extends Renderer {
* @return the resulting Region.
*/
protected Region createRegion(GL2ES2 gl, OutlineShape outlineShape, float sharpness) {
- Region region = RegionFactory.create(gl.getContext(), st, regionType);
+ Region region = RegionFactory.create(gl.getContext(), st, renderType);
outlineShape.transformOutlines(OutlineShape.QUADRATIC_NURBS);
@@ -78,7 +78,7 @@ public abstract class RegionRenderer extends Renderer {
* @return the resulting Region inclusive the generated region
*/
protected Region createRegion(GL2ES2 gl, OutlineShape[] outlineShapes, float sharpness) {
- Region region = RegionFactory.create(gl.getContext(), st, regionType);
+ Region region = RegionFactory.create(gl.getContext(), st, renderType);
int numVertices = region.getNumVertices();
diff --git a/src/com/jogamp/graph/curve/opengl/Renderer.java b/src/com/jogamp/graph/curve/opengl/Renderer.java
index a36cf870b..863928ed4 100644
--- a/src/com/jogamp/graph/curve/opengl/Renderer.java
+++ b/src/com/jogamp/graph/curve/opengl/Renderer.java
@@ -6,7 +6,6 @@ import javax.media.opengl.fixedfunc.GLMatrixFunc;
import jogamp.opengl.Debug;
-import com.jogamp.graph.curve.Region;
import com.jogamp.graph.geom.Vertex;
import com.jogamp.graph.geom.opengl.SVertex;
import com.jogamp.opengl.util.PMVMatrix;
@@ -34,15 +33,20 @@ public abstract class Renderer {
protected ShaderState st = new ShaderState();
protected PMVMatrix pmvMatrix = new PMVMatrix();
protected GLUniformData mgl_PMVMatrix;
- protected int regionType = Region.SINGLE_PASS;
+ protected int renderType;
protected int vp_width = 0;
protected int vp_height = 0;
private boolean vboSupported = false;
private boolean initialized = false;
- protected Renderer(Vertex.Factory<? extends Vertex> factory, int type) {
- this.regionType = type;
+ /**
+ *
+ * @param factory
+ * @param renderType either {@link com.jogamp.graph.curve.Region#SINGLE_PASS} or {@link com.jogamp.graph.curve.Region#TWO_PASS}
+ */
+ protected Renderer(Vertex.Factory<? extends Vertex> factory, int renderType) {
+ this.renderType = renderType;
this.pointFactory = (null != factory) ? factory : SVertex.factory();
}
@@ -52,6 +56,8 @@ public abstract class Renderer {
public final boolean isVBOSupported() { return vboSupported; }
+ public final int getRenderType() { return renderType; }
+
public final int getWidth() { return vp_width; }
public final int getHeight() { return vp_height; }
diff --git a/src/com/jogamp/graph/curve/opengl/TextRenderer.java b/src/com/jogamp/graph/curve/opengl/TextRenderer.java
index 83f2c93ca..2bb99d27c 100644
--- a/src/com/jogamp/graph/curve/opengl/TextRenderer.java
+++ b/src/com/jogamp/graph/curve/opengl/TextRenderer.java
@@ -1,5 +1,6 @@
package com.jogamp.graph.curve.opengl;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -15,8 +16,6 @@ import com.jogamp.graph.geom.Vertex;
public abstract class TextRenderer extends Renderer {
- protected HashMap<String, GlyphString> strings = new HashMap<String, GlyphString>();
-
/**
* Create a Hardware accelerated Text Renderer.
* @param factory optional Point.Factory for Vertex construction. Default is Vertex.Factory.
@@ -58,22 +57,47 @@ public abstract class TextRenderer extends Renderer {
GlyphString glyphString = new GlyphString(pointFactory, font.getName(), str);
glyphString.createfromFontPath(paths, affineTransform);
- glyphString.generateRegion(gl.getContext(), sharpness, st, regionType);
+ glyphString.generateRegion(gl.getContext(), sharpness, st, renderType);
return glyphString;
}
- protected static String getTextHashCode(Font font, String str, int fontSize) {
- // FIXME: use integer hash code
- return font.getName() + "." + str.hashCode() + "." + fontSize;
- }
-
public void flushCache() {
- Iterator<GlyphString> iterator = strings.values().iterator();
+ Iterator<GlyphString> iterator = stringCacheMap.values().iterator();
while(iterator.hasNext()){
GlyphString glyphString = iterator.next();
glyphString.destroy();
}
- strings.clear();
- }
+ stringCacheMap.clear();
+ stringCacheArray.clear();
+ }
+
+ public final void setCacheMaxSize(int newSize ) { stringCacheMaxSize = newSize; validateCache(0); }
+ public final int getCacheMaxSize() { return stringCacheMaxSize; }
+ public final int getCacheSize() { return stringCacheArray.size(); }
+
+ protected void validateCache(int space) {
+ while ( getCacheSize() + space > getCacheMaxSize() ) {
+ String key = stringCacheArray.remove(0);
+ stringCacheMap.remove(key);
+ }
+ }
+
+ protected GlyphString getCachedGlyphString(Font font, String str, int fontSize) {
+ final String key = font.getName() + "." + str.hashCode() + "." + fontSize;
+ return stringCacheMap.get(key);
+ }
+
+ protected void addCachedGlyphString(Font font, String str, int fontSize, GlyphString glyphString) {
+ final String key = font.getName() + "." + str.hashCode() + "." + fontSize;
+ validateCache(1);
+ stringCacheMap.put(key, glyphString);
+ stringCacheArray.add(stringCacheArray.size(), key);
+ }
+
+ // Cache is adding at the end of the array
+ public static final int DEFAULT_CACHE_SIZE = 32;
+ private HashMap<String, GlyphString> stringCacheMap = new HashMap<String, GlyphString>(DEFAULT_CACHE_SIZE);
+ private ArrayList<String> stringCacheArray = new ArrayList<String>(DEFAULT_CACHE_SIZE);
+ private int stringCacheMaxSize = DEFAULT_CACHE_SIZE; // -1 unlimited, 0 off, >0 limited
} \ No newline at end of file