-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLightSystem.cpp
More file actions
47 lines (35 loc) · 1.74 KB
/
LightSystem.cpp
File metadata and controls
47 lines (35 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "LightSystem.hpp"
LightSystem::LightSystem(unsigned int width, unsigned int height) {
LightSystem::lights_count = 26 * 24;
LightSystem::lights = (sf::Glsl::Vec3 *)malloc(LightSystem::lights_count * sizeof(sf::Glsl::Vec3));
LightSystem::lights[0] = sf::Glsl::Vec3(0.0, 1.0, 1.5);
LightSystem::lights[1] = sf::Glsl::Vec3(1.0, 1.0, 1.5);
LightSystem::lights[2] = sf::Glsl::Vec3(0.5, 0.5, 1.5);
LightSystem::darkness.create(width, height);
LightSystem::darkness.clear(sf::Color(2, 0, 4));
if (!LightSystem::lightshader.loadFromFile("assets/shaders/illumination.frag", sf::Shader::Fragment)) {
puts("failed loading lightsystem shader!");
}
LightSystem::darkness_sprite.setTexture(LightSystem::darkness.getTexture());
LightSystem::lightshader.setUniform("texture", sf::Shader::CurrentTexture);
LightSystem::lightshader.setUniform("global_illumination", 0.0f);
LightSystem::lightshader.setUniformArray("lights", LightSystem::lights, LightSystem::lights_count);
}
void LightSystem::setLight(size_t idx, sf::Glsl::Vec3 vec) {
if (idx >= LightSystem::lights_count) {
puts("cannot set light, not enough memory allocated");
return;
}
LightSystem::lights[idx] = vec;
LightSystem::lightshader.setUniformArray("lights", LightSystem::lights, LightSystem::lights_count);
}
void LightSystem::setGlobalLight(float global_illumination) {
LightSystem::global_illumination = global_illumination;
LightSystem::lightshader.setUniform("global_illumination", LightSystem::global_illumination);
}
void LightSystem::render(sf::RenderWindow& window) {
/* Update shader uniform */
//LightSystem::lightshader.setUniform("time", LightSystem::time++);
LightSystem::darkness.display();
window.draw(LightSystem::darkness_sprite, &(LightSystem::lightshader));
}