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; }
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; }
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); }