Sprites now have a distance lighting calculation that's the same as the raycaster using a shader.

master
Zed A. Shaw 2 months ago
parent a19bc47904
commit 3986e6978e
  1. 5
      gui.cpp
  2. 13
      raycaster.cpp
  3. 3
      raycaster.hpp
  4. 8
      shaders/modal.frag

@ -1,4 +1,3 @@
#define FSM_DEBUG 1
#include "gui.hpp"
#include <iostream>
#include <chrono>
@ -41,8 +40,8 @@ namespace gui {
}
void FSM::START(Event ) {
// ZED: this must die
generate_map();
$rayview.init_shaders();
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
state(State::IDLE);
@ -199,7 +198,7 @@ namespace gui {
$stats.sample(1/elapsed.count());
draw_gui();
draw_weapon();
// draw_weapon();
$window.display();
}

@ -136,7 +136,11 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
$anim.step(*sf_sprite, texX, texY, texX_end - texX, textureHeight);
sf_sprite->setPosition({x, y});
target.draw(*sf_sprite);
$brightness.setUniform("offsetFactor", sf::Glsl::Vec2{0.0f, 0.0f});
float level = sqrt(rec.first);
$brightness.setUniform("darkness", level);
target.draw(*sf_sprite, &$brightness);
}
}
}
@ -351,3 +355,10 @@ void Raycaster::set_level(GameLevel level) {
}
});
}
void Raycaster::init_shaders() {
dbc::check(sf::Shader::isAvailable(), "no shaders?!");
bool good = $brightness.loadFromFile("shaders/modal.frag", sf::Shader::Type::Fragment);
dbc::check(good, "shader could not be loaded");
$brightness.setUniform("source", sf::Shader::CurrentTexture);
}

@ -13,7 +13,7 @@ using RGBA = uint32_t;
struct Raycaster {
int $pitch=0;
sf::Clock $clock;
sf::Shader $brightness;
TexturePack &$textures;
double $posX = 0;
double $posY = 0;
@ -56,4 +56,5 @@ struct Raycaster {
}
void set_level(GameLevel level);
void init_shaders();
};

@ -1,6 +1,6 @@
uniform sampler2D source;
uniform sampler2D source;
uniform sampler2D bloom;
uniform vec2 offsetFactor;
uniform vec2 offsetFactor;
uniform float darkness;
void main()
@ -19,5 +19,7 @@ void main()
vec4 sourceFragment = texture2D(source, gl_TexCoord[0].xy);
vec4 bloomFragment = texture2D(bloom, gl_TexCoord[0].xy);
gl_FragColor = color + sourceFragment - bloomFragment - darkness;
float alpha = color.a;
gl_FragColor = (color + sourceFragment - bloomFragment) / darkness;
gl_FragColor.a = alpha;
}

Loading…
Cancel
Save