Loading...
Searching...
No Matches
hellfire::Material Class Reference

#include <Material.h>

Inheritance diagram for hellfire::Material:
Collaboration diagram for hellfire::Material:

Classes

struct  Property
 
struct  ShaderInfo
 

Public Types

enum class  PropertyType {
  FLOAT , VEC2 , VEC3 , COLOR3 ,
  VEC4 , COLOR4 , TEXTURE , TEXTURE_FLAG ,
  BOOL , INT , MAT3 , MAT4
}
 

Public Member Functions

 Material (const std::string &name)
 
template<typename T >
void set_property (const std::string &name, const T &value, PropertyType type, const std::string &uniform_name="")
 
template<typename T >
void set_property (const std::string &name, const T &value, const std::string &uniform_name="")
 
template<typename T >
get_property (const std::string &name, const T &default_value=T{}) const
 
Materialset_texture (const std::string &path, TextureType type, int texture_slot=0)
 
Materialset_texture (const std::shared_ptr< Texture > &texture, int texture_slot=0)
 
Materialset_texture (Texture *texture, int texture_slot=0)
 
void set_diffuse_color (const glm::vec3 &color)
 
void set_ambient_color (const glm::vec3 &color)
 
void set_specular_color (const glm::vec3 &color)
 
void set_emissive_color (const glm::vec3 &color)
 
void set_shininess (float shininess)
 
void set_metallic (float metallic)
 
void set_roughness (float roughness)
 
void set_opacity (float opacity)
 
bool is_transparent () const
 
void set_uv_tiling (const glm::vec2 &tiling)
 
void set_uv_tiling (float x, float y)
 
void set_uv_offset (const glm::vec2 &offset)
 
void set_uv_rotation (float rotation)
 
void set_custom_shader (const std::string &vertex_path, const std::string &fragment_path)
 
void set_custom_shader (const ShaderInfo &shader_info)
 
void add_shader_define (const std::string &define)
 
void set_uniform_mapping (const std::string &property_name, const std::string &uniform_name)
 
bool has_custom_shader () const
 
const ShaderInfoget_shader_info () const
 
void set_compiled_shader_id (uint32_t shader_id)
 
uint32_t get_compiled_shader_id () const
 
void bind () const
 Used to bind a Material for rendering.
 
void unbind () const
 
void unbind_all_textures () const
 
const auto & get_properties () const
 
const std::string & get_name () const
 
void set_name (const std::string &name)
 

Private Member Functions

Materialset_texture_internal (Texture *texture, TextureType type, int texture_slot)
 
void bind_all_properties (uint32_t shader_program, int &texture_unit) const
 
bool has_property (const std::string &name) const
 
Property get_property_object (const std::string &name) const
 

Private Attributes

std::string name_
 
std::map< std::string, Propertyproperties_
 
std::optional< ShaderInfocustom_shader_info_
 
uint32_t compiled_shader_id_ = 0
 
std::shared_ptr< Materialbase_material_
 
std::unordered_map< std::string, Propertyoverrides_
 
std::unordered_set< std::string > touched_uniforms_
 
std::vector< int > bound_texture_units_
 

Detailed Description

Definition at line 21 of file Material.h.

Member Enumeration Documentation

◆ PropertyType

Enumerator
FLOAT 
VEC2 
VEC3 
COLOR3 
VEC4 
COLOR4 
TEXTURE 
TEXTURE_FLAG 
BOOL 
INT 
MAT3 
MAT4 

Definition at line 23 of file Material.h.

Constructor & Destructor Documentation

◆ Material()

hellfire::Material::Material ( const std::string &  name)
inlineexplicit

Definition at line 112 of file Material.h.

Member Function Documentation

◆ add_shader_define()

void hellfire::Material::add_shader_define ( const std::string &  define)
inline

Definition at line 215 of file Material.h.

◆ bind()

void hellfire::Material::bind ( ) const

Used to bind a Material for rendering.

Definition at line 11 of file Material.cpp.

◆ bind_all_properties()

void hellfire::Material::bind_all_properties ( uint32_t  shader_program,
int &  texture_unit 
) const
private

Definition at line 40 of file Material.cpp.

◆ get_compiled_shader_id()

uint32_t hellfire::Material::get_compiled_shader_id ( ) const
inline

Definition at line 239 of file Material.h.

◆ get_name()

const std::string & hellfire::Material::get_name ( ) const
inline

Definition at line 251 of file Material.h.

◆ get_properties()

const auto & hellfire::Material::get_properties ( ) const
inline

Definition at line 250 of file Material.h.

◆ get_property()

template<typename T >
T hellfire::Material::get_property ( const std::string &  name,
const T &  default_value = T{} 
) const
inline

Definition at line 128 of file Material.h.

◆ get_property_object()

Property hellfire::Material::get_property_object ( const std::string &  name) const
inlineprivate

Definition at line 282 of file Material.h.

◆ get_shader_info()

const ShaderInfo * hellfire::Material::get_shader_info ( ) const
inline

Definition at line 231 of file Material.h.

◆ has_custom_shader()

bool hellfire::Material::has_custom_shader ( ) const
inline

Definition at line 227 of file Material.h.

◆ has_property()

bool hellfire::Material::has_property ( const std::string &  name) const
inlineprivate

Definition at line 278 of file Material.h.

◆ is_transparent()

bool hellfire::Material::is_transparent ( ) const
inline

Definition at line 185 of file Material.h.

◆ set_ambient_color()

void hellfire::Material::set_ambient_color ( const glm::vec3 &  color)
inline

Definition at line 156 of file Material.h.

◆ set_compiled_shader_id()

void hellfire::Material::set_compiled_shader_id ( uint32_t  shader_id)
inline

Definition at line 235 of file Material.h.

◆ set_custom_shader() [1/2]

void hellfire::Material::set_custom_shader ( const ShaderInfo shader_info)
inline

Definition at line 211 of file Material.h.

◆ set_custom_shader() [2/2]

void hellfire::Material::set_custom_shader ( const std::string &  vertex_path,
const std::string &  fragment_path 
)
inline

Definition at line 207 of file Material.h.

◆ set_diffuse_color()

void hellfire::Material::set_diffuse_color ( const glm::vec3 &  color)
inline

Definition at line 152 of file Material.h.

◆ set_emissive_color()

void hellfire::Material::set_emissive_color ( const glm::vec3 &  color)
inline

Definition at line 164 of file Material.h.

◆ set_metallic()

void hellfire::Material::set_metallic ( float  metallic)
inline

Definition at line 173 of file Material.h.

◆ set_name()

void hellfire::Material::set_name ( const std::string &  name)
inline

Definition at line 252 of file Material.h.

◆ set_opacity()

void hellfire::Material::set_opacity ( float  opacity)
inline

Definition at line 181 of file Material.h.

◆ set_property() [1/2]

template<typename T >
void hellfire::Material::set_property ( const std::string &  name,
const T &  value,
const std::string &  uniform_name = "" 
)
inline

Definition at line 122 of file Material.h.

◆ set_property() [2/2]

template<typename T >
void hellfire::Material::set_property ( const std::string &  name,
const T &  value,
PropertyType  type,
const std::string &  uniform_name = "" 
)
inline

Definition at line 116 of file Material.h.

◆ set_roughness()

void hellfire::Material::set_roughness ( float  roughness)
inline

Definition at line 177 of file Material.h.

◆ set_shininess()

void hellfire::Material::set_shininess ( float  shininess)
inline

Definition at line 169 of file Material.h.

◆ set_specular_color()

void hellfire::Material::set_specular_color ( const glm::vec3 &  color)
inline

Definition at line 160 of file Material.h.

◆ set_texture() [1/3]

Material & hellfire::Material::set_texture ( const std::shared_ptr< Texture > &  texture,
int  texture_slot = 0 
)
inline

Definition at line 143 of file Material.h.

◆ set_texture() [2/3]

Material & hellfire::Material::set_texture ( const std::string &  path,
TextureType  type,
int  texture_slot = 0 
)
inline

Definition at line 138 of file Material.h.

◆ set_texture() [3/3]

Material & hellfire::Material::set_texture ( Texture texture,
int  texture_slot = 0 
)
inline

Definition at line 147 of file Material.h.

◆ set_texture_internal()

Material & hellfire::Material::set_texture_internal ( Texture texture,
TextureType  type,
int  texture_slot 
)
inlineprivate

Definition at line 256 of file Material.h.

◆ set_uniform_mapping()

void hellfire::Material::set_uniform_mapping ( const std::string &  property_name,
const std::string &  uniform_name 
)
inline

Definition at line 221 of file Material.h.

◆ set_uv_offset()

void hellfire::Material::set_uv_offset ( const glm::vec2 &  offset)
inline

Definition at line 198 of file Material.h.

◆ set_uv_rotation()

void hellfire::Material::set_uv_rotation ( float  rotation)
inline

Definition at line 202 of file Material.h.

◆ set_uv_tiling() [1/2]

void hellfire::Material::set_uv_tiling ( const glm::vec2 &  tiling)
inline

Definition at line 190 of file Material.h.

◆ set_uv_tiling() [2/2]

void hellfire::Material::set_uv_tiling ( float  x,
float  y 
)
inline

Definition at line 194 of file Material.h.

◆ unbind()

void hellfire::Material::unbind ( ) const

Definition at line 24 of file Material.cpp.

◆ unbind_all_textures()

void hellfire::Material::unbind_all_textures ( ) const

Definition at line 31 of file Material.cpp.

Member Data Documentation

◆ base_material_

std::shared_ptr<Material> hellfire::Material::base_material_
private

Definition at line 107 of file Material.h.

◆ bound_texture_units_

std::vector<int> hellfire::Material::bound_texture_units_
mutableprivate

Definition at line 254 of file Material.h.

◆ compiled_shader_id_

uint32_t hellfire::Material::compiled_shader_id_ = 0
private

Definition at line 104 of file Material.h.

◆ custom_shader_info_

std::optional<ShaderInfo> hellfire::Material::custom_shader_info_
private

Definition at line 103 of file Material.h.

◆ name_

std::string hellfire::Material::name_
private

Definition at line 101 of file Material.h.

◆ overrides_

std::unordered_map<std::string, Property> hellfire::Material::overrides_
private

Definition at line 108 of file Material.h.

◆ properties_

std::map<std::string, Property> hellfire::Material::properties_
private

Definition at line 102 of file Material.h.

◆ touched_uniforms_

std::unordered_set<std::string> hellfire::Material::touched_uniforms_
mutableprivate

Definition at line 109 of file Material.h.


The documentation for this class was generated from the following files: