From fe3daea00da48c90a4e0c90cf37514a3ab7093d6 Mon Sep 17 00:00:00 2001
From: Sven Gothel
+ * User shall consider {@link RegionRenderer#enable(GL2ES2, boolean) enabling}
+ * the renderer beforehand and {@link RegionRenderer#enable(GL2ES2, boolean) disabling}
+ * it afterwards when used in conjunction with other renderer.
+ *
+ * Users shall also consider setting the {@link GL#glClearColor(float, float, float, float) Clear Color}
+ * appropriately:
+ *
+ *
+ * The alpha component shall be set to zero.
+ * Note: If {@link GL#GL_BLEND blending} is enabled, the
+ * {@link RegionRenderer} might need to be
+ * {@link RegionRenderer#create(RenderState, int, com.jogamp.graph.curve.opengl.RegionRenderer.GLCallback, com.jogamp.graph.curve.opengl.RegionRenderer.GLCallback) created}
+ * with the appropriate {@link {@link RegionRenderer.GLCallback callbacks}.
+ *
+ * The optional {@link GLCallback}s enableCallback
and disableCallback
+ * maybe used to issue certain tasks at {@link #enable(GL2ES2, boolean)}.
+ * For example, instances {@link #defaultBlendEnable} and {@link #defaultBlendDisable}
+ * can be utilized to enable and disable {@link GL#GL_BLEND}.
+ *
null
will be issued at
+ * {@link #init(GL2ES2) init(gl)} and {@link #enable(GL2ES2, boolean) enable(gl, true)}.
+ * @param disableCallback optional {@link GLCallback}, if not null
will be issued at
+ * {@link #enable(GL2ES2, boolean) enable(gl, false)}.
* @return an instance of Region Renderer
+ * @see #enable(GL2ES2, boolean)
*/
- public static RegionRenderer create(RenderState rs, int renderModes) {
- return new jogamp.graph.curve.opengl.RegionRendererImpl01(rs, renderModes);
+ public static RegionRenderer create(final RenderState rs, final int renderModes,
+ final GLCallback enableCallback, final GLCallback disableCallback) {
+ return new jogamp.graph.curve.opengl.RegionRendererImpl01(rs, renderModes, enableCallback, disableCallback);
}
protected final int renderModes;
protected final RenderState rs;
+ protected final GLCallback enableCallback;
+ protected final GLCallback disableCallback;
+
protected int vp_width;
protected int vp_height;
protected boolean initialized;
@@ -96,9 +149,11 @@ public abstract class RegionRenderer {
* @param rs the used {@link RenderState}
* @param renderModes bit-field of modes
*/
- protected RegionRenderer(RenderState rs, int renderModes) {
+ protected RegionRenderer(final RenderState rs, final int renderModes, final GLCallback enableCallback, final GLCallback disableCallback) {
this.rs = rs;
this.renderModes = renderModes;
+ this.enableCallback = enableCallback;
+ this.disableCallback = disableCallback;
}
public final int getRenderModes() {
@@ -148,8 +203,9 @@ public abstract class RegionRenderer {
rs.attachTo(gl);
- gl.glEnable(GL2ES2.GL_BLEND);
- gl.glBlendFunc(GL2ES2.GL_SRC_ALPHA, GL2ES2.GL_ONE_MINUS_SRC_ALPHA); // FIXME: alpha blending stage ?
+ if( null != enableCallback ) {
+ enableCallback.run(gl, this);
+ }
initialized = initImpl(gl);
if(!initialized) {
@@ -191,7 +247,25 @@ public abstract class RegionRenderer {
public final RenderState getRenderState() { return rs; }
public final ShaderState getShaderState() { return rs.getShaderState(); }
+ /**
+ * Enabling or disabling the {@link RenderState#getShaderState() RenderState}'s
+ * {@link ShaderState#useProgram(GL2ES2, boolean) ShaderState program}.
+ * + * In case enable and disable {@link GLCallback}s are setup via {@link #create(RenderState, int, GLCallback, GLCallback)}, + * they will be called before toggling the shader program. + *
+ * @see #create(RenderState, int, GLCallback, GLCallback) + */ public final void enable(GL2ES2 gl, boolean enable) { + if( enable ) { + if( null != enableCallback ) { + enableCallback.run(gl, this); + } + } else { + if( null != disableCallback ) { + disableCallback.run(gl, this); + } + } rs.getShaderState().useProgram(gl, enable); } -- cgit v1.2.3