From 9c71f276d1fcc87b69b413847fd1da34b30d0932 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Fri, 4 Apr 2014 02:30:00 +0200 Subject: Bug 801: Cleanup shader-program location/data update ; Add COLORTEXTURE + TextureSequence to Region (Demo: TextureButton) Cleanup shader-program location/data update - GLUniformData: - Allow lazy data setup, as used for RenderState.ProgramLocal, see below - RenderState - Separate data (pmv, weight, colorStatic) from program-local uniforms -> add class ProgramLocal. Reduces uniform location lookups, since ProgramLocal is bound to Region impl. - ProgramLocal.update(..) needs to write uniform data always, since data is being used in multiple programs! - No 'dirty' tracking possible, removed - see above. - RegionRenderer - Fix shader-selection: 2-pass programs differ from 1-pass! - No shader-setup at init +++ Add COLORTEXTURE + TextureSequence to Region - Create color-texture coords in vertex-shader via region's bounding box (pass-1) - Use color-texture unit in pass-1 if enabled (own shader program) - Use TextureSequence in Region impl. providing all required data (unit + texture-name) - Demo: TextureButton (a UIShape) --- .../com/jogamp/graph/curve/opengl/GLRegion.java | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java') 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 9505f2a9d..3c6045a1f 100644 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java @@ -35,6 +35,7 @@ import jogamp.graph.curve.opengl.VBORegion2PVBAAES2; import jogamp.graph.curve.opengl.VBORegionSPES2; import com.jogamp.opengl.util.PMVMatrix; +import com.jogamp.opengl.util.texture.TextureSequence; import com.jogamp.graph.curve.Region; /** A GLRegion is the OGL binding of one or more OutlineShapes @@ -53,23 +54,31 @@ public abstract class GLRegion extends Region { * Create a GLRegion using the passed render mode * *

In case {@link Region#VBAA_RENDERING_BIT} is being requested the default texture unit - * {@link Region#TWO_PASS_DEFAULT_TEXTURE_UNIT} is being used.

- * - * @param rs the RenderState to be used + * {@link Region#DEFAULT_TWO_PASS_TEXTURE_UNIT} is being used.

* @param renderModes bit-field of modes, e.g. {@link Region#VARWEIGHT_RENDERING_BIT}, {@link Region#VBAA_RENDERING_BIT} + * @param colorTexSeq TODO + * @param rs the RenderState to be used */ - public static GLRegion create(int renderModes) { + public static GLRegion create(int renderModes, final TextureSequence colorTexSeq) { + if( null != colorTexSeq ) { + renderModes |= Region.COLORTEXTURE_RENDERING_BIT; + } else if( Region.hasColorTexture(renderModes) ) { + throw new IllegalArgumentException("COLORTEXTURE_RENDERING_BIT set but null TextureSequence"); + } if( isVBAA(renderModes) ) { - return new VBORegion2PVBAAES2(renderModes, Region.TWO_PASS_DEFAULT_TEXTURE_UNIT); + return new VBORegion2PVBAAES2(renderModes, colorTexSeq, Region.DEFAULT_TWO_PASS_TEXTURE_UNIT); } else if( isMSAA(renderModes) ) { - return new VBORegion2PMSAAES2(renderModes, Region.TWO_PASS_DEFAULT_TEXTURE_UNIT); + return new VBORegion2PMSAAES2(renderModes, colorTexSeq, Region.DEFAULT_TWO_PASS_TEXTURE_UNIT); } else { - return new VBORegionSPES2(renderModes); + return new VBORegionSPES2(renderModes, colorTexSeq); } } - protected GLRegion(int renderModes) { + protected final TextureSequence colorTexSeq; + + protected GLRegion(int renderModes, TextureSequence colorTexSeq) { super(renderModes); + this.colorTexSeq = colorTexSeq; } /** -- cgit v1.2.3