The spica renderer
material.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_MATERIAL_H_
6 #define _SPICA_MATERIAL_H_
7 
8 #include <memory>
9 
10 #include "core/common.h"
11 #include "core/core.hpp"
12 #include "core/spectrum.h"
13 #include "core/cobject.h"
14 
15 namespace spica {
16 
17 class SPICA_EXPORTS SurfaceMaterial : public CObject {
18 public:
19  virtual ~SurfaceMaterial();
20  virtual void setScatterFuncs(SurfaceInteraction* intr, MemoryArena& arena) const = 0;
21  static void bump(SurfaceInteraction* intr, const std::shared_ptr<Texture<Spectrum>> &bumpmap);
22 };
23 
24 class SPICA_EXPORTS SubsurfaceMaterial : public CObject {
25 public:
26  virtual ~SubsurfaceMaterial();
27  virtual void setScatterFuncs(SurfaceInteraction *intr, MemoryArena &arena) const = 0;
28 };
29 
30 class SPICA_EXPORTS Material {
31 public:
32  Material(const std::shared_ptr<SurfaceMaterial> &bsdf,
33  const std::shared_ptr<SubsurfaceMaterial> &subsurface = nullptr);
34  void setScatterFuncs(SurfaceInteraction *intr, MemoryArena &arena) const;
35  bool isSubsurface() const { return static_cast<bool>(subsurface_); }
36 
37  inline std::shared_ptr<SurfaceMaterial> surface() const {
38  return bsdf_;
39  }
40 
41  inline std::shared_ptr<SubsurfaceMaterial> subsurface() const {
42  return subsurface_;
43  }
44 
45 private:
46  std::shared_ptr<SurfaceMaterial> bsdf_ = nullptr;
47  std::shared_ptr<SubsurfaceMaterial> subsurface_ = nullptr;
48 };
49 
50 } // namespace spica
51 
52 #endif // _SPICA_MATERIAL_H_
Definition: interaction.h:68
Definition: cobject.h:24
Definition: material.h:24
Definition: material.h:17
Definition: material.h:30