Fixed some stupid stuff.
This commit is contained in:
parent
7e6b5df51c
commit
36e262e426
@ -22,7 +22,6 @@ void main() {
|
|||||||
vec4 dayColor = texture(uTexture, vTexCoord);
|
vec4 dayColor = texture(uTexture, vTexCoord);
|
||||||
if (sunAngle >= 0.0) {
|
if (sunAngle >= 0.0) {
|
||||||
textureColor = mix(dayColor, texture(nightTexture, vTexCoord), sunAngle);
|
textureColor = mix(dayColor, texture(nightTexture, vTexCoord), sunAngle);
|
||||||
textureColor = mix(vec4(0.0, 0.0, 0.0, 1.0), textureColor, 1.0 - sunAngle);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
textureColor = dayColor;
|
textureColor = dayColor;
|
||||||
|
46
graphics.cc
46
graphics.cc
@ -126,10 +126,6 @@ void Graphics::init(Level* level) {
|
|||||||
|
|
||||||
lightingShader->use();
|
lightingShader->use();
|
||||||
|
|
||||||
for (unsigned int i = 0; i<depth_directionalMaps.size(); i++) {
|
|
||||||
// start with texture unit 1 because the first is reserved for the texture
|
|
||||||
lightingShader->setTexture("shadowMap_directional" + std::to_string(i), depth_directionalMaps.at(i), i+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// always generate and bind 10 cube maps, because otherwise the shader won't work
|
// always generate and bind 10 cube maps, because otherwise the shader won't work
|
||||||
@ -145,12 +141,6 @@ void Graphics::init(Level* level) {
|
|||||||
|
|
||||||
framebuffer_cube = SharedFrameBufferObject(new FrameBufferObject());
|
framebuffer_cube = SharedFrameBufferObject(new FrameBufferObject());
|
||||||
|
|
||||||
if (level->getLights()->size() > 0) {
|
|
||||||
for(unsigned int i = 0; i<depth_cubeMaps.size(); i++){
|
|
||||||
// start with texture unit 4 because the first four are used by the texture and the directional shadow map
|
|
||||||
lightingShader->setTexture("shadowMap_cube" + std::to_string(i), depth_cubeMaps.at(i), i+4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
light_fbo_color_texture = SharedTexture2D(new Texture2D(windowSize, GL_RGBA8));
|
light_fbo_color_texture = SharedTexture2D(new Texture2D(windowSize, GL_RGBA8));
|
||||||
light_fbo_color_texture->setMinFilter(GL_NEAREST);
|
light_fbo_color_texture->setMinFilter(GL_NEAREST);
|
||||||
@ -169,12 +159,9 @@ void Graphics::init(Level* level) {
|
|||||||
framebuffer_light->validate();
|
framebuffer_light->validate();
|
||||||
|
|
||||||
flamePostShader->use();
|
flamePostShader->use();
|
||||||
flamePostShader->setTexture("light_fbo", light_fbo_color_texture, 14);
|
|
||||||
flamePostShader->setUniform("windowSizeX", int(windowSize.x));
|
flamePostShader->setUniform("windowSizeX", int(windowSize.x));
|
||||||
flamePostShader->setUniform("windowSizeY", int(windowSize.y));
|
flamePostShader->setUniform("windowSizeY", int(windowSize.y));
|
||||||
|
|
||||||
skydomeShader->use();
|
|
||||||
skydomeShader->setTexture("nightTexture", level->getSkydome()->getNightTexture()->getReference(), 15);
|
|
||||||
|
|
||||||
flame_fbo_color_texture = SharedTexture2D(new Texture2D(windowSize, GL_RGBA8));
|
flame_fbo_color_texture = SharedTexture2D(new Texture2D(windowSize, GL_RGBA8));
|
||||||
flame_fbo_color_texture->setMinFilter(GL_NEAREST);
|
flame_fbo_color_texture->setMinFilter(GL_NEAREST);
|
||||||
@ -187,12 +174,7 @@ void Graphics::init(Level* level) {
|
|||||||
framebuffer_flame->setClearColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.0f));
|
framebuffer_flame->setClearColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.0f));
|
||||||
framebuffer_flame->validate();
|
framebuffer_flame->validate();
|
||||||
|
|
||||||
mergeShader->use();
|
bindTextureUnits();
|
||||||
mergeShader->setTexture("flame_fbo", flame_fbo_color_texture, 16);
|
|
||||||
mergeShader->setTexture("light_fbo", light_fbo_color_texture, 17);
|
|
||||||
|
|
||||||
flameColorShader->use();
|
|
||||||
flameColorShader->setTexture("flame_fbo", flame_fbo_color_texture, 18);
|
|
||||||
|
|
||||||
updateClosestLights();
|
updateClosestLights();
|
||||||
}
|
}
|
||||||
@ -201,6 +183,30 @@ glm::uvec2 Graphics::getWindowSize() {
|
|||||||
return windowSize;
|
return windowSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Graphics::bindTextureUnits() {
|
||||||
|
lightingShader->use();
|
||||||
|
for (unsigned int i = 0; i<depth_directionalMaps.size(); i++) {
|
||||||
|
// start with texture unit 1 because the first is reserved for the texture
|
||||||
|
lightingShader->setTexture("shadowMap_directional" + std::to_string(i), depth_directionalMaps.at(i), i+1);
|
||||||
|
}
|
||||||
|
if (level->getLights()->size() > 0) {
|
||||||
|
for(unsigned int i = 0; i<depth_cubeMaps.size(); i++){
|
||||||
|
// start with texture unit 4 because the first four are used by the texture and the directional shadow map
|
||||||
|
lightingShader->setTexture("shadowMap_cube" + std::to_string(i), depth_cubeMaps.at(i), i+4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
flamePostShader->use();
|
||||||
|
flamePostShader->setTexture("light_fbo", light_fbo_color_texture, 14);
|
||||||
|
skydomeShader->use();
|
||||||
|
skydomeShader->setTexture("nightTexture", level->getSkydome()->getNightTexture()->getReference(), 15);
|
||||||
|
mergeShader->use();
|
||||||
|
mergeShader->setTexture("flame_fbo", flame_fbo_color_texture, 16);
|
||||||
|
mergeShader->setTexture("light_fbo", light_fbo_color_texture, 17);
|
||||||
|
|
||||||
|
flameColorShader->use();
|
||||||
|
flameColorShader->setTexture("flame_fbo", flame_fbo_color_texture, 18);
|
||||||
|
}
|
||||||
|
|
||||||
void Graphics::render(double time)
|
void Graphics::render(double time)
|
||||||
{
|
{
|
||||||
// At first render shadows
|
// At first render shadows
|
||||||
@ -480,8 +486,10 @@ void Graphics::resize(glm::uvec2 windowSize) {
|
|||||||
}
|
}
|
||||||
light_fbo_color_texture->resize(windowSize);
|
light_fbo_color_texture->resize(windowSize);
|
||||||
light_fbo_depth_texture->resize(windowSize);
|
light_fbo_depth_texture->resize(windowSize);
|
||||||
|
flame_fbo_color_texture->resize(windowSize);
|
||||||
flamePostShader->setUniform("windowSizeX", int(windowSize.x));
|
flamePostShader->setUniform("windowSizeX", int(windowSize.x));
|
||||||
flamePostShader->setUniform("windowSizeY", int(windowSize.y));
|
flamePostShader->setUniform("windowSizeY", int(windowSize.y));
|
||||||
|
bindTextureUnits();
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::mat4 Graphics::buildViewMatrix(Level* level) {
|
glm::mat4 Graphics::buildViewMatrix(Level* level) {
|
||||||
|
@ -21,6 +21,7 @@ class Graphics {
|
|||||||
void resize(glm::uvec2 windowSize);
|
void resize(glm::uvec2 windowSize);
|
||||||
float getFarPlane();
|
float getFarPlane();
|
||||||
private:
|
private:
|
||||||
|
void bindTextureUnits();
|
||||||
void updateLights();
|
void updateLights();
|
||||||
void updateClosestLights();
|
void updateClosestLights();
|
||||||
bool compareLightDistances(Light a, Light b);
|
bool compareLightDistances(Light a, Light b);
|
||||||
|
Loading…
Reference in New Issue
Block a user