Skip to content

Commit

Permalink
Added Control of Shader
Browse files Browse the repository at this point in the history
  • Loading branch information
ReVHeaDRaZ committed Dec 14, 2022
1 parent 07f1ad3 commit fe2ab1f
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 27 deletions.
8 changes: 5 additions & 3 deletions content/razbloom.frag
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
60 changes: 47 additions & 13 deletions src/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ std::vector<Spiromorph> 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);

Expand All @@ -31,20 +34,21 @@ void InitANewSpiromorph(std::vector<Spiromorph> &spiros, int _selectSpiro, struc
void UpdateSpiromorphs(std::vector<Spiromorph> &spiros, int _numberOfSpiros, float Frametime);
void SetSpiromorphSpeed(std::vector<Spiromorph> &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;
Expand All @@ -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<numberOfSpiros; i++)
spiromorphs.push_back(Spiromorph(options));

ReinitAllSpiromorphs(spiromorphs, numberOfSpiros, options);

// Initialize Hud
SetCurrentSpiroText(selectedSpiro);
SetSpeedText(options.envelope_speed);
SetInphaseText(options.envelopes_in_phase, options.number_of_elements);
SetAmpText(options.amplitude);
SetBloomText(bloomIntensity, bloomBlurAmount);

// Window Loop-------------------------------------------------
while (window.isOpen())
{
sf::Event event;

//handle event inputs
// handle event inputs
while (window.pollEvent(event))
{
// Close window if x button is pressed
Expand Down Expand Up @@ -179,6 +184,30 @@ int main(int argc, char *argv[])
selectedSpiro = numberOfSpiros;
SetTextForCurrentSpiro();
}
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Num8){
bloomIntensity += 0.5f;
if(bloomIntensity > 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);
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}
14 changes: 12 additions & 2 deletions src/Razshaders.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);

Expand All @@ -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);
}
36 changes: 27 additions & 9 deletions src/ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,30 @@
#include <sstream>
#include <string>

#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);
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 <typename T>
//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;
Expand All @@ -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);
Expand All @@ -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;
Expand All @@ -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));
}

0 comments on commit fe2ab1f

Please sign in to comment.