Brenta Engine 1.2
Loading...
Searching...
No Matches
phong.cpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#include <brenta/renderer/phong.hpp>
7#include <brenta/renderer/opengl/shader.hpp>
8
9#include <string>
10
11using namespace brenta;
12
13void PhongPointLight::apply(int light_number)
14{
15 // Get the current shader
16 GLint prog = 0;
17 glGetIntegerv(GL_CURRENT_PROGRAM, &prog);
18
19 // Set uniforms
20 auto light_array = "point_lights[" + std::to_string(light_number) + "]";
21 Shader::set_vec3(prog, light_array + ".position", this->position);
22 Shader::set_float(prog, light_array + ".strength", this->strength);
23 Shader::set_vec3(prog, light_array + ".ambient", this->ambient);
24 Shader::set_vec3(prog, light_array + ".diffuse", this->diffuse);
25 Shader::set_vec3(prog, light_array + ".specular", this->specular);
26 Shader::set_float(prog, light_array + ".constant", this->constant);
27 Shader::set_float(prog, light_array + ".linear", this->linear);
28 Shader::set_float(prog, light_array + ".quadratic", this->quadratic);
29}
30
31PhongPointLight &PhongPointLight::set_ambient(glm::vec3 ambient)
32{
33 this->ambient = ambient;
34 return *this;
35}
36
37PhongPointLight &PhongPointLight::set_diffuse(glm::vec3 diffuse)
38{
39 this->diffuse = diffuse;
40 return *this;
41}
42
43PhongPointLight &PhongPointLight::set_specular(glm::vec3 specular)
44{
45 this->specular = specular;
46 return *this;
47}
48
49PhongPointLight &PhongPointLight::set_position(glm::vec3 position)
50{
51 this->position = position;
52 return *this;
53}
54
55PhongPointLight &PhongPointLight::set_strength(float strength)
56{
57 this->strength = strength;
58 return *this;
59}
60
61PhongPointLight &PhongPointLight::set_constant(float constant)
62{
63 this->constant = constant;
64 return *this;
65}
66
67PhongPointLight &PhongPointLight::set_linear(float linear)
68{
69 this->linear = linear;
70 return *this;
71}
72
73PhongPointLight &PhongPointLight::set_quadratic(float quadratic)
74{
75 this->quadratic = quadratic;
76 return *this;
77}
78
79void PhongDirLight::apply()
80{
81 // Get the current shader
82 GLint prog = 0;
83 glGetIntegerv(GL_CURRENT_PROGRAM, &prog);
84
85 // Set uniforms
86 Shader::set_vec3(prog, "dir_light.direction", this->direction);
87 Shader::set_float(prog, "dir_light.strength", this->strength);
88 Shader::set_vec3(prog, "dir_light.ambient", this->ambient);
89 Shader::set_vec3(prog, "dir_light.diffuse", this->diffuse);
90 Shader::set_vec3(prog, "dir_light.specular", this->specular);
91
92 Shader::set_bool(prog, "use_dir_light", true);
93}
94
95PhongDirLight &PhongDirLight::set_ambient(glm::vec3 ambient)
96{
97 this->ambient = ambient;
98 return *this;
99}
100
101PhongDirLight &PhongDirLight::set_diffuse(glm::vec3 diffuse)
102{
103 this->diffuse = diffuse;
104 return *this;
105}
106
107PhongDirLight &PhongDirLight::set_specular(glm::vec3 specular)
108{
109 this->specular = specular;
110 return *this;
111}
112
113PhongDirLight &PhongDirLight::set_direction(glm::vec3 direction)
114{
115 this->direction = direction;
116 return *this;
117}
118
119PhongDirLight &PhongDirLight::set_strength(float strength)
120{
121 this->strength = strength;
122 return *this;
123}
124