Esempio n. 1
0
 final void remove(String name) {
   RenderObjectHandle obj = renderObjects.get(name);
   if (obj == null) {
     UI.printWarning(Module.API, "Unable to remove \"%s\" - object was not defined yet");
     return;
   }
   UI.printDetailed(Module.API, "Removing object \"%s\"", name);
   renderObjects.remove(name);
   // scan through all objects to make sure we don't have any
   // references to the old object still around
   switch (obj.type) {
     case SHADER:
       Shader s = obj.getShader();
       for (Map.Entry<String, RenderObjectHandle> e : renderObjects.entrySet()) {
         Instance i = e.getValue().getInstance();
         if (i != null) {
           UI.printWarning(
               Module.API, "Removing shader \"%s\" from instance \"%s\"", name, e.getKey());
           i.removeShader(s);
         }
       }
       break;
     case MODIFIER:
       Modifier m = obj.getModifier();
       for (Map.Entry<String, RenderObjectHandle> e : renderObjects.entrySet()) {
         Instance i = e.getValue().getInstance();
         if (i != null) {
           UI.printWarning(
               Module.API, "Removing modifier \"%s\" from instance \"%s\"", name, e.getKey());
           i.removeModifier(m);
         }
       }
       break;
     case GEOMETRY:
       {
         Geometry g = obj.getGeometry();
         for (Map.Entry<String, RenderObjectHandle> e : renderObjects.entrySet()) {
           Instance i = e.getValue().getInstance();
           if (i != null && i.hasGeometry(g)) {
             UI.printWarning(
                 Module.API,
                 "Removing instance \"%s\" because it referenced geometry \"%s\"",
                 e.getKey(),
                 name);
             remove(e.getKey());
           }
         }
         break;
       }
     case INSTANCE:
       rebuildInstanceList = true;
       break;
     case LIGHT:
       rebuildLightList = true;
       break;
     default:
       // no dependencies
       break;
   }
 }
 private boolean isValidParameter(
     String name, ParameterType type, InterpolationType interp, int requestedSize, Parameter p) {
   if (p == null) return false;
   if (p.type != type) {
     UI.printWarning(
         Module.API,
         "Parameter %s requested as a %s - declared as %s",
         name,
         type.name().toLowerCase(),
         p.type.name().toLowerCase());
     return false;
   }
   if (p.interp != interp) {
     UI.printWarning(
         Module.API,
         "Parameter %s requested as a %s - declared as %s",
         name,
         interp.name().toLowerCase(),
         p.interp.name().toLowerCase());
     return false;
   }
   if (requestedSize > 0 && p.size() != requestedSize) {
     UI.printWarning(
         Module.API,
         "Parameter %s requires %d %s - declared with %d",
         name,
         requestedSize,
         requestedSize == 1 ? "value" : "values",
         p.size());
     return false;
   }
   p.checked = true;
   return true;
 }
Esempio n. 3
0
 public boolean update(ParameterList pl, SunflowAPI api) {
   {
     int[] quads = pl.getIntArray("quads");
     if (quads != null) {
       this.quads = quads;
     }
   }
   if (quads == null) {
     UI.printError(Module.GEOM, "Unable to update mesh - quad indices are missing");
     return false;
   }
   if (quads.length % 4 != 0)
     UI.printWarning(
         Module.GEOM, "Quad index data is not a multiple of 4 - some quads may be missing");
   pl.setFaceCount(quads.length / 4);
   {
     FloatParameter pointsP = pl.getPointArray("points");
     if (pointsP != null)
       if (pointsP.interp != InterpolationType.VERTEX)
         UI.printError(
             Module.GEOM,
             "Point interpolation type must be set to \"vertex\" - was \"%s\"",
             pointsP.interp.name().toLowerCase(Locale.ENGLISH));
       else {
         points = pointsP.data;
       }
   }
   if (points == null) {
     UI.printError(Module.GEOM, "Unabled to update mesh - vertices are missing");
     return false;
   }
   pl.setVertexCount(points.length / 3);
   pl.setFaceVertexCount(4 * (quads.length / 4));
   FloatParameter normals = pl.getVectorArray("normals");
   if (normals != null) this.normals = normals;
   FloatParameter uvs = pl.getTexCoordArray("uvs");
   if (uvs != null) this.uvs = uvs;
   int[] faceShaders = pl.getIntArray("faceshaders");
   if (faceShaders != null && faceShaders.length == quads.length / 4) {
     this.faceShaders = new byte[faceShaders.length];
     for (int i = 0; i < faceShaders.length; i++) {
       int v = faceShaders[i];
       if (v > 255) UI.printWarning(Module.GEOM, "Shader index too large on quad %d", i);
       this.faceShaders[i] = (byte) (v & 0xFF);
     }
   }
   return true;
 }
 /**
  * Clears the list of all its members. If some members were never used, a warning will be printed
  * to remind the user something may be wrong.
  */
 public void clear(boolean showUnused) {
   if (showUnused) {
     for (FastHashMap.Entry<String, Parameter> e : list) {
       if (!e.getValue().checked)
         UI.printWarning(Module.API, "Unused parameter: %s - %s", e.getKey(), e.getValue());
     }
   }
   list.clear();
   numVerts = numFaces = numFaceVerts = 0;
 }
Esempio n. 5
0
 public static final GIEngine create(Options options) {
   String type = options.getString("gi.engine", null);
   if (type == null || type.equals("null") || type.equals("none")) return null;
   else if (type.equals("ambocc")) return new AmbientOcclusionGIEngine(options);
   else if (type.equals("fake")) return new FakeGIEngine(options);
   else if (type.equals("igi")) return new InstantGI(options);
   else if (type.equals("irr-cache")) return new IrradianceCacheGIEngine(options);
   else if (type.equals("path")) return new PathTracingGIEngine(options);
   else {
     UI.printWarning(Module.LIGHT, "Unrecognized GI engine type \"%s\" - ignoring", type);
     return null;
   }
 }
 private void add(String name, Parameter param) {
   if (name == null) UI.printError(Module.API, "Cannot declare parameter with null name");
   else if (list.put(name, param) != null)
     UI.printWarning(Module.API, "Parameter %s was already defined -- overwriting", name);
 }