Package org.sunflow
Class SunflowAPI
- java.lang.Object
-
- org.sunflow.SunflowAPI
-
- All Implemented Interfaces:
SunflowAPIInterface
- Direct Known Subclasses:
Benchmark.BenchmarkScene
,RealtimeBenchmark
public class SunflowAPI extends java.lang.Object implements SunflowAPIInterface
This API gives a simple interface for creating scenes procedurally. This is the main entry point to Sunflow. To use this class, extend from it and implement the build method which may execute arbitrary code to create a scene.
-
-
Field Summary
Fields Modifier and Type Field Description private int
currentFrame
static java.lang.String
DEFAULT_OPTIONS
private SearchPath
includeSearchPath
private ParameterList
parameterList
private RenderObjectMap
renderObjects
private Scene
scene
private SearchPath
textureSearchPath
static java.lang.String
VERSION
-
Constructor Summary
Constructors Constructor Description SunflowAPI()
Creates an empty scene.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
build()
This method does nothing, but may be overriden to create scenes procedurally.void
camera(java.lang.String name, java.lang.String lensType)
Defines a camera with a given name.static SunflowAPI
compile(java.lang.String code)
Compile the specified code string via Janino.static SunflowAPI
create(java.lang.String filename, int frameNumber)
Create an API object from the specified file.int
currentFrame()
Read the value of the current frame.void
currentFrame(int currentFrame)
Set the value of the current frame.void
geometry(java.lang.String name, java.lang.String typeName)
Defines a geometry with a given name.BoundingBox
getBounds()
Retrieve the bounding box of the scene.boolean
include(java.lang.String filename)
Parse the specified filename.java.util.Hashtable<java.lang.String,RenderObject>
inspect()
void
instance(java.lang.String name, java.lang.String geoname)
Instance the specified geometry into the scene.private boolean
isIncremental(java.lang.String typeName)
void
light(java.lang.String name, java.lang.String lightType)
Defines a light source with a given name.private Camera
lookupCamera(java.lang.String name)
Retrieve a shader object by its name, ornull
if no shader was found, or if the specified object is not a shader.Geometry
lookupGeometry(java.lang.String name)
Retrieve a geometry object by its name, ornull
if no geometry was found, or if the specified object is not a geometry.private Instance
lookupInstance(java.lang.String name)
Retrieve an instance object by its name, ornull
if no instance was found, or if the specified object is not an instance.private LightSource
lookupLight(java.lang.String name)
Retrieve a light object by its name, ornull
if no shader was found, or if the specified object is not a light.Modifier
lookupModifier(java.lang.String name)
Retrieve a modifier object by its name, ornull
if no modifier was found, or if the specified object is not a modifier.private Options
lookupOptions(java.lang.String name)
Shader
lookupShader(java.lang.String name)
Retrieve a shader object by its name, ornull
if no shader was found, or if the specified object is not a shader.void
modifier(java.lang.String name, java.lang.String modifierType)
Defines a modifier with a given name.void
options(java.lang.String name)
Defines an option object to hold the current parameters.void
parameter(java.lang.String name, boolean value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, float value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, int value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, int[] value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, java.lang.String value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, java.lang.String[] value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, java.lang.String colorspace, float... data)
Declare a color parameter in the given colorspace using the specified name and value.void
parameter(java.lang.String name, java.lang.String type, java.lang.String interpolation, float[] data)
Declare a parameter with the specified name.void
parameter(java.lang.String name, Matrix4 value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, Point2 value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, Point3 value)
Declare a parameter with the specified name and value.void
parameter(java.lang.String name, Vector3 value)
Declare a parameter with the specified name and value.void
plugin(java.lang.String type, java.lang.String name, java.lang.String code)
Declare a plugin of the specified type with the given name from a java code string.void
remove(java.lang.String name)
Remove the specified render object.void
render(java.lang.String optionsName, Display display)
Render using the specified options and the specified display.void
reset()
Reset the state of the API completely.java.lang.String
resolveIncludeFilename(java.lang.String filename)
Attempts to resolve the specified filename by checking it against the include search path.java.lang.String
resolveTextureFilename(java.lang.String filename)
Attempts to resolve the specified filename by checking it against the texture search path.static void
runSystemCheck()
This is a quick system test which verifies that the user has launched Java properly.void
searchpath(java.lang.String type, java.lang.String path)
Add the specified path to the list of directories which are searched automatically to resolve scene filenames or textures.void
shader(java.lang.String name, java.lang.String shaderType)
Defines a shader with a given name.static boolean
translate(java.lang.String filename, java.lang.String outputFilename)
Translate specfied file into the native sunflow scene file format.private boolean
update(java.lang.String name)
Update the specfied object using the currently active parameter list.
-
-
-
Field Detail
-
VERSION
public static final java.lang.String VERSION
- See Also:
- Constant Field Values
-
DEFAULT_OPTIONS
public static final java.lang.String DEFAULT_OPTIONS
- See Also:
- Constant Field Values
-
scene
private Scene scene
-
includeSearchPath
private SearchPath includeSearchPath
-
textureSearchPath
private SearchPath textureSearchPath
-
parameterList
private ParameterList parameterList
-
renderObjects
private RenderObjectMap renderObjects
-
currentFrame
private int currentFrame
-
-
Method Detail
-
runSystemCheck
public static void runSystemCheck()
This is a quick system test which verifies that the user has launched Java properly.
-
reset
public final void reset()
Description copied from interface:SunflowAPIInterface
Reset the state of the API completely. The object table is cleared, and all search paths are set back to their default values.- Specified by:
reset
in interfaceSunflowAPIInterface
-
inspect
public final java.util.Hashtable<java.lang.String,RenderObject> inspect()
-
plugin
public final void plugin(java.lang.String type, java.lang.String name, java.lang.String code)
Description copied from interface:SunflowAPIInterface
Declare a plugin of the specified type with the given name from a java code string. The code will be compiled with Janino and registered as a new plugin type upon success.- Specified by:
plugin
in interfaceSunflowAPIInterface
-
parameter
public final void parameter(java.lang.String name, java.lang.String value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, boolean value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, int value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, float value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, java.lang.String colorspace, float... data)
Description copied from interface:SunflowAPIInterface
Declare a color parameter in the given colorspace using the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namecolorspace
- color space ornull
to assume internal color spacedata
- floating point color data
-
parameter
public final void parameter(java.lang.String name, Point3 value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, Vector3 value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, Point2 value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, Matrix4 value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, int[] value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, java.lang.String[] value)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name and value. This parameter will be added to the currently active parameter list.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter namevalue
- parameter value
-
parameter
public final void parameter(java.lang.String name, java.lang.String type, java.lang.String interpolation, float[] data)
Description copied from interface:SunflowAPIInterface
Declare a parameter with the specified name. The type may be one of the follow: "float", "point", "vector", "texcoord", "matrix". The interpolation determines how the parameter is to be interpreted over surface (seeParameterList.InterpolationType
). The data is specified in a flattened float array.- Specified by:
parameter
in interfaceSunflowAPIInterface
- Parameters:
name
- parameter nametype
- parameter data typeinterpolation
- parameter interpolation modedata
- raw floating point data
-
remove
public void remove(java.lang.String name)
Description copied from interface:SunflowAPIInterface
Remove the specified render object. Note that this may cause the removal of other objects which depended on it.- Specified by:
remove
in interfaceSunflowAPIInterface
- Parameters:
name
- name of the object to remove
-
update
private boolean update(java.lang.String name)
Update the specfied object using the currently active parameter list. The object is removed if the update fails to avoid leaving inconsistently set objects in the list.- Parameters:
name
- name of the object to update- Returns:
true
if the update was succesfull, orfalse
if the update failed
-
searchpath
public final void searchpath(java.lang.String type, java.lang.String path)
Description copied from interface:SunflowAPIInterface
Add the specified path to the list of directories which are searched automatically to resolve scene filenames or textures. Currently the supported searchpath types are: "include" and "texture". All other types will be ignored.- Specified by:
searchpath
in interfaceSunflowAPIInterface
-
resolveTextureFilename
public final java.lang.String resolveTextureFilename(java.lang.String filename)
Attempts to resolve the specified filename by checking it against the texture search path.- Parameters:
filename
- filename- Returns:
- a path which matches the filename, or filename if no matches are found
-
resolveIncludeFilename
public final java.lang.String resolveIncludeFilename(java.lang.String filename)
Attempts to resolve the specified filename by checking it against the include search path.- Parameters:
filename
- filename- Returns:
- a path which matches the filename, or filename if no matches are found
-
shader
public final void shader(java.lang.String name, java.lang.String shaderType)
Description copied from interface:SunflowAPIInterface
Defines a shader with a given name. If the shader type name is leftnull
, the shader with the given name will be updated (if it exists).- Specified by:
shader
in interfaceSunflowAPIInterface
- Parameters:
name
- a unique name given to the shadershaderType
- a shader plugin type
-
modifier
public final void modifier(java.lang.String name, java.lang.String modifierType)
Description copied from interface:SunflowAPIInterface
Defines a modifier with a given name. If the modifier type name is leftnull
, the modifier with the given name will be updated (if it exists).- Specified by:
modifier
in interfaceSunflowAPIInterface
- Parameters:
name
- a unique name given to the modifiermodifierType
- a modifier plugin type name
-
geometry
public final void geometry(java.lang.String name, java.lang.String typeName)
Description copied from interface:SunflowAPIInterface
Defines a geometry with a given name. The geometry is built from the specified type. Note that geometries may be created fromTesselatable
objects orPrimitiveList
objects. This means that two seperate plugin lists will be searched for the geometry type.Tesselatable
objects are search first. If the type name is leftnull
, the geometry with the given name will be updated (if it exists).- Specified by:
geometry
in interfaceSunflowAPIInterface
- Parameters:
name
- a unique name given to the geometrytypeName
- a tesselatable or primitive plugin type name
-
instance
public final void instance(java.lang.String name, java.lang.String geoname)
Description copied from interface:SunflowAPIInterface
Instance the specified geometry into the scene. If geoname isnull
, the specified instance object will be updated (if it exists). In order to change the instancing relationship of an existing instance, you should use the "geometry" string attribute.- Specified by:
instance
in interfaceSunflowAPIInterface
- Parameters:
name
- instance namegeoname
- name of the geometry to instance
-
light
public final void light(java.lang.String name, java.lang.String lightType)
Description copied from interface:SunflowAPIInterface
Defines a light source with a given name. If the light type name is leftnull
, the light source with the given name will be updated (if it exists).- Specified by:
light
in interfaceSunflowAPIInterface
- Parameters:
name
- a unique name given to the light sourcelightType
- a light source plugin type name
-
camera
public final void camera(java.lang.String name, java.lang.String lensType)
Description copied from interface:SunflowAPIInterface
Defines a camera with a given name. The camera is built from the specified camera lens type plugin. If the lens type name is leftnull
, the camera with the given name will be updated (if it exists). It is not currently possible to change the lens of a camera after it has been created.- Specified by:
camera
in interfaceSunflowAPIInterface
- Parameters:
name
- camera namelensType
- a camera lens plugin type name
-
options
public final void options(java.lang.String name)
Description copied from interface:SunflowAPIInterface
Defines an option object to hold the current parameters. If the object already exists, the values will simply override previous ones.- Specified by:
options
in interfaceSunflowAPIInterface
-
isIncremental
private final boolean isIncremental(java.lang.String typeName)
-
lookupGeometry
public final Geometry lookupGeometry(java.lang.String name)
Retrieve a geometry object by its name, ornull
if no geometry was found, or if the specified object is not a geometry.- Parameters:
name
- geometry name- Returns:
- the geometry object associated with that name
-
lookupInstance
private final Instance lookupInstance(java.lang.String name)
Retrieve an instance object by its name, ornull
if no instance was found, or if the specified object is not an instance.- Parameters:
name
- instance name- Returns:
- the instance object associated with that name
-
lookupCamera
private final Camera lookupCamera(java.lang.String name)
Retrieve a shader object by its name, ornull
if no shader was found, or if the specified object is not a shader.- Parameters:
name
- camera name- Returns:
- the camera object associate with that name
-
lookupOptions
private final Options lookupOptions(java.lang.String name)
-
lookupShader
public final Shader lookupShader(java.lang.String name)
Retrieve a shader object by its name, ornull
if no shader was found, or if the specified object is not a shader.- Parameters:
name
- shader name- Returns:
- the shader object associated with that name
-
lookupModifier
public final Modifier lookupModifier(java.lang.String name)
Retrieve a modifier object by its name, ornull
if no modifier was found, or if the specified object is not a modifier.- Parameters:
name
- modifier name- Returns:
- the modifier object associated with that name
-
lookupLight
private final LightSource lookupLight(java.lang.String name)
Retrieve a light object by its name, ornull
if no shader was found, or if the specified object is not a light.- Parameters:
name
- light name- Returns:
- the light object associated with that name
-
render
public final void render(java.lang.String optionsName, Display display)
Description copied from interface:SunflowAPIInterface
Render using the specified options and the specified display. If the specified options do not exist - defaults will be used.- Specified by:
render
in interfaceSunflowAPIInterface
- Parameters:
optionsName
- name of theRenderObject
which contains the optionsdisplay
- display object
-
include
public final boolean include(java.lang.String filename)
Description copied from interface:SunflowAPIInterface
Parse the specified filename. The include paths are searched first. The contents of the file are simply added to the active scene. This allows to break up a scene into parts, even across file formats. The appropriate parser is chosen based on file extension.- Specified by:
include
in interfaceSunflowAPIInterface
- Parameters:
filename
- filename to load- Returns:
true
upon sucess,false
if an error occured.
-
getBounds
public final BoundingBox getBounds()
Retrieve the bounding box of the scene. This method will be valid only after a first call torender(String, Display)
has been made.
-
build
public void build()
This method does nothing, but may be overriden to create scenes procedurally.
-
create
public static SunflowAPI create(java.lang.String filename, int frameNumber)
Create an API object from the specified file. Java files are read by Janino and are expected to implement a build method (they implement a derived class of SunflowAPI. The build method is called if the code compiles succesfully. Other files types are handled by the parse method.- Parameters:
filename
- filename to load- Returns:
- a valid SunflowAPI object or
null
on failure
-
translate
public static boolean translate(java.lang.String filename, java.lang.String outputFilename)
Translate specfied file into the native sunflow scene file format.- Parameters:
filename
- input filenameoutputFilename
- output filename- Returns:
true
upon success,false
otherwise
-
compile
public static SunflowAPI compile(java.lang.String code)
Compile the specified code string via Janino. The code must implement a build method as described above. The build method is not called on the output, it is up the caller to do so.- Parameters:
code
- java code string- Returns:
- a valid SunflowAPI object upon succes,
null
otherwise.
-
currentFrame
public int currentFrame()
Read the value of the current frame. This value is intended only for procedural animation creation. It is not used by the Sunflow core in anyway. The default value is 1.- Returns:
- current frame number
-
currentFrame
public void currentFrame(int currentFrame)
Description copied from interface:SunflowAPIInterface
Set the value of the current frame. This value is intended only for procedural animation creation. It is not used by the Sunflow core in anyway. The default value is 1.- Specified by:
currentFrame
in interfaceSunflowAPIInterface
- Parameters:
currentFrame
- current frame number
-
-