diff options
Diffstat (limited to 'src/jogl')
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); |