aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes')
-rw-r--r--src/jogl/classes/com/jogamp/graph/curve/Region.java86
-rwxr-xr-xsrc/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java6
-rw-r--r--src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java2
-rwxr-xr-xsrc/jogl/classes/jogamp/graph/curve/opengl/RegionFactory.java10
-rwxr-xr-xsrc/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java2
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java9
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java51
7 files changed, 96 insertions, 70 deletions
diff --git a/src/jogl/classes/com/jogamp/graph/curve/Region.java b/src/jogl/classes/com/jogamp/graph/curve/Region.java
index 168d8dd70..af15f9dc4 100644
--- a/src/jogl/classes/com/jogamp/graph/curve/Region.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/Region.java
@@ -35,8 +35,18 @@ import com.jogamp.graph.geom.AABBox;
import com.jogamp.graph.geom.Triangle;
import com.jogamp.graph.geom.Vertex;
+/** Abstract Outline shape GL representation
+ * define the method an OutlineShape(s) is
+ * binded rendered.
+ *
+ * @see GLRegion
+ */
public abstract class Region {
+
+ /** Debug flag for region impl (graph.curve)
+ */
public static final boolean DEBUG = Debug.debug("graph.curve");
+
public static final boolean DEBUG_INSTANCE = false;
/** View based Anti-Aliasing, A Two pass region rendering, slower
@@ -46,36 +56,57 @@ public abstract class Region {
public static final int VBAA_RENDERING_BIT = 1 << 0;
/** Use non uniform weights [0.0 .. 1.9] for curve region rendering.
- * Otherwise the default weight 1.0 for Bezier curve region rendering is being applied. */
+ * Otherwise the default weight 1.0 for uniform curve region rendering is being applied.
+ */
public static final int VARIABLE_CURVE_WEIGHT_BIT = 1 << 1;
-
+
public static final int TWO_PASS_DEFAULT_TEXTURE_UNIT = 0;
-
+
private final int renderModes;
private boolean dirty = true;
protected int numVertices = 0;
- protected boolean flipped = false;
protected final AABBox box = new AABBox();
protected ArrayList<Triangle> triangles = new ArrayList<Triangle>();
protected ArrayList<Vertex> vertices = new ArrayList<Vertex>();
-
+
public static boolean isVBAA(int renderModes) {
return 0 != ( renderModes & Region.VBAA_RENDERING_BIT );
}
-
- public static boolean usesVariableCurveWeight(int renderModes) {
+
+ /** Check if render mode capable of non uniform weights
+ * @param renderModes bit-field of modes, e.g. {@link Region#VARIABLE_CURVE_WEIGHT_BIT},
+ * {@link Region#VBAA_RENDERING_BIT}
+ * @return true of capable of non uniform weights
+ */
+ public static boolean isNonUniformWeight(int renderModes) {
return 0 != ( renderModes & Region.VARIABLE_CURVE_WEIGHT_BIT );
}
-
+
protected Region(int regionRenderModes) {
this.renderModes = regionRenderModes;
}
-
- public final int getRenderModes() { return renderModes; }
- public boolean isVBAA() { return Region.isVBAA(renderModes); }
- public boolean usesVariableCurveWeight() { return Region.usesVariableCurveWeight(renderModes); }
-
+ /** Get current Models
+ * @return bit-field of render modes
+ */
+ public final int getRenderModes() {
+ return renderModes;
+ }
+
+ /** Check if current Region is using VBAA
+ * @return true if capable of two pass rendering - VBAA
+ */
+ public boolean isVBAA() {
+ return Region.isVBAA(renderModes);
+ }
+
+ /** Check if current instance uses non uniform weights
+ * @return true if capable of nonuniform weights
+ */
+ public boolean isNonUniformWeight() {
+ return Region.isNonUniformWeight(renderModes);
+ }
+
/** Get the current number of vertices associated
* with this region. This number is not necessary equal to
* the OGL bound number of vertices.
@@ -84,7 +115,7 @@ public abstract class Region {
public final int getNumVertices(){
return numVertices;
}
-
+
/** Adds a {@link Triangle} object to the Region
* This triangle will be bound to OGL objects
* on the next call to {@code update}
@@ -96,7 +127,7 @@ public abstract class Region {
triangles.add(tri);
setDirty(true);
}
-
+
/** Adds a list of {@link Triangle} objects to the Region
* These triangles are to be binded to OGL objects
* on the next call to {@code update}
@@ -108,7 +139,7 @@ public abstract class Region {
triangles.addAll(tris);
setDirty(true);
}
-
+
/** Adds a {@link Vertex} object to the Region
* This vertex will be bound to OGL objects
* on the next call to {@code update}
@@ -121,7 +152,7 @@ public abstract class Region {
numVertices++;
setDirty(true);
}
-
+
/** Adds a list of {@link Vertex} objects to the Region
* These vertices are to be binded to OGL objects
* on the next call to {@code update}
@@ -134,24 +165,15 @@ public abstract class Region {
numVertices = vertices.size();
setDirty(true);
}
-
+
+ /**
+ * @return the AxisAligned bounding box of
+ * current region
+ */
public final AABBox getBounds(){
return box;
}
- /** Set if the y coordinate of the region should be flipped
- * {@code y=-y} used mainly for fonts since they use opposite vertex
- * as origion
- * @param flipped flag if the coordinate is flipped defaults to false.
- */
- public void setFlipped(boolean flipped) {
- this.flipped = flipped;
- }
-
- public final boolean isFlipped() {
- return flipped;
- }
-
/** Check if this region is dirty. A region is marked dirty
* when new Vertices, Triangles, and or Lines are added after a
* call to update()
@@ -162,7 +184,7 @@ public abstract class Region {
public final boolean isDirty() {
return dirty;
}
-
+
protected final void setDirty(boolean v) {
dirty = v;
}
diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
index c6165b6b3..749c7ef65 100755
--- a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
@@ -39,15 +39,15 @@ import com.jogamp.graph.geom.Triangle;
import com.jogamp.graph.geom.Vertex;
import jogamp.graph.curve.opengl.RegionFactory;
-/** A Region is the OGL binding of one or more OutlineShapes
+/** A GLRegion is the OGL binding of one or more OutlineShapes
* Defined by its vertices and generated triangles. The Region
* defines the final shape of the OutlineShape(s), which shall produced a shaded
* region on the screen.
*
- * Implementations of the Region shall take care of the OGL
+ * Implementations of the GLRegion shall take care of the OGL
* binding of the depending on its context, profile.
*
- * @see RegionFactory, OutlineShape
+ * @see Region, RegionFactory, OutlineShape
*/
public abstract class GLRegion extends Region {
diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java
index e45cacbf6..f1d31c345 100644
--- a/src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java
@@ -85,7 +85,7 @@ public abstract class Renderer {
return renderModes;
}
- public boolean usesVariableCurveWeight() { return Region.usesVariableCurveWeight(renderModes); }
+ public boolean usesVariableCurveWeight() { return Region.isNonUniformWeight(renderModes); }
/**
* @return true if Region's renderModes contains all bits as this Renderer's renderModes
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/RegionFactory.java b/src/jogl/classes/jogamp/graph/curve/opengl/RegionFactory.java
index e33a78ed8..e73b0cb85 100755
--- a/src/jogl/classes/jogamp/graph/curve/opengl/RegionFactory.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/RegionFactory.java
@@ -54,10 +54,20 @@ public class RegionFactory {
}
}
+ /** Create a Single Pass Region using the passed render mode
+ * @param renderModes bit-field of modes, e.g. {@link Region#VARIABLE_CURVE_WEIGHT_BIT},
+ * {@link Region#VBAA_RENDERING_BIT}
+ * @return
+ */
public static GLRegion createSinglePass(int renderModes) {
return new VBORegionSPES2(renderModes);
}
+ /** Create a Two Pass (VBAA) Region using the passed render mode
+ * @param renderModes bit-field of modes, e.g. {@link Region#VARIABLE_CURVE_WEIGHT_BIT},
+ * {@link Region#VBAA_RENDERING_BIT}
+ * @return
+ */
public static GLRegion createTwoPass(int renderModes, int textureUnit) {
return new VBORegion2PES2(renderModes, textureUnit);
}
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java
index dcfe3cae0..58086e06c 100755
--- a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java
@@ -48,7 +48,7 @@ public class RegionRendererImpl01 extends RegionRenderer {
@Override
protected String getFragmentShaderName(GL2ES2 gl) {
- if(Region.usesVariableCurveWeight(renderModes)){
+ if(Region.isNonUniformWeight(renderModes)){
return "curverenderer02" + getShaderGLVersionSuffix(gl);
}
return "curverenderer01" + getShaderGLVersionSuffix(gl);
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
index 285caacf9..6427bcd48 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java
@@ -153,11 +153,10 @@ public class VBORegion2PES2 extends GLRegion {
texCoordTxtAttr.rewind();
for(int i=0; i<vertices.size(); i++) {
final Vertex v = vertices.get(i);
- final float ysign = isFlipped() ? -1.0f : 1.0f ;
- verticeTxtAttr.putf( v.getX());
- verticeTxtAttr.putf(ysign * v.getY());
- verticeTxtAttr.putf( v.getZ());
- box.resize(v.getX(), ysign*v.getY(), v.getZ());
+ verticeTxtAttr.putf(v.getX());
+ verticeTxtAttr.putf(v.getY());
+ verticeTxtAttr.putf(v.getZ());
+ box.resize(v.getX(), v.getY(), v.getZ());
final float[] tex = v.getTexCoord();
texCoordTxtAttr.putf(tex[0]);
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
index 17fb29b1b..bad436a80 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
@@ -44,47 +44,47 @@ public class VBORegionSPES2 extends GLRegion {
private GLArrayDataServer verticeAttr = null;
private GLArrayDataServer texCoordAttr = null;
private GLArrayDataServer indices = null;
-
+
protected VBORegionSPES2(int renderModes) {
super(renderModes);
}
-
+
protected void update(GL2ES2 gl, RenderState rs) {
if(!isDirty()) {
return;
}
-
+
if(null == indices) {
final int initialSize = 256;
final ShaderState st = rs.getShaderState();
-
+
indices = GLArrayDataServer.createData(3, GL2ES2.GL_SHORT, initialSize, GL.GL_STATIC_DRAW, GL.GL_ELEMENT_ARRAY_BUFFER);
-
+
verticeAttr = GLArrayDataServer.createGLSL(st, AttributeNames.VERTEX_ATTR_NAME, 3,
- GL2ES2.GL_FLOAT, false, initialSize, GL.GL_STATIC_DRAW);
+ GL2ES2.GL_FLOAT, false, initialSize, GL.GL_STATIC_DRAW);
st.ownAttribute(verticeAttr, true);
-
+
texCoordAttr = GLArrayDataServer.createGLSL(st, AttributeNames.TEXCOORD_ATTR_NAME, 2,
- GL2ES2.GL_FLOAT, false, initialSize, GL.GL_STATIC_DRAW);
+ GL2ES2.GL_FLOAT, false, initialSize, GL.GL_STATIC_DRAW);
st.ownAttribute(texCoordAttr, true);
-
+
if(DEBUG_INSTANCE) {
System.err.println("VBORegionSPES2 Create: " + this);
}
}
-
+
// process triangles
indices.seal(gl, false);
indices.rewind();
for(int i=0; i<triangles.size(); i++) {
final Triangle t = triangles.get(i);
final Vertex[] t_vertices = t.getVertices();
-
+
if(t_vertices[0].getId() == Integer.MAX_VALUE){
t_vertices[0].setId(numVertices++);
t_vertices[1].setId(numVertices++);
t_vertices[2].setId(numVertices++);
-
+
vertices.add(t_vertices[0]);
vertices.add(t_vertices[1]);
vertices.add(t_vertices[2]);
@@ -100,7 +100,7 @@ public class VBORegionSPES2 extends GLRegion {
}
indices.seal(gl, true);
indices.enableBuffer(gl, false);
-
+
// process vertices and update bbox
box.reset();
verticeAttr.seal(gl, false);
@@ -109,12 +109,11 @@ public class VBORegionSPES2 extends GLRegion {
texCoordAttr.rewind();
for(int i=0; i<vertices.size(); i++) {
final Vertex v = vertices.get(i);
- final float ysign = isFlipped() ? -1.0f : 1.0f ;
- verticeAttr.putf( v.getX());
- verticeAttr.putf(ysign * v.getY());
- verticeAttr.putf( v.getZ());
- box.resize(v.getX(), ysign*v.getY(), v.getZ());
-
+ verticeAttr.putf(v.getX());
+ verticeAttr.putf(v.getY());
+ verticeAttr.putf(v.getZ());
+ box.resize(v.getX(), v.getY(), v.getZ());
+
final float[] tex = v.getTexCoord();
texCoordAttr.putf(tex[0]);
texCoordAttr.putf(tex[1]);
@@ -123,26 +122,22 @@ public class VBORegionSPES2 extends GLRegion {
verticeAttr.enableBuffer(gl, false);
texCoordAttr.seal(gl, true);
texCoordAttr.enableBuffer(gl, false);
-
- // update all bbox related data: nope
-
+
setDirty(false);
-
- // the buffers were disabled, since due to real/fbo switching and other vbo usage
}
-
+
protected void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int width) {
verticeAttr.enableBuffer(gl, true);
texCoordAttr.enableBuffer(gl, true);
indices.enableBuffer(gl, true);
-
+
gl.glDrawElements(GL2ES2.GL_TRIANGLES, indices.getElementNumber() * indices.getComponentNumber(), GL2ES2.GL_UNSIGNED_SHORT, 0);
-
+
verticeAttr.enableBuffer(gl, false);
texCoordAttr.enableBuffer(gl, false);
indices.enableBuffer(gl, false);
}
-
+
public final void destroy(GL2ES2 gl, RenderState rs) {
if(DEBUG_INSTANCE) {
System.err.println("VBORegionSPES2 Destroy: " + this);