From fe2ab1fec8ec2f01ffd2017cfdbea787d4086c68 Mon Sep 17 00:00:00 2001 From: ReVHeaDRaZ Date: Wed, 14 Dec 2022 22:29:24 +1100 Subject: [PATCH] Added Control of Shader --- content/razbloom.frag | 8 +++--- src/Main.cpp | 60 +++++++++++++++++++++++++++++++++---------- src/Razshaders.h | 14 ++++++++-- src/ui.h | 36 +++++++++++++++++++------- 4 files changed, 91 insertions(+), 27 deletions(-) diff --git a/content/razbloom.frag b/content/razbloom.frag index 6e76b29..70d982d 100644 --- a/content/razbloom.frag +++ b/content/razbloom.frag @@ -2,14 +2,16 @@ uniform sampler2D currentTexture; uniform float time; uniform vec2 resolution; - -const float blurSize=1./640.; -const float intensity=2.95; +uniform float intensity; +uniform float blurSizeAmount; +//const float blurSize=1./640.; +//const float intensity=2.95; void main(){ vec2 iResolution=resolution; vec4 sum=vec4(0); vec2 texcoord=gl_FragCoord.xy/iResolution.xy; + float blurSize= 1. / blurSizeAmount; //vec2 texcoord=gl_TexCoord[0].xy; sum+=texture2D(currentTexture,vec2(texcoord.x,texcoord.y))*.20; diff --git a/src/Main.cpp b/src/Main.cpp index 8d408c2..96ed9ac 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -21,6 +21,9 @@ std::vector spiromorphs; int numberOfSpiros = 1; int selectedSpiro = 1; +float bloomIntensity = 3.0f; +float bloomBlurAmount = 640.0f; + uint32_t get_elapsed_u32(uint32_t current); void CalculateFrameTime(sf::Clock Frameclk); @@ -31,20 +34,21 @@ void InitANewSpiromorph(std::vector &spiros, int _selectSpiro, struc void UpdateSpiromorphs(std::vector &spiros, int _numberOfSpiros, float Frametime); void SetSpiromorphSpeed(std::vector &spiros, int _selectSpiro, float _speed); void SetTextForCurrentSpiro(); +void DrawHud(sf::RenderTarget &window); // Main------------------------------------------------------------------------ int main(int argc, char *argv[]) { int retval = 0; - // Parse options, + // Parse options, options = mainopt_parse(argc, argv); if(options.error) retval = -1; if(options.finished) return retval; - //Create a window + // Create a window winW = options.window_width; // Window Size winH = options.window_height; sf::Uint32 windowStyle; @@ -57,33 +61,34 @@ int main(int argc, char *argv[]) sf::RenderWindow window(sf::VideoMode(winW, winH), "Spiromorph", windowStyle); window.setFramerateLimit(60); - //Initialize Shaders + // Initialize Shaders if(!InitShaders(winW,winH)) return -1; - //Creating text and setting it's font and parameters + // Creating text and setting it's font and parameters InitTextObjects(&window); // Start a Clock for shaders and frames sf::Clock clk; - //Initialize Spiromorphs - + // Initialize Spiromorphs for(int i=0; i 10.0f) bloomIntensity = 10.0f; + SetBloomShader(bloomIntensity, bloomBlurAmount); + SetBloomText(bloomIntensity, bloomBlurAmount); + } + if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Num7){ + bloomIntensity -= 0.5f; + if(bloomIntensity < 0.0f) bloomIntensity = 0.0f; + SetBloomShader(bloomIntensity, bloomBlurAmount); + SetBloomText(bloomIntensity, bloomBlurAmount); + } + if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Num0){ + bloomBlurAmount += 5.0f; + if(bloomBlurAmount > 1000.0f) bloomBlurAmount = 1000.0f; + SetBloomShader(bloomIntensity, bloomBlurAmount); + SetBloomText(bloomIntensity, bloomBlurAmount); + } + if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Num9){ + bloomBlurAmount -= 5.0f; + if(bloomBlurAmount < 0.0f) bloomBlurAmount = 0.0f; + SetBloomShader(bloomIntensity, bloomBlurAmount); + SetBloomText(bloomIntensity, bloomBlurAmount); + } } CalculateFrameTime(clk); @@ -209,12 +238,7 @@ int main(int argc, char *argv[]) // Draw Hud if(drawHud){ - window.draw(currentSpiroText); - window.draw(speedText); - window.draw(fpsText); - window.draw(inphaseText); - window.draw(ampText); - window.draw(controlsText); + DrawHud(window); } window.display(); @@ -286,4 +310,14 @@ void SetTextForCurrentSpiro(){ SetSpeedText(spiromorphs[selectedSpiro-1].spiroOptions.envelope_speed); SetInphaseText(spiromorphs[selectedSpiro-1].spiroOptions.envelopes_in_phase, spiromorphs[selectedSpiro-1].spiroOptions.number_of_elements); SetAmpText(spiromorphs[selectedSpiro-1].spiroOptions.amplitude); +} + +void DrawHud(sf::RenderTarget &window){ + window.draw(currentSpiroText); + window.draw(speedText); + window.draw(fpsText); + window.draw(inphaseText); + window.draw(ampText); + window.draw(controlsText); + window.draw(bloomText); } \ No newline at end of file diff --git a/src/Razshaders.h b/src/Razshaders.h index 29c2247..a09491e 100644 --- a/src/Razshaders.h +++ b/src/Razshaders.h @@ -15,6 +15,7 @@ sf::RenderStates renderstate; bool InitShaders(float WIN_WIDTH, float WIN_HEIGHT); void UpdateShaderParameters(sf::Clock* clk, float posX, float posY); void SetFireShaderResolution(float x, float y); +void SetBloomShader(float _intensity, float _blurAmount); bool InitShaders(float WIN_WIDTH, float WIN_HEIGHT){ // Shaders @@ -53,14 +54,18 @@ bool InitShaders(float WIN_WIDTH, float WIN_HEIGHT){ glowshader.setUniform("resolution", sf::Vector2f(45, 45)); bloomshader.setUniform("resolution", sf::Vector2f(WIN_WIDTH, WIN_HEIGHT)); - //Set Blend renderstate for glow + // Set Blend renderstate for glow renderstate.blendMode = sf::BlendAdd; renderstate.shader = &glowshader; - //Create Texture and Sprite for fireball + // Create Texture and Sprite for fireball firetexture.create(WIN_WIDTH, WIN_HEIGHT); fireball.setTexture(firetexture); + // Set Bloom Parameters + bloomshader.setUniform("intensity", 3.0f); + bloomshader.setUniform("blurSizeAmount", 640.0f); + // Create Rendertexture for shader sprite rendertexture.create(WIN_WIDTH, WIN_HEIGHT); @@ -79,3 +84,8 @@ void UpdateShaderParameters(sf::Clock* clk, float posX, float posY){ void SetFireShaderResolution(float x, float y){ fireshader.setUniform("resolution", sf::Vector2f(x, y)); } + +void SetBloomShader(float _intensity, float _blurAmount){ + bloomshader.setUniform("intensity", _intensity); + bloomshader.setUniform("blurSizeAmount", _blurAmount); +} \ No newline at end of file diff --git a/src/ui.h b/src/ui.h index e501bc5..b41ca50 100644 --- a/src/ui.h +++ b/src/ui.h @@ -2,8 +2,19 @@ #include #include +#define CONTROLS_TEXT " **CONTROLS**\n"\ + "Spawn Spiro- LMB\n"\ + "Select Spiro- Up/Dn\n"\ + "Elements- [ / ]\n"\ + "Speed- PgUp/PgDn\n"\ + "InPhase- Home/End\n"\ + "Amplitude- Ins/Del\n"\ + "Hide Hud- H\n"\ + "Glow Intensity- 7/8\n"\ + "Glow Sharpness- 9/0\n" + sf::Font font; -sf::Text headingText, currentSpiroText, speedText, inphaseText, ampText, fpsText, controlsText; +sf::Text headingText, currentSpiroText, speedText, inphaseText, ampText, fpsText, controlsText, bloomText; void InitTextObjects(sf::RenderWindow* window); void SetSpeedText(float _speed); @@ -11,9 +22,10 @@ void SetFpsText(float _fps); void SetInphaseText(int _inphase, int _numElements); void SetAmpText(float _amp); void SetCurrentSpiroText(float _current); +void SetBloomText(float _bloomintesity, float _bloomBlurAmount); template -//function to convert a non-string variable to a string. +// function to convert a non-string variable to a string. std::string to_string(T value) { std::ostringstream os; @@ -24,7 +36,7 @@ std::string to_string(T value) void InitTextObjects(sf::RenderWindow* window) { - //Set Styles + // Set Styles headingText.setFont(font); headingText.setFillColor(sf::Color::White); headingText.setOutlineColor(sf::Color::White); @@ -39,28 +51,31 @@ void InitTextObjects(sf::RenderWindow* window) currentSpiroText= speedText; controlsText = speedText; controlsText.setCharacterSize(15); + bloomText = controlsText; - //Set Strings + // Set Strings headingText.setString("SPIROMORPH"); speedText.setString("SPEED: "); inphaseText.setString("IN PHASE: "); ampText.setString("AMPLITUDE: "); fpsText.setString("FPS: "); currentSpiroText.setString("SPIRO: "); - controlsText.setString(" **CONTROLS**\nSpawn Spiro- LMB\nSelect Spiro- Up/Dn\nElements- [ / ]\nSpeed- PgUp/PgDn\nInPhase- Home/End\nAmplitude- Ins/Del\nHide Hud- H"); + controlsText.setString(CONTROLS_TEXT); + bloomText.setString("Intensity: "); - //Set positions + // Set positions headingText.setPosition((window->getSize().x / 2) - 170, 30); currentSpiroText.setPosition(10, 30); speedText.setPosition(10, 50); inphaseText.setPosition(10, 70); ampText.setPosition(10, 90); + bloomText.setPosition(window->getSize().x -170, window->getSize().y-90); fpsText.setPosition(window->getSize().x -100, 30); - controlsText.setPosition(10, window->getSize().y-160); + controlsText.setPosition(10, window->getSize().y-200); - //load the font - //note that this path is relative to the workspace + // load the font + // note that this path is relative to the workspace if (!font.loadFromFile("content/HoboStd.otf")) { std::cout << "Failed to load font" << std::endl; @@ -81,4 +96,7 @@ void SetAmpText(float _amp){ } void SetFpsText(float _fps){ fpsText.setString("FPS: " + to_string(_fps)); +} +void SetBloomText(float _bloomintesity, float _bloomBlurAmount){ + bloomText.setString("*SHADERS*\nIntensity: " + to_string(_bloomintesity) + "\nSharpness: " + to_string(_bloomBlurAmount)); } \ No newline at end of file