X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Fpbrmaterial.h;fp=source%2Fmaterials%2Fpbrmaterial.h;h=2a0eef3531951efbc2669644d27ff4671a552d33;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/materials/pbrmaterial.h b/source/materials/pbrmaterial.h new file mode 100644 index 00000000..2a0eef35 --- /dev/null +++ b/source/materials/pbrmaterial.h @@ -0,0 +1,59 @@ +#ifndef MSP_GL_PBRMATERIAL_H_ +#define MSP_GL_PBRMATERIAL_H_ + +#include "material.h" + +namespace Msp { +namespace GL { + +class PbrMaterial: public Material +{ +public: + class Loader: public DataFile::DerivedObjectLoader > + { + private: + static ActionMap shared_actions; + + public: + Loader(PbrMaterial &); + Loader(PbrMaterial &, Collection &); + + private: + virtual void init_actions(); + }; + +private: + Property base_color; + Property normal; + Property metalness; + Property roughness; + Property occlusion; + Property emission; + bool receive_shadows; + +public: + PbrMaterial(); + +protected: + virtual std::string create_program_source() const; + +public: + virtual void attach_textures_to(Texturing &, ProgramData &) const; + + void set_base_color(const Color &); + void set_base_color_map(const Texture *); + void set_normal_map(const Texture *); + void set_metalness(float); + void set_metalness_map(const Texture *); + void set_roughness(float); + void set_roughness_map(const Texture *); + void set_occlusion_map(const Texture *); + void set_emission(const Color &); + void set_emission_map(const Texture *); + void set_receive_shadows(bool); +}; + +} // namespace GL +} // namespace Msp + +#endif