1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package com.jogamp.graph.curve.opengl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import javax.media.opengl.GL2ES2;
import com.jogamp.graph.curve.OutlineShape;
import com.jogamp.graph.curve.Region;
import com.jogamp.graph.curve.RegionFactory;
import com.jogamp.graph.geom.Triangle;
import com.jogamp.graph.geom.Vertex;
public abstract class RegionRenderer extends Renderer {
/** Create a Hardware accelerated Region Renderer
*/
public static RegionRenderer create(Vertex.Factory<? extends Vertex> factory, int type) {
return new jogamp.graph.curve.opengl.RegionRendererImpl01(factory, type);
}
public RegionRenderer(Vertex.Factory<? extends Vertex> factory, int type) {
super(factory, type);
}
/** Render an array of Outline shapes combined in one region
* at the position provided the triangles of the
* shapes will be generated, if not yet generated
* @param outlineShapes array of OutlineShapes to Render.
* @param position the initial translation of the outlineShapes.
* @param texSize texture size for multipass render *
* @throws Exception if HwRegionRenderer not initialized
*/
public abstract void renderOutlineShapes(GL2ES2 gl, OutlineShape[] outlineShapes, float[] position, int texSize);
/** Render outline in 3D space at the position provided
* the triangles of the shapes will be generated, if not yet generated
* @param outlineShape the OutlineShape to Render.
* @param position the initial translation of the outlineShape.
* @param texSize texture size for multipass render
* @throws Exception if HwRegionRenderer not initialized
*/
public abstract void renderOutlineShape(GL2ES2 gl, OutlineShape outlineShape, float[] position, int texSize);
protected HashMap<Integer, Region> regions = new HashMap<Integer, Region>();
public void flushCache() {
Iterator<Region> iterator = regions.values().iterator();
while(iterator.hasNext()){
Region region = iterator.next();
region.destroy();
}
regions.clear();
}
/**
* @param sharpness parameter for Region generation
* @return the resulting Region inclusive the generated region
*/
protected Region createRegion(GL2ES2 gl, OutlineShape outlineShape, float sharpness) {
Region region = RegionFactory.create(gl.getContext(), st, regionType);
outlineShape.transformOutlines(OutlineShape.QUADRATIC_NURBS);
ArrayList<Triangle<Vertex>> triangles = (ArrayList<Triangle<Vertex>>) outlineShape.triangulate(sharpness);
ArrayList<Vertex> vertices = (ArrayList<Vertex>) outlineShape.getVertices();
region.addVertices(vertices);
region.addTriangles(triangles);
region.update();
return region;
}
/**
* @param sharpness parameter for Region generation
* @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);
int numVertices = region.getNumVertices();
for(OutlineShape outlineShape:outlineShapes){
outlineShape.transformOutlines(OutlineShape.QUADRATIC_NURBS);
ArrayList<Triangle<Vertex>> triangles = outlineShape.triangulate(sharpness);
region.addTriangles(triangles);
ArrayList<Vertex> vertices = outlineShape.getVertices();
for(Vertex vert:vertices){
vert.setId(numVertices++);
}
region.addVertices(vertices);
}
region.update();
return region;
}
protected static int getHashCode(OutlineShape outlineShape){
return outlineShape.hashCode();
}
protected static int getHashCode(OutlineShape[] outlineShapes){
int hashcode = 0;
for(OutlineShape outlineShape:outlineShapes){
hashcode += getHashCode(outlineShape);
}
return hashcode;
}
}
|