6#include <brenta/renderer/material.hpp>
7#include <brenta/renderer/opengl/texture.hpp>
11Material::Material(
Shader&& s)
13 this->shader = tenno::make_shared<Shader>(tenno::move(s));
20 for (
auto const& [name, val] : this->ints)
21 shader->set_int(name.c_str(), val);
22 for (
auto const& [name, val] : this->floats)
23 shader->set_float(name.c_str(), val);
24 for (
auto const& [name, val] : this->vectors)
25 shader->set_vec3(name.c_str(), val);
27 for (
auto const& [name, index_tex] : this->textures)
29 auto tex = std::get<1>(index_tex);
30 tex->active_texture(std::get<0>(index_tex));
32 shader->set_int(name.c_str(), std::get<0>(index_tex));
37Material &Material::set_int(
const std::string &name,
int val)
39 this->ints[name] = val;
43Material &Material::set_float(
const std::string &name,
float val)
45 this->floats[name] = val;
49Material &Material::set_vector(
const std::string &name, glm::vec3 val)
51 this->vectors[name] = val;
55Material &Material::set_texture(
const std::string &name,
56 tenno::shared_ptr<Texture> val,
59 this->textures[name] = std::make_pair(index, val);
64Material::Builder::shader(tenno::shared_ptr<Shader> shader)
66 this->_shader = shader;
71Material::Builder::integer(
const std::string &name,
int val)
73 this->ints.push_back(std::make_tuple(name, val));
78Material::Builder::floating(
const std::string &name,
float val)
80 this->floats.push_back(std::make_tuple(name, val));
85Material::Builder::vector(
const std::string &name, glm::vec3 val)
87 this->vectors.push_back(std::make_tuple(name, val));
92Material::Builder::texture(
const std::string &name,
93 tenno::shared_ptr<Texture> val,
int index)
95 this->textures.push_back(std::make_tuple(name,
96 std::make_tuple(index, val)));
104 for (
auto& f : this->ints)
106 material.set_int(std::get<0>(f), std::get<1>(f));
108 for (
auto& f : this->floats)
110 material.set_float(std::get<0>(f), std::get<1>(f));
112 for (
auto& v : this->vectors)
114 material.set_vector(std::get<0>(v), std::get<1>(v));
116 for (
auto& t : this->textures)
118 material.set_texture(std::get<0>(t),
119 std::get<1>(std::get<1>(t)),
120 std::get<0>(std::get<1>(t)));