00001 #ifndef Y_ENVIRON_H
00002 #define Y_ENVIRON_H
00003
00004 #include <yafray_config.h>
00005
00006 #include "params.h"
00007
00008
00009
00010
00011
00012 #include "yafsystem.h"
00013 #include <list>
00014
00015 __BEGIN_YAFRAY
00016 class light_t;
00017 class material_t;
00018 class volumeHandler_t;
00019 class VolumeRegion;
00020 class texture_t;
00021 class camera_t;
00022 class background_t;
00023 class integrator_t;
00024 class shaderNode_t;
00025 class integrator_t;
00026 class object3d_t;
00027 class imageFilm_t;
00028 class scene_t;
00029 class colorOutput_t;
00030 class progressBar_t;
00031
00032 class YAFRAYCORE_EXPORT renderEnvironment_t
00033 {
00034 public:
00035 void loadPlugins(const std::string &path);
00036 bool getPluginPath(std::string &path);
00037
00038 typedef light_t *light_factory_t(paraMap_t &,renderEnvironment_t &);
00039 typedef material_t *material_factory_t(paraMap_t &,std::list<paraMap_t> &, renderEnvironment_t &);
00040 typedef texture_t *texture_factory_t(paraMap_t &,renderEnvironment_t &);
00041 typedef object3d_t *object_factory_t(paraMap_t &,renderEnvironment_t &);
00042 typedef camera_t *camera_factory_t(paraMap_t &,renderEnvironment_t &);
00043 typedef background_t *background_factory_t(paraMap_t &,renderEnvironment_t &);
00044 typedef integrator_t *integrator_factory_t(paraMap_t &,renderEnvironment_t &);
00045 typedef shaderNode_t *shader_factory_t(const paraMap_t &,renderEnvironment_t &);
00046 typedef volumeHandler_t *volume_factory_t(const paraMap_t &,renderEnvironment_t &);
00047 typedef VolumeRegion *volumeregion_factory_t(paraMap_t &,renderEnvironment_t &);
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 virtual material_t *getMaterial(const std::string &name)const;
00060 virtual texture_t *getTexture(const std::string &name)const;
00061 virtual shaderNode_t *getShaderNode(const std::string &name)const;
00062 camera_t *getCamera(const std::string &name)const;
00063 shader_factory_t* getShaderNodeFactory(const std::string &name)const;
00064 background_t* getBackground(const std::string &name)const;
00065 integrator_t* getIntegrator(const std::string &name)const;
00066 scene_t * getScene() { return curren_scene; };
00067
00068 light_t* createLight (const std::string &name, paraMap_t ¶ms);
00069 texture_t* createTexture (const std::string &name, paraMap_t ¶ms);
00070 material_t* createMaterial (const std::string &name, paraMap_t ¶ms, std::list<paraMap_t> &eparams);
00071 object3d_t* createObject (const std::string &name, paraMap_t ¶ms);
00072 camera_t* createCamera (const std::string &name, paraMap_t ¶ms);
00073 background_t* createBackground(const std::string &name, paraMap_t ¶ms);
00074 integrator_t* createIntegrator(const std::string &name, paraMap_t ¶ms);
00075 shaderNode_t* createShaderNode(const std::string &name, paraMap_t ¶ms);
00076 volumeHandler_t* createVolumeH(const std::string &name, const paraMap_t ¶ms);
00077 VolumeRegion* createVolumeRegion(const std::string &name, paraMap_t ¶ms);
00078 imageFilm_t* createImageFilm(const paraMap_t ¶ms, colorOutput_t &output);
00079 void setScene(scene_t *scene) { curren_scene=scene; };
00080 bool setupScene(scene_t &scene, const paraMap_t ¶ms, colorOutput_t &output, progressBar_t *pb = 0);
00081 void clearAll();
00082
00083 virtual void registerFactory(const std::string &name,light_factory_t *f);
00084 virtual void registerFactory(const std::string &name,material_factory_t *f);
00085 virtual void registerFactory(const std::string &name,texture_factory_t *f);
00086 virtual void registerFactory(const std::string &name,object_factory_t *f);
00087 virtual void registerFactory(const std::string &name,camera_factory_t *f);
00088
00089 virtual void registerFactory(const std::string &name,background_factory_t *f);
00090 virtual void registerFactory(const std::string &name,integrator_factory_t *f);
00091 virtual void registerFactory(const std::string &name,shader_factory_t *f);
00092 virtual void registerFactory(const std::string &name,volume_factory_t *f);
00093 virtual void registerFactory(const std::string &name,volumeregion_factory_t *f);
00094
00095 void addToParamsString(const char *params);
00096 const char *getParamsString();
00097 void clearParamsString();
00098 void setDrawParams(bool b);
00099 bool getDrawParams();
00100 int Debug;
00101
00102 renderEnvironment_t();
00103 virtual ~renderEnvironment_t();
00104
00105 protected:
00106 std::list< sharedlibrary_t > pluginHandlers;
00107 std::map<std::string,light_factory_t *> light_factory;
00108 std::map<std::string,material_factory_t *> material_factory;
00109 std::map<std::string,texture_factory_t *> texture_factory;
00110 std::map<std::string,object_factory_t *> object_factory;
00111 std::map<std::string,camera_factory_t *> camera_factory;
00112
00113 std::map<std::string,background_factory_t *> background_factory;
00114 std::map<std::string,integrator_factory_t *> integrator_factory;
00115 std::map<std::string,shader_factory_t *> shader_factory;
00116 std::map<std::string,volume_factory_t *> volume_factory;
00117 std::map<std::string,volumeregion_factory_t *> volumeregion_factory;
00118
00119 std::map<std::string,light_t *> light_table;
00120 std::map<std::string,material_t *> material_table;
00121 std::map<std::string,texture_t *> texture_table;
00122 std::map<std::string,object3d_t *> object_table;
00123 std::map<std::string,camera_t *> camera_table;
00124
00125 std::map<std::string,background_t *> background_table;
00126 std::map<std::string,integrator_t *> integrator_table;
00127 std::map<std::string,shaderNode_t *> shader_table;
00128 std::map<std::string,volumeHandler_t *> volume_table;
00129 std::map<std::string,VolumeRegion *> volumeregion_table;
00130 bool drawParamsString;
00131 std::string paramsString;
00132 scene_t *curren_scene;
00133 };
00134
00135 __END_YAFRAY
00136 #endif // Y_ENVIRON_H