Revision: 20232 http://sourceforge.net/p/jmol/code/20232 Author: hansonr Date: 2015-01-22 22:41:59 +0000 (Thu, 22 Jan 2015) Log Message: -----------
Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/JmolGraphicsInterface.java trunk/Jmol/src/org/jmol/export/Export3D.java trunk/Jmol/src/org/jmol/g3d/Graphics3D.java trunk/Jmol/src/org/jmol/g3d/Pixelator.java trunk/Jmol/src/org/jmol/g3d/PixelatorScreened.java trunk/Jmol/src/org/jmol/g3d/PixelatorShaded.java trunk/Jmol/src/org/jmol/g3d/PixelatorT.java trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java trunk/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java trunk/Jmol/src/org/jmol/util/GData.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/api/JmolGraphicsInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolGraphicsInterface.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/api/JmolGraphicsInterface.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -13,6 +13,6 @@ public abstract void setSlab(int slabValue); - public abstract void setSlabAndZShade(int slabValue, int depthValue, boolean zShade, int zSlab, int zDepth, int zPower); + public abstract void setSlabAndZShade(int slabValue, int depthValue, int zSlab, int zDepth, int zPower); } Modified: trunk/Jmol/src/org/jmol/export/Export3D.java =================================================================== --- trunk/Jmol/src/org/jmol/export/Export3D.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/export/Export3D.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -107,7 +107,7 @@ slab = gdata.slab; } @Override - public void setSlabAndZShade(int slabValue, int depthValue, boolean zShade, int zSlab, int zDepth, int zPower) { + public void setSlabAndZShade(int slabValue, int depthValue, int zSlab, int zDepth, int zPower) { gdata.setSlab(slabValue); slab = gdata.slab; gdata.setDepth(depthValue); Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -185,6 +185,7 @@ public void destroy() { releaseBuffers(); platform = null; + pixel = pixel0 = pixelScreened = pixelShaded = null; graphicsForMetrics = null; } @@ -205,8 +206,7 @@ Pixelator pixel; private Pixelator pixel0, pixelT0, pixelScreened; - int zSlab, zDepth, zShadePower; - private boolean zShade; + private PixelatorShaded pixelShaded; protected int zMargin; private int[] aobuf; @@ -225,6 +225,7 @@ this.vwr = vwr; this.apiPlatform = apiPlatform; platform = new Platform3D(apiPlatform); + pixel = pixel0 = new Pixelator(this); graphicsForMetrics = platform.getGraphicsForMetrics(); line3d = new LineRenderer(this); @@ -304,8 +305,6 @@ pass2Flag01 = 0; colixCurrent = 0; haveTranslucentObjects = wasScreened = false; - if (pixel0 == null) - pixel0 = new Pixelator(this); pixel = pixel0; translucentCoverOnly = !translucentMode; if (pbuf == null) { @@ -314,8 +313,13 @@ pbuf = platform.pBuffer; zbuf = platform.zBuffer; aobuf = null; + pixel0.setBuf(); + if (pixelT0 != null) + pixelT0.setBuf(); } setWidthHeight(antialiasThisFrame); + if (pixelScreened != null) + pixelScreened.width = width; platform.clearBuffer(); if (backgroundImage != null) plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, null, @@ -538,14 +542,18 @@ } @Override - public void setSlabAndZShade(int slabValue, int depthValue, boolean zShade, int zSlab, int zDepth, int zShadePower) { + public void setSlabAndZShade(int slabValue, int depthValue, int zSlab, + int zDepth, int zShadePower) { setSlab(slabValue); setDepth(depthValue); - this.zSlab = zSlab; - this.zDepth = zDepth; - this.zShadePower = zShadePower; - this.zShade = zShade; - pixel = (zShade ? new PixelatorShaded(this, pixel0) : pixel); + if (zSlab < zDepth) { + if (pixelShaded == null) + pixelShaded = new PixelatorShaded(this, pixel0); + pixel = pixelShaded.set(zSlab, zDepth, zShadePower); + pixel.p0 = pixel0; + } else { + pixel = pixel0; + } } private void downsampleFullSceneAntialiasing(boolean downsampleZBuffer) { @@ -699,7 +707,7 @@ pixel = pixelScreened; else pixel.p0 = pixelScreened; - } else if (pixel.p0 == null) { + } else if (pixel.p0 == null || pixel == pixelScreened) { pixel = (isPass2 ? pixelT0 : pixel0); } else { pixel.p0 = (isPass2 ? pixelT0 : pixel0); Modified: trunk/Jmol/src/org/jmol/g3d/Pixelator.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Pixelator.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/g3d/Pixelator.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -25,29 +25,39 @@ package org.jmol.g3d; +/** + * + */ class Pixelator { - /** - * - */ protected final Graphics3D g; Pixelator p0; + protected int[] zb, pb; + int width; + /** * @param graphics3d */ Pixelator(Graphics3D graphics3d) { g = graphics3d; + setBuf(); } + void setBuf() { + zb = g.zbuf; + pb = g.pbuf; + + } + void clearPixel(int offset, int z) { // first-pass only; ellipsoids - if (g.zbuf[offset] > z) - g.zbuf[offset] = Integer.MAX_VALUE; + if (zb[offset] > z) + zb[offset] = Integer.MAX_VALUE; } void addPixel(int offset, int z, int p) { - g.zbuf[offset] = z; - g.pbuf[offset] = p; + zb[offset] = z; + pb[offset] = p; } } \ No newline at end of file Modified: trunk/Jmol/src/org/jmol/g3d/PixelatorScreened.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/PixelatorScreened.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/g3d/PixelatorScreened.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -25,14 +25,13 @@ package org.jmol.g3d; +/** + * A class to create a "screened" translucent effect by + * discarding pixels in a checkerboard fashion. + * + */ class PixelatorScreened extends Pixelator { - - public int zSlab, zDepth, zShadeR, zShadeG, zShadeB; - public int zShadePower = 3; - private Pixelator p0; - private int width; - /** * @param g * @param p0 Modified: trunk/Jmol/src/org/jmol/g3d/PixelatorShaded.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/PixelatorShaded.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/g3d/PixelatorShaded.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -25,47 +25,54 @@ package org.jmol.g3d; +/** + * A class to do Z Shading of pixels. + * + */ class PixelatorShaded extends Pixelator { - public int zSlab, zDepth, zShadeR, zShadeG, zShadeB; - public int zShadePower = 3; + private int[] bgRGB, tmp; + private int zSlab, zDepth, zShadePower; /** - * @param g - * @param p0 + * @param g + * @param p0 */ PixelatorShaded(Graphics3D g, Pixelator p0) { super(g); - zShadeR = g.bgcolor & 0xFF; - zShadeG = (g.bgcolor & 0xFF00) >> 8; - zShadeB = (g.bgcolor & 0xFF0000) >> 16; - this.zSlab = g.zSlab < 0 ? 0 : g.zSlab; - this.zDepth = g.zDepth < 0 ? 0 : g.zDepth; - this.zShadePower = g.zShadePower; - this.p0 = p0; + tmp = new int[3]; + this.p0 = p0; } + + Pixelator set(int zSlab, int zDepth, int zShadePower) { + bgRGB = new int[] { g.bgcolor & 0xFF, (g.bgcolor >> 8) & 0xFF, + (g.bgcolor >> 16) & 0xFF }; + this.zSlab = zSlab < 0 ? 0 : zSlab; + this.zDepth = zDepth < 0 ? 0 : zDepth; + this.zShadePower = zShadePower; + return this; + } @Override void addPixel(int offset, int z, int p) { + // z starts with 0 at camera and runs toward model, with zSlab <= zDepth if (z > zDepth) return; - if (z <= zDepth && z >= zSlab) { - int pR = p & 0xFF; - int pG = (p & 0xFF00) >> 8; - int pB = (p & 0xFF0000) >> 16; - int pA = (p & 0xFF000000); + if (z >= zSlab) { + int[] t = tmp; + int[] zs = bgRGB; + t[0] = p; + t[1] = p >> 8; + t[2] = p >> 16; float f = (float)(zDepth - z) / (zDepth - zSlab); - if (zShadePower > 1) { + if (zShadePower > 1) for (int i = 0; i < zShadePower; i++) f *= f; - } - pR = zShadeR + (int) (f * (pR - zShadeR)); - pG = zShadeG + (int) (f * (pG - zShadeG)); - pB = zShadeB + (int) (f * (pB - zShadeB)); - p = (pB << 16) | (pG << 8) | pR | pA; + for (int i = 0; i < 3; i++) + t[i] = zs[i] + (int) (f * ((t[i] & 0xFF) - zs[i])); + p = (t[2] << 16) | (t[1] << 8) | t[0] | (p & 0xFF000000); } - // important not to go directly to addPixel here for JavaScript avoidance of Java2Script SAEM method p0.addPixel(offset, z, p); } } \ No newline at end of file Modified: trunk/Jmol/src/org/jmol/g3d/PixelatorT.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/PixelatorT.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/g3d/PixelatorT.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -25,6 +25,10 @@ package org.jmol.g3d; +/** + * Handle pixels in Pass 2 - Translucency + * + */ class PixelatorT extends Pixelator { PixelatorT(Graphics3D graphics3d) { super(graphics3d); Modified: trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java =================================================================== --- trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/jvxl/readers/SurfaceGenerator.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -1030,11 +1030,8 @@ if (params.slabInfo != null) surfaceReader.slabIsosurface(params.slabInfo); - if (haveMeshDataServer) { - if (meshDataServer.notifySurfaceGenerationCompleted()) { - surfaceReader.hasColorData = false; - } - } + if (haveMeshDataServer && meshDataServer.notifySurfaceGenerationCompleted()) + surfaceReader.hasColorData = false; if (jvxlData.thisSet >= 0) getSurfaceSets(); Modified: trunk/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java =================================================================== --- trunk/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/shapesurface/IsosurfaceMesh.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -668,6 +668,7 @@ * opened. * * @param colorRgb + * @return true if still need color handling */ boolean setColorsFromJvxlData(int colorRgb) { diameter = jvxlData.diameter; Modified: trunk/Jmol/src/org/jmol/util/GData.java =================================================================== --- trunk/Jmol/src/org/jmol/util/GData.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/util/GData.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -118,8 +118,6 @@ } /** - * @param zShade - * whether to shade along z front to back * @param zSlab * for zShade * @param zDepth @@ -127,7 +125,7 @@ * @param zPower */ @Override - public void setSlabAndZShade(int slab, int depth, boolean zShade, int zSlab, int zDepth, int zPower) { + public void setSlabAndZShade(int slab, int depth,int zSlab, int zDepth, int zPower) { setSlab(slab); setDepth(depth); } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2015-01-22 17:34:27 UTC (rev 20231) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2015-01-22 22:41:59 UTC (rev 20232) @@ -1061,20 +1061,20 @@ refresh(3, "slabDepthByPixels"); } -// @Override -// public M4 getUnscaledTransformMatrix() { -// // unused -// return tm.getUnscaledTransformMatrix(); -// } + // @Override + // public M4 getUnscaledTransformMatrix() { + // // unused + // return tm.getUnscaledTransformMatrix(); + // } public void finalizeTransformParameters() { // FrameRenderer // InitializeModel tm.finalizeTransformParameters(); - gdata.setSlabAndZShade(tm.slabValue, tm.depthValue, tm.zShadeEnabled, - tm.zSlabValue, tm.zDepthValue, - g.zShadePower); + gdata.setSlabAndZShade(tm.slabValue, tm.depthValue, + (tm.zShadeEnabled ? tm.zSlabValue : Integer.MAX_VALUE), + tm.zDepthValue, g.zShadePower); } public float getScalePixelsPerAngstrom(boolean asAntialiased) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ New Year. New Location. New Benefits. New Data Center in Ashburn, VA. GigeNET is offering a free month of service with a new server in Ashburn. Choose from 2 high performing configs, both with 100TB of bandwidth. Higher redundancy.Lower latency.Increased capacity.Completely compliant. http://p.sf.net/sfu/gigenet _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits