13struct LoadedShader_Default_Container;
14struct LoadedShader_Unlit_Container;
v3 vec_from_lin(const Lin_rgb &lin)
Represents a linear sRGB color.
A (inclusive) range between two values.
Represents color in gamma (non-linear) space (aka sRGB).
A "compiled" camera for use in rendering.
A material affected by light.
void use_shader(const RenderContext &) override
void bind_textures(const RenderContext &, State *states, Assets *assets) override
DefaultMaterial(const ShaderResource &resource)
bool is_transparent() const override
std::shared_ptr< Texture2d > specular
void set_uniforms(const RenderContext &, const CompiledCamera &, const std::optional< m4 > &) override
std::shared_ptr< Texture2d > diffuse
void apply_lights(const RenderContext &, const Lights &lights, const RenderSettings &settings, State *states, Assets *assets) override
const LoadedShader_Default_Container * shader_container
std::shared_ptr< Texture2d > emissive
Base class for all materials.
virtual void bind_textures(const RenderContext &, State *states, Assets *assets)=0
Material(const Material &)=delete
virtual void use_shader(const RenderContext &)=0
void operator=(Material &&)=delete
virtual bool is_transparent() const =0
virtual void apply_lights(const RenderContext &, const Lights &lights, const RenderSettings &settings, State *states, Assets *assets)=0
void operator=(const Material &)=delete
virtual void set_uniforms(const RenderContext &, const CompiledCamera &, const std::optional< m4 > &)=0
virtual ~Material()=default
Material(Material &&)=delete
Stores information that is useful when selecting a shader part from a shader container.
Startup settings for the renderer.
A "cache" for the current open gl state.
A unlit (or fully lit) material, not affected by light.
bool is_transparent() const override
void use_shader(const RenderContext &) override
const LoadedShader_Unlit_Container * shader_container
UnlitMaterial(const ShaderResource &resource)
void set_uniforms(const RenderContext &, const CompiledCamera &, const std::optional< m4 > &) override
void bind_textures(const RenderContext &, State *states, Assets *assets) override
void apply_lights(const RenderContext &, const Lights &lights, const RenderSettings &settings, State *states, Assets *assets) override
std::shared_ptr< Texture2d > texture