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

Reply via email to