diff options
Diffstat (limited to 'src')
16 files changed, 67 insertions, 56 deletions
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 749c7ef65..63713887b 100755 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java @@ -114,14 +114,16 @@ public abstract class GLRegion extends Region { * current width/hight of window for multi pass rendering
* of the region.
* @param matrix current {@link PMVMatrix}.
+ * @param rs the RenderState to be used
* @param vp_width current screen width
* @param vp_height current screen height
- * @param width texture width for mp rendering
+ * @param texWidth desired texture width for multipass-rendering.
+ * The actual used texture-width is written back when mp rendering is enabled, otherwise the store is untouched.
*/
- public final void draw(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int width) {
+ public final void draw(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int[/*1*/] texWidth) {
update(gl, rs);
- drawImpl(gl, rs, vp_width, vp_height, width);
+ drawImpl(gl, rs, vp_width, vp_height, texWidth);
}
- protected abstract void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int width);
+ protected abstract void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int[/*1*/] texWidth);
}
diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java index 86d962fd8..2f078d7bb 100644 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java @@ -54,10 +54,11 @@ public abstract class RegionRenderer extends Renderer { * the triangles of the shapes will be generated, if not yet generated * @param region the OutlineShape to Render. * @param position the initial translation of the outlineShape. - * @param texSize texture size for multipass render + * @param texWidth desired texture width for multipass-rendering. + * The actual used texture-width is written back when mp rendering is enabled, otherwise the store is untouched. * @throws Exception if HwRegionRenderer not initialized */ - public final void draw(GL2ES2 gl, Region region, float[] position, int texSize) { + public final void draw(GL2ES2 gl, Region region, float[] position, int[/*1*/] texWidth) { if(!isInitialized()) { throw new GLException("RegionRenderer: not initialized!"); } @@ -65,14 +66,14 @@ public abstract class RegionRenderer extends Renderer { throw new GLException("Incompatible render modes, : region modes "+region.getRenderModes()+ " doesn't contain renderer modes "+this.getRenderModes()); } - drawImpl(gl, region, position, texSize); + drawImpl(gl, region, position, texWidth); } /** * Usually just dispatched the draw call to the Region's draw implementation, - * e.g. {@link com.jogamp.graph.curve.opengl.GLRegion#draw(GL2ES2, RenderState, int, int, int) GLRegion#draw(GL2ES2, RenderState, int, int, int)}. + * e.g. {@link com.jogamp.graph.curve.opengl.GLRegion#draw(GL2ES2, RenderState, int, int, int[]) GLRegion#draw(GL2ES2, RenderState, int, int, int[])}. */ - protected abstract void drawImpl(GL2ES2 gl, Region region, float[] position, int texSize); + protected abstract void drawImpl(GL2ES2 gl, Region region, float[] position, int[] texWidth); @Override protected void destroyImpl(GL2ES2 gl) { diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRenderer.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRenderer.java index b466670cc..8dc41b0c0 100644 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRenderer.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRenderer.java @@ -59,11 +59,12 @@ public abstract class TextRenderer extends Renderer { * @param str text to be rendered * @param position the lower left corner of the string * @param fontSize font size - * @param texSize texture size for multipass render + * @param texWidth desired texture width for multipass-rendering. + * The actual used texture-width is written back when mp rendering is enabled, otherwise the store is untouched. * @throws Exception if TextRenderer not initialized */ public abstract void drawString3D(GL2ES2 gl, Font font, - String str, float[] position, int fontSize, int texSize); + String str, float[] position, int fontSize, int[/*1*/] texSize); /**Create the resulting {@link GlyphString} that represents * the String wrt to the font. diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java index 06499208f..32a2f0b73 100755 --- a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java @@ -87,7 +87,7 @@ public class RegionRendererImpl01 extends RegionRenderer { }
@Override
- protected void drawImpl(GL2ES2 gl, Region region, float[] position, int texSize) {
+ protected void drawImpl(GL2ES2 gl, Region region, float[] position, int[] texSize) {
((GLRegion)region).draw(gl, rs, vp_width, vp_height, texSize);
}
}
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java b/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java index fa57b3468..05d0707e2 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java @@ -80,7 +80,7 @@ public class TextRendererImpl01 extends TextRenderer { } @Override - public void drawString3D(GL2ES2 gl, Font font, String str, float[] position, int fontSize, int texSize) { + public void drawString3D(GL2ES2 gl, Font font, String str, float[] position, int fontSize, int[/*1*/] texSize) { if(!isInitialized()){ throw new GLException("TextRendererImpl01: not initialized!"); } @@ -92,5 +92,4 @@ public class TextRendererImpl01 extends TextRenderer { glyphString.renderString3D(gl, rs, vp_width, vp_height, texSize); } - } diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java index 4c664e883..703fd6151 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PES2.java @@ -192,18 +192,18 @@ public class VBORegion2PES2 extends GLRegion { int[] maxTexSize = new int[] { -1 } ; - protected void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int width) { - if(vp_width <=0 || vp_height <= 0 || width <= 0){ + protected void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int[/*1*/] texWidth) { + if(vp_width <=0 || vp_height <= 0 || null==texWidth || texWidth[0] <= 0){ renderRegion(gl); } else { if(0 > maxTexSize[0]) { gl.glGetIntegerv(GL.GL_MAX_TEXTURE_SIZE, maxTexSize, 0); } - if(width > maxTexSize[0]) { - width = maxTexSize[0]; - } - if(width != tex_width_c) { - renderRegion2FBO(gl, rs, width); + if(texWidth[0] != tex_width_c) { + if(texWidth[0] > maxTexSize[0]) { + texWidth[0] = maxTexSize[0]; // clip to max - write-back user value! + } + renderRegion2FBO(gl, rs, texWidth); } // System.out.println("Scale: " + matrix.glGetMatrixf().get(1+4*3) +" " + matrix.glGetMatrixf().get(2+4*3)); renderFBO(gl, rs, vp_width, vp_height); @@ -230,15 +230,19 @@ public class VBORegion2PES2 extends GLRegion { // setback: gl.glActiveTexture(currentActiveTextureEngine[0]); } - private void renderRegion2FBO(GL2ES2 gl, RenderState rs, int tex_width) { + private void renderRegion2FBO(GL2ES2 gl, RenderState rs, int[/*1*/] texWidth) { final ShaderState st = rs.getShaderState(); - tex_width_c = tex_width; + if(0>=texWidth[0]) { + throw new IllegalArgumentException("texWidth must be greater than 0: "+texWidth[0]); + } + + tex_width_c = texWidth[0]; tex_height_c = (int) ( ( ( tex_width_c * box.getHeight() ) / box.getWidth() ) + 0.5f ); - // System.out.println("FBO Size: "+tex_width+" -> "+tex_height_c+"x"+tex_width_c); + // System.out.println("FBO Size: "+texWidth[0]+" -> "+tex_width_c+"x"+tex_height_c); // System.out.println("FBO Scale: " + m.glGetMatrixf().get(0) +" " + m.glGetMatrixf().get(5)); - + if(null != fbo && fbo.getWidth() != tex_width_c && fbo.getHeight() != tex_height_c ) { fbo.destroy(gl); fbo = null; diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java index 21671386c..6ff6a078f 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java @@ -125,7 +125,7 @@ public class VBORegionSPES2 extends GLRegion { setDirty(false); } - protected void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int width) { + protected void drawImpl(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int[/*1*/] texWidth) { verticeAttr.enableBuffer(gl, true); texCoordAttr.enableBuffer(gl, true); indices.enableBuffer(gl, true); diff --git a/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java b/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java index bc9a93042..f86d02f40 100644 --- a/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java +++ b/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java @@ -45,6 +45,7 @@ import com.jogamp.graph.curve.OutlineShape; import com.jogamp.graph.curve.Region; import com.jogamp.graph.curve.opengl.GLRegion; import com.jogamp.graph.curve.opengl.RenderState; +import com.jogamp.opengl.util.PMVMatrix; public class GlyphString { /** Static font size for all default font OutlineShape generations via {@link #createString(OutlineShape, Factory, Font, String)}. @@ -171,13 +172,19 @@ public class GlyphString { * previously generated. */ public void renderString3D(GL2ES2 gl) { - region.draw(gl, null, 0, 0, 0); + region.draw(gl, null, 0, 0, null); } /** Render the Object based using the associated Region * previously generated. + * @param matrix current {@link PMVMatrix}. + * @param rs the RenderState to be used + * @param vp_width current screen width + * @param vp_height current screen height + * @param texWidth desired texture width for multipass-rendering. + * The actual used texture-width is written back when mp rendering is enabled, otherwise the store is untouched. */ - public void renderString3D(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int size) { - region.draw(gl, rs, vp_width, vp_height, size); + public void renderString3D(GL2ES2 gl, RenderState rs, int vp_width, int vp_height, int[/*1*/] texWidth) { + region.draw(gl, rs, vp_width, vp_height, texWidth); } /** Get the Origin of this GlyphString diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java b/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java index b6c3cc7fe..6db500ae8 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java @@ -2,7 +2,6 @@ package com.jogamp.opengl.test.junit.graph; import java.io.IOException;
-import javax.media.nativewindow.NativeWindowFactory;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLCapabilitiesImmutable;
@@ -11,7 +10,6 @@ import javax.media.opengl.GLException; import javax.media.opengl.GLProfile;
import org.junit.Assert;
-import org.junit.BeforeClass;
import org.junit.Test;
import com.jogamp.graph.curve.Region;
diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java index 46085b179..668cdc607 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java @@ -80,7 +80,7 @@ public abstract class GPURendererListenerBase01 implements GLEventListener { private float yTran = 10; private float ang = 0f; private float zoom = -70f; - private int texSize = 400; + private int[] texSize = new int[] { 400 }; protected volatile float weight = 1.0f; boolean ignoreInput = false; @@ -99,7 +99,7 @@ public abstract class GPURendererListenerBase01 implements GLEventListener { public final float getXTran() { return xTran; } public final float getYTran() { return yTran; } public final float getAngle() { return ang; } - public final int getTexSize() { return texSize; } + public final int[] getTexSize() { return texSize; } public final float[] getPosition() { return position; } public void setMatrix(float xtrans, float ytrans, float angle, int zoom, int fbosize) { @@ -107,7 +107,7 @@ public abstract class GPURendererListenerBase01 implements GLEventListener { this.yTran = ytrans; this.ang = angle; this.zoom = zoom; - this.texSize = fbosize; + this.texSize[0] = fbosize; } public void init(GLAutoDrawable drawable) { @@ -191,7 +191,7 @@ public abstract class GPURendererListenerBase01 implements GLEventListener { public void printScreen(GLAutoDrawable drawable, String dir, String tech, String objName, boolean exportAlpha) throws GLException, IOException { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); - pw.printf("-%03dx%03d-Z%04d-T%04d-%s", drawable.getWidth(), drawable.getHeight(), (int)Math.abs(zoom), texSize, objName); + pw.printf("-%03dx%03d-Z%04d-T%04d-%s", drawable.getWidth(), drawable.getHeight(), (int)Math.abs(zoom), texSize[0], objName); final String filename = dir + tech + sw +".tga"; if(screenshot.readPixels(drawable.getGL(), drawable, false)) { @@ -233,12 +233,12 @@ public abstract class GPURendererListenerBase01 implements GLEventListener { move(-1, 0); } else if(arg0.getKeyCode() == KeyEvent.VK_6){ - texSize -= 10; - System.err.println("Tex Size: " + texSize); + texSize[0] -= 10; + System.err.println("Tex Size: " + texSize[0]); } else if(arg0.getKeyCode() == KeyEvent.VK_7){ - texSize += 10; - System.err.println("Tex Size: " + texSize); + texSize[0] += 10; + System.err.println("Tex Size: " + texSize[0]); } else if(arg0.getKeyCode() == KeyEvent.VK_0){ rotate(1); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUUISceneGLListener0A.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUUISceneGLListener0A.java index c0d7f00e9..f066f0b84 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUUISceneGLListener0A.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUUISceneGLListener0A.java @@ -31,9 +31,9 @@ public class GPUUISceneGLListener0A implements GLEventListener { private boolean trace = false; private final int renderModes; - private final int texSize; + private final int[] texSize = new int[1]; private final int renderModes2; - private final int texSize2; + private final int[] texSize2 = new int[1]; private RegionRenderer regionRenderer; private RenderState rs; @@ -77,9 +77,9 @@ public class GPUUISceneGLListener0A implements GLEventListener { public GPUUISceneGLListener0A(RenderState rs, int renderModes, boolean debug, boolean trace) { this.rs = rs; this.renderModes = renderModes; - this.texSize = Region.isVBAA(renderModes) ? 400 : 0; + this.texSize[0] = Region.isVBAA(renderModes) ? 400 : 0; this.renderModes2 = 0; - this.texSize2 = 0; + this.texSize2[0] = 0; this.debug = debug; this.trace = trace; @@ -301,7 +301,7 @@ public class GPUUISceneGLListener0A implements GLEventListener { regionRenderer.scale(gl, 1.5f, 1.5f, 1.0f); regionRenderer.rotate(gl, angText , 0, 1, 0); regionRenderer.setColorStatic(gl, 0.0f, 1.0f, 0.0f); - regionRenderer.draw(gl, jogampRegion.getRegion(gl, rs, 0), new float[]{0,0,0}, 0); + regionRenderer.draw(gl, jogampRegion.getRegion(gl, rs, 0), new float[]{0,0,0}, null); if(null == labelRegions[currentText]) { if( null == labels[currentText]) { @@ -345,7 +345,7 @@ public class GPUUISceneGLListener0A implements GLEventListener { if(showFPS && null != fpsRegion) { regionRenderer.translate(gl, 0, -60, 0); regionRenderer.scale(null, zoomText, zoomText, 1); - regionRenderer.draw(gl, fpsRegion.getRegion(gl, rs, 0), new float[]{0,0,0}, 0); + regionRenderer.draw(gl, fpsRegion.getRegion(gl, rs, 0), new float[]{0,0,0}, null); } } diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java index ca70481d7..4fef2d8c2 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java @@ -100,7 +100,6 @@ public abstract class Label extends UIShape implements UITextShape { @Override public void render(GL2ES2 gl, RenderState rs, RegionRenderer renderer, - int renderModes, int texSize, boolean selection) { - + int renderModes, int[/*1*/] texSize, boolean selection) { } } diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RIButton.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RIButton.java index 3acab3bdb..bf403900d 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RIButton.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RIButton.java @@ -199,7 +199,7 @@ public abstract class RIButton extends UIShape { private boolean toggle =false; private boolean toggleable = false; - public void render(GL2ES2 gl, RenderState rs, RegionRenderer renderer, int renderModes, int texSize, boolean selection) { + public void render(GL2ES2 gl, RenderState rs, RegionRenderer renderer, int renderModes, int[/*1*/] texSize, boolean selection) { if(null == buttonRegion) { buttonRegion = new UIRegion(this); labelRegion = new UIRegion(getLabel()); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/SceneUIController.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/SceneUIController.java index 6a400e95f..c6d43480a 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/SceneUIController.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/SceneUIController.java @@ -23,7 +23,7 @@ public class SceneUIController implements GLEventListener{ private int count = 0; private int renderModes; - private int texSize; + private int[] texSize; private RegionRenderer renderer = null; private RenderState rs = null; @@ -42,14 +42,14 @@ public class SceneUIController implements GLEventListener{ public SceneUIController() { } - public void setRenderer(RegionRenderer renderer, RenderState rs, int renderModes, int texSize) { + public void setRenderer(RegionRenderer renderer, RenderState rs, int renderModes, int[] texSize) { this.renderer = renderer; this.rs = rs; this.renderModes = renderModes; this.texSize = texSize; } - public SceneUIController(RegionRenderer renderer, RenderState rs, int renderModes, int texSize) { + public SceneUIController(RegionRenderer renderer, RenderState rs, int renderModes, int[] texSize) { this.renderer = renderer; this.rs = rs; this.renderModes = renderModes; @@ -136,7 +136,7 @@ public class SceneUIController implements GLEventListener{ gl.glClearColor(sceneClearColor[0], sceneClearColor[1], sceneClearColor[2], sceneClearColor[3]); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - render(gl, width, height, 0, 0, true); + render(gl, width, height, 0, null, true); ByteBuffer pixel = Buffers.newDirectByteBuffer(4); pixel.order(ByteOrder.nativeOrder()); IntBuffer viewport = IntBuffer.allocate(4); @@ -151,7 +151,7 @@ public class SceneUIController implements GLEventListener{ return index; } - private void render(GL2ES2 gl, int width, int height, int renderModes, int texSize, boolean select) { + private void render(GL2ES2 gl, int width, int height, int renderModes, int[/*1*/] texSize, boolean select) { renderer.reshapePerspective(null, 45.0f, width, height, 0.1f, 7000.0f); for(int index=0; index < count;index++){ diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIGLListener01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIGLListener01.java index 4da5cac10..da94f6a7c 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIGLListener01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIGLListener01.java @@ -109,10 +109,10 @@ public class UIGLListener01 extends UIListenerBase01 { } regionRenderer.setColorStatic(gl, bColor[0], bColor[1], bColor[2]); - regionRenderer.draw(gl, regionButton.getRegion(gl, rs, 0), getPosition(), 0); + regionRenderer.draw(gl, regionButton.getRegion(gl, rs, 0), getPosition(), null); // regionRenderer.translate(gl, button.getPosition()[0], button.getPosition()[1], button.getPosition()[2]); regionRenderer.setColorStatic(gl, lColor[0], lColor[1], lColor[2]); - regionRenderer.draw(gl, regionLabel.getRegion(gl, rs, 0), getPosition(), 0); + regionRenderer.draw(gl, regionLabel.getRegion(gl, rs, 0), getPosition(), null); } public void dispose(GLAutoDrawable drawable) { diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java index c04fa8b60..2f87fab66 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java @@ -55,7 +55,7 @@ public abstract class UIShape { shape.clear(); } - public abstract void render(GL2ES2 gl, RenderState rs, RegionRenderer renderer, int renderModes, int texSize, boolean selection); + public abstract void render(GL2ES2 gl, RenderState rs, RegionRenderer renderer, int renderModes, int[/*1*/] texSize, boolean selection); protected boolean positionDirty = false; |