Euphoria
material.h
Go to the documentation of this file.
1#pragma once
2
3// #include "eu/render/color.h"
4#include "eu/render/texture.h"
5#include "eu/render/assets.h"
6
7#include <memory>
8#include <optional>
9
10namespace eu::render
11{
12struct CompiledCamera;
13struct LoadedShader_Default_Container;
14struct LoadedShader_Unlit_Container;
15struct RenderSettings;
16struct Lights;
17struct State;
18
24struct ShaderResource;
25struct RenderContext;
26
29{
30 Material() = default;
31 virtual ~Material() = default;
32
33 Material(const Material&) = delete;
34 Material(Material&&) = delete;
35 void operator=(const Material&) = delete;
36 void operator=(Material&&) = delete;
37
38 virtual void use_shader(const RenderContext&) = 0;
39 virtual void set_uniforms(const RenderContext&, const CompiledCamera&, const std::optional<m4>&) = 0;
40 virtual void bind_textures(const RenderContext&, State* states, Assets* assets) = 0;
41 virtual void apply_lights(
42 const RenderContext&, const Lights& lights, const RenderSettings& settings, State* states, Assets* assets
43 ) = 0;
44
45 [[nodiscard]] virtual bool is_transparent() const = 0;
46};
47
50{
53 float alpha = 1.0f;
54 std::shared_ptr<Texture2d> texture;
55
57 void use_shader(const RenderContext&) override;
58 void set_uniforms(const RenderContext&, const CompiledCamera&, const std::optional<m4>&) override;
59 void bind_textures(const RenderContext&, State* states, Assets* assets) override;
61 const RenderContext&, const Lights& lights, const RenderSettings& settings, State* states, Assets* assets
62 ) override;
63
64 [[nodiscard]] bool is_transparent() const override;
65};
66
69{
72 float alpha = 1.0f;
73
76 float shininess = 32.0f;
77 float emissive_factor = 0.0f;
78
79 std::shared_ptr<Texture2d> diffuse;
80 std::shared_ptr<Texture2d> specular;
81 std::shared_ptr<Texture2d> emissive;
82
84 void use_shader(const RenderContext&) override;
85 void set_uniforms(const RenderContext&, const CompiledCamera&, const std::optional<m4>&) override;
86 void bind_textures(const RenderContext&, State* states, Assets* assets) override;
88 const RenderContext&, const Lights& lights, const RenderSettings& settings, State* states, Assets* assets
89 ) override;
90
91 [[nodiscard]] bool is_transparent() const override;
92};
93
94
96
101} // namespace eu::render
v3 vec_from_lin(const Lin_rgb &lin)
constexpr auto white
Definition colors.h:156
Definition ui.h:4
Represents a linear sRGB color.
Definition colors.h:29
A (inclusive) range between two values.
Definition range.h:19
Represents color in gamma (non-linear) space (aka sRGB).
Definition colors.h:14
A "compiled" camera for use in rendering.
Definition camera.h:41
A material affected by light.
Definition material.h:69
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
Definition material.h:80
void set_uniforms(const RenderContext &, const CompiledCamera &, const std::optional< m4 > &) override
std::shared_ptr< Texture2d > diffuse
Definition material.h:79
void apply_lights(const RenderContext &, const Lights &lights, const RenderSettings &settings, State *states, Assets *assets) override
const LoadedShader_Default_Container * shader_container
Definition material.h:70
std::shared_ptr< Texture2d > emissive
Definition material.h:81
All lights in a world.
Definition world.h:170
Base class for all materials.
Definition material.h:29
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.
Definition state.h:119
A unlit (or fully lit) material, not affected by light.
Definition material.h:50
bool is_transparent() const override
void use_shader(const RenderContext &) override
const LoadedShader_Unlit_Container * shader_container
Definition material.h:51
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
Definition material.h:54
a 3d vector
Definition vec3.h:27