The spica renderer
cobject.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_COBJECT_H_
6 #define _SPICA_COBJECT_H_
7 
8 #include <string>
9 #include <vector>
10 #include <memory>
11 #include <functional>
12 #include <unordered_map>
13 
14 #include "common.h"
15 #include "core.hpp"
16 #include "renderparams.h"
17 
18 namespace spica {
19 
20 using ObjectInitializer = CObject *(*)(RenderParams&);
21 using AcceleratorInitializer = Accelerator *(*)(const std::vector<std::shared_ptr<Primitive>> &,
22  RenderParams &);
23 
24 class SPICA_EXPORTS CObject {
25 public:
26  CObject();
27  virtual ~CObject();
28 };
29 
30 class SPICA_EXPORTS PluginManager {
31 public:
32  static PluginManager &getInstance();
33 
34  void initModule(const std::string &moduleName);
35  void initAccelerator(const std::string &moduleName);
36  CObject *createObject(const std::string &name, RenderParams &params) const;
37  Accelerator *createAccelerator(const std::string &name,
38  const std::vector<std::shared_ptr<Primitive>> &primitives,
39  RenderParams &params) const;
40 
41 private:
42  PluginManager();
43 
44  PluginManager(const PluginManager &) = delete;
45  PluginManager &operator=(const PluginManager &) = delete;
46 
47  void registerInitializer(const std::string &name, ObjectInitializer initializer);
48  void registerInitializer(const std::string &name, AcceleratorInitializer initializer);
49 
50  std::unordered_map<std::string, ObjectInitializer> initializers_;
51  std::unordered_map<std::string, AcceleratorInitializer> accelInitializers_;
52 };
53 
54 } // namespace spica
55 
56 #define SPICA_EXPORT_PLUGIN(name, descr) \
57  extern "C" { \
58  CObject SPICA_EXPORTS *createInstance(RenderParams &params) { \
59  return (CObject *)(new name(params)); \
60  } \
61  const char SPICA_EXPORTS *getDescription() { \
62  return descr; \
63  } \
64  }
65 
66 #define SPICA_EXPORT_ACCEL_PLUGIN(name, descr) \
67  extern "C" { \
68  CObject SPICA_EXPORTS *createInstance(const std::vector<std::shared_ptr<Primitive>> &primitives, \
69  RenderParams &params) { \
70  return (CObject *)(new name(primitives, params)); \
71  } \
72  const char SPICA_EXPORTS *getDescription() { \
73  return descr; \
74  } \
75  }
76 
77 #endif // _SPICA_COBJECT_H_
Definition: cobject.h:24
Interface for intersection test accelerators.
Definition: accelerator.h:23
Definition: renderparams.h:27
Definition: cobject.h:30