1
0

PostProcessing

This commit is contained in:
2022-10-20 15:40:28 +02:00
parent 54d668a694
commit 95d845bce5
5 changed files with 273 additions and 10 deletions

View File

@@ -1,5 +1,6 @@
#include "game.h"
#include "particleGenerator.h"
#include "postprocessor.h"
#include <iostream>
#include <tuple>
@@ -7,6 +8,7 @@ typedef std::tuple<bool, Direction,glm::vec2> Collision;
ParticleGenerator* Particles;
SpriteRenderer* Renderer;
PostProcessor* effects;
// Initial size of the player paddle
const glm::vec2 PLAYER_SIZE (100.0f, 20.0f);
@@ -89,6 +91,7 @@ Game::~Game()
delete player;
delete ball;
delete Particles;
delete effects;
}
Game::Game(unsigned int width, unsigned int height)
@@ -102,13 +105,17 @@ void Game::Init()
// Load shaders
ResourceManager::LoadShader("shader.vs", "shader.fs", nullptr, "sprite");
ResourceManager::LoadShader("particle.vs", "particle.fs", nullptr, "particle");
ResourceManager::LoadShader("postprocessing.vs", "postprocessing.fs", nullptr, "postprocessing");
// configure shaders
glm::mat4 projection = glm::ortho(0.0f, static_cast<float>(this->Width), static_cast<float>(this->Height), 0.0f, -1.0f, 1.0f);
ResourceManager::GetShader("sprite").Use().SetInteger("image", 0);
ResourceManager::GetShader("sprite").SetMatrix4("projection", projection);
ResourceManager::GetShader("particle").Use().SetMatrix4("projection", projection);
ResourceManager::GetShader("particle").Use().SetInteger("sprite", 0);
ResourceManager::GetShader("particle").SetMatrix4("projection", projection);
// set render-specific controls
Renderer = new SpriteRenderer(ResourceManager::GetShader("sprite"));
Particles = new ParticleGenerator(ResourceManager::GetShader("particle"), ResourceManager::GetTexture("particle"), 500);
effects = new PostProcessor(ResourceManager::GetShader("postprocessing"), this->Width, this->Height);
// load textures
ResourceManager::LoadTexture("textures/awesomeface.png", true, "face");
ResourceManager::LoadTexture("textures/background.jpg", false, "background");
@@ -135,10 +142,10 @@ void Game::Init()
ball = new BallObject(ballPos, BALL_RADIUS, INITIAL_BALL_VELOCITY, ResourceManager::GetTexture("face"));
Particles = new ParticleGenerator(ResourceManager::GetShader("particle"), ResourceManager::GetTexture("particle"), 500);
}
float ShakeTime = 0.0f;
void Game::DoCollisions()
{
@@ -153,6 +160,11 @@ void Game::DoCollisions()
{
box.Destroyed = true;
}
else
{
ShakeTime = 0.05f;
effects->Shake = true;
}
// Collision resolution
Direction dir = std::get<1>(collision);
glm::vec2 diff_vector = std::get<2>(collision);
@@ -236,28 +248,43 @@ void Game::Update(float dt)
this->DoCollisions();
Particles->Update(dt, *ball, 2, glm::vec2(ball->Radius /2.0f));
if(ShakeTime > 0.0f)
{
ShakeTime -= dt;
if (ShakeTime <= 0.0f)
effects->Shake = false;
}
if(ball->Position.y >= this->Height)
{
this->ResetLevel();
this->ResetPlayer();
}
}
void Game::Render()
{
if(this->State == GAME_ACTIVE)
{
// draw background
Renderer->DrawSprite(ResourceManager::GetTexture("background"),
glm::vec2(0.0f, 0.0f), glm::vec2(this->Width, this->Height), 0.0f);
effects->BeginRender();
// draw background
Renderer->DrawSprite(ResourceManager::GetTexture("background"),
glm::vec2(0.0f, 0.0f), glm::vec2(this->Width, this->Height), 0.0f);
// draw level
this->Levels[this->Level].Draw(*Renderer);
// draw level
this->Levels[this->Level].Draw(*Renderer);
// draw player
player->Draw(*Renderer);
// draw particles
Particles->Draw();
// draw ball
ball->Draw(*Renderer);
player->Draw(*Renderer);
Particles->Draw();
ball->Draw(*Renderer);
effects->EndRender();
effects->Render(glfwGetTime());
}
}