From 071808a0f852571bfe90e77129e27873ce2ede5f Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 27 Jan 2025 11:36:00 -0500 Subject: [PATCH] Playing around with shaders for effects on the scene. --- animator.cpp | 3 +++ animator.hpp | 11 +++++++++++ assets/monster-1.ogg | Bin 0 -> 18100 bytes main.cpp | 9 +++++++++ meson.build | 6 ++++++ raycaster.cpp | 14 +++++++++++--- raycaster.hpp | 6 +++++- shaders/modal.frag | 23 +++++++++++++++++++++++ 8 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 assets/monster-1.ogg create mode 100644 shaders/modal.frag diff --git a/animator.cpp b/animator.cpp index d69f9be..6c46503 100644 --- a/animator.cpp +++ b/animator.cpp @@ -1,5 +1,7 @@ #include "animator.hpp" #include "constants.hpp" +#include +#include "dbc.hpp" void Animator::step(sf::Sprite& sprite, int rect_x, int rect_y, int rect_w, int rect_h) { if(playing) { @@ -15,4 +17,5 @@ void Animator::step(sf::Sprite& sprite, int rect_x, int rect_y, int rect_w, int void Animator::play() { playing = true; + sound.play(); } diff --git a/animator.hpp b/animator.hpp index f0add4e..2c58430 100644 --- a/animator.hpp +++ b/animator.hpp @@ -1,14 +1,25 @@ #pragma once #include +#include +#include struct Animator { int width = 0; int height = 0; int max_frames = 0; + sf::SoundBuffer buffer; + sf::Sound sound; size_t count = 0; int frame = 0; bool playing = false; + Animator(int w, int h, int max, std::string sound_file) : + width(w), height(h), max_frames(max), + buffer(sound_file), + sound(buffer) + { + } + void step(sf::Sprite& sprite, int rect_x, int rect_y, int rect_w, int rect_h); void play(); diff --git a/assets/monster-1.ogg b/assets/monster-1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c4a5c2748786dcadfa52f5f2c1477848ac5a8206 GIT binary patch literal 18100 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 Db|S2_ literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 07070b4..7a56942 100644 --- a/main.cpp +++ b/main.cpp @@ -52,6 +52,7 @@ int main() { Raycaster rayview(window, MAP, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT); rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y); rayview.position_camera(player_x, player_y); + rayview.init_shaders(); double moveSpeed = 0.1; double rotSpeed = 0.1; @@ -95,6 +96,14 @@ int main() { stats.reset(); } + if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::P)) { + if(rayview.$active_shader == nullptr) { + rayview.$active_shader = &rayview.$paused; + } else { + rayview.$active_shader = nullptr; + } + } + if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { rayview.$anim.play(); rotation = -30.0f; diff --git a/meson.build b/meson.build index 49bff9d..d3f62f3 100644 --- a/meson.build +++ b/meson.build @@ -16,6 +16,11 @@ json = dependency('nlohmann_json') opengl32 = cc.find_library('opengl32', required: true) winmm = cc.find_library('winmm', required: true) gdi32 = cc.find_library('gdi32', required: true) +flac = dependency('flac') +ogg = dependency('ogg') +vorbis = dependency('vorbis') +vorbisfile = dependency('vorbisfile') +vorbisenc = dependency('vorbisenc') sfml_audio = dependency('sfml_audio') sfml_graphics = dependency('sfml_graphics') sfml_main = dependency('sfml_main') @@ -29,6 +34,7 @@ endif dependencies = [ fmt, json, opengl32, freetype2, + flac, ogg, vorbis, vorbisfile, vorbisenc, winmm, gdi32, sfml_audio, sfml_graphics, sfml_main, sfml_network, sfml_system, sfml_window, tracy diff --git a/raycaster.cpp b/raycaster.cpp index 9d2ad28..0064205 100644 --- a/raycaster.cpp +++ b/raycaster.cpp @@ -36,7 +36,8 @@ Raycaster::Raycaster(sf::RenderWindow& window, Matrix &map, int width, int heigh $map(map), spriteOrder(NUM_SPRITES), spriteDistance(NUM_SPRITES), - ZBuffer(width) + ZBuffer(width), + $anim(256, 256, 10, "assets/monster-1.ogg") { $view_sprite.setPosition({0, 0}); $pixels = make_unique($width * $height); @@ -46,6 +47,13 @@ Raycaster::Raycaster(sf::RenderWindow& window, Matrix &map, int width, int heigh $view_texture.setSmooth(false); } +void Raycaster::init_shaders() { + bool good = $paused.loadFromFile("shaders/modal.frag", sf::Shader::Type::Fragment); + dbc::check(good, "shader could not be loaded"); + $paused.setUniform("offsetFactor", sf::Glsl::Vec2{0.01f, 0.01f}); + $paused.setUniform("darkness", 0.01f); +} + void Raycaster::set_position(int x, int y) { $view_sprite.setPosition({(float)x, (float)y}); } @@ -58,7 +66,7 @@ void Raycaster::position_camera(float player_x, float player_y) { void Raycaster::draw_pixel_buffer() { $view_texture.update((uint8_t *)$pixels.get(), {(unsigned int)$width, (unsigned int)$height}, {0, 0}); - $window.draw($view_sprite); + $window.draw($view_sprite, $active_shader); } void Raycaster::clear() { @@ -152,7 +160,7 @@ void Raycaster::sprite_casting() { $anim.step(*sf_sprite, texX, texY, texX_end - texX, textureHeight); sf_sprite->setPosition({x, y}); - $window.draw(*sf_sprite); + $window.draw(*sf_sprite, $active_shader); } } } diff --git a/raycaster.hpp b/raycaster.hpp index c4bf766..24cb043 100644 --- a/raycaster.hpp +++ b/raycaster.hpp @@ -44,7 +44,9 @@ struct Raycaster { std::vector spriteOrder; std::vector spriteDistance; std::vector ZBuffer; // width - Animator $anim{256, 256, 10, 0}; + Animator $anim; + sf::Shader $paused; + sf::Shader* $active_shader = nullptr; Raycaster(sf::RenderWindow& window, Matrix &map, int width, int height); @@ -63,6 +65,8 @@ struct Raycaster { void position_camera(float player_x, float player_y); void set_position(int x, int y); + void init_shaders(); + inline size_t pixcoord(int x, int y) { if(!(x >=0 && x < $width)) { dbc::sentinel(fmt::format("pixcoord x={} but $width={}", x, $width)); diff --git a/shaders/modal.frag b/shaders/modal.frag new file mode 100644 index 0000000..9c1a9b2 --- /dev/null +++ b/shaders/modal.frag @@ -0,0 +1,23 @@ +uniform sampler2D source; +uniform sampler2D bloom; +uniform vec2 offsetFactor; +uniform float darkness; + +void main() +{ + vec2 textureCoordinates = gl_TexCoord[0].xy; + vec4 color = vec4(0.0); + color += texture2D(source, textureCoordinates - 4.0 * offsetFactor) * 0.0162162162; + color += texture2D(source, textureCoordinates - 3.0 * offsetFactor) * 0.0540540541; + color += texture2D(source, textureCoordinates - 2.0 * offsetFactor) * 0.1216216216; + color += texture2D(source, textureCoordinates - offsetFactor) * 0.1945945946; + color += texture2D(source, textureCoordinates) * 0.2270270270; + color += texture2D(source, textureCoordinates + offsetFactor) * 0.1945945946; + color += texture2D(source, textureCoordinates + 2.0 * offsetFactor) * 0.1216216216; + color += texture2D(source, textureCoordinates + 3.0 * offsetFactor) * 0.0540540541; + color += texture2D(source, textureCoordinates + 4.0 * offsetFactor) * 0.0162162162; + + vec4 sourceFragment = texture2D(source, gl_TexCoord[0].xy); + vec4 bloomFragment = texture2D(bloom, gl_TexCoord[0].xy); + gl_FragColor = color + sourceFragment - bloomFragment - darkness; +}