/**
  * Sets the pointShader.
  *
  * @param pointShader The pointShader to set
  */
 public void setPointShader(PointShader pointShader) {
   this.pointShader = pointShader;
   if (pointShader != null) {
     pointRadius = pointShader.getPointRadius();
     outlineFraction = pointShader.getOutlineFraction();
   }
 }
  public final void processPoint(final double x, final double y, final double z, final double w) {
    if (pointShader == null) return;
    VecMat.transform(matrix, x, y, z, w, point0, 0);
    VecMat.transformUnNormalized(matrix, 0, 0, pointRadius, normal0, 0);
    double[] mat = matrix;
    double[] tmat = inverseTransposeMatrix;
    matrix = substMatrix;
    double d = 1 - outlineFraction;
    // inner point :
    double l = VecMat.norm(normal0);
    VecMat.assignScale(matrix, l * d);
    matrix[4 * 0 + 3] = point0[0];
    matrix[4 * 1 + 3] = point0[1];
    matrix[4 * 2 + 3] = point0[2] + pointRadius;
    Rn.transpose(inverseTransposeMatrix, matrix);
    Rn.inverse(inverseTransposeMatrix, inverseTransposeMatrix);
    shader = pointShader.getCoreShader();
    computeArray(pointVertices, pointIndices, zNormal, pointNormals);

    // outline :
    if (outlineFraction > 0 /*&& pointShader!= null*/) {
      shader = pointShader.getOutlineShader();
      d = 1 / d;

      for (int i = 0; i < 24; i += 3) {
        pointVertices[24 + i] = pointVertices[i] * d;
        pointVertices[25 + i] = pointVertices[i + 1] * d;
        pointVertices[26 + i] = -d;
      }
      for (int i = 0; i < 8; i++) {
        computeArray(pointVertices, pointOutlineIndices[i], zNormal, pointOutlineNormals[i]);
      }
    }

    // reset the matrix:
    matrix = mat;
    inverseTransposeMatrix = tmat;
  }
 final void startGeometry(Geometry geom) {
   if (lineShader != null) lineShader.startGeometry(geom);
   if (faceShader != null) faceShader.startGeometry(geom);
   if (pointShader != null) pointShader.startGeometry(geom);
   if (geom instanceof PointSet) {
     vertexColor = ((PointSet) geom).getVertexAttributes(Attribute.COLORS);
     vertexColors = vertexColor != null;
     if (vertexColors) vertexColorLength = vertexColor.getStorageModel().getDimensions()[1];
     //            System.out.println("PolygonPipeline.startGeometry("+geom.getName()
     //              +"): colors: "+vertexColors);
   } else {
     vertexColor = null;
     vertexColors = false;
   }
 }