Primera implementación funcional de shaders
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
#include "screen.h"
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include "jshader.h"
|
||||
#include <fstream>
|
||||
#include <streambuf>
|
||||
|
||||
// Constructor
|
||||
Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options)
|
||||
@@ -12,8 +15,7 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options
|
||||
this->asset = asset;
|
||||
|
||||
// Inicializa variables
|
||||
windowWidth = 0;
|
||||
windowHeight = 0;
|
||||
SDL_GetRendererOutputSize(renderer, &windowWidth, &windowHeight);
|
||||
gameCanvasWidth = options->video.gameWidth;
|
||||
gameCanvasHeight = options->video.gameHeight;
|
||||
borderWidth = options->video.border.width * 2;
|
||||
@@ -72,18 +74,25 @@ void Screen::blit()
|
||||
// Actualiza y dibuja el efecto de flash en la pantalla
|
||||
doFlash();
|
||||
|
||||
// Vuelve a dejar el renderizador en modo normal
|
||||
SDL_SetRenderTarget(renderer, nullptr);
|
||||
if (options->video.shaders)
|
||||
{
|
||||
shader::render();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vuelve a dejar el renderizador en modo normal
|
||||
SDL_SetRenderTarget(renderer, nullptr);
|
||||
|
||||
// Borra el contenido previo
|
||||
SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF);
|
||||
SDL_RenderClear(renderer);
|
||||
// Borra el contenido previo
|
||||
SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF);
|
||||
SDL_RenderClear(renderer);
|
||||
|
||||
// Copia la textura de juego en el renderizador en la posición adecuada
|
||||
SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest);
|
||||
// Copia la textura de juego en el renderizador en la posición adecuada
|
||||
SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest);
|
||||
|
||||
// Muestra por pantalla el renderizador
|
||||
SDL_RenderPresent(renderer);
|
||||
// Muestra por pantalla el renderizador
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
}
|
||||
|
||||
// Establece el modo de video
|
||||
@@ -170,8 +179,20 @@ void Screen::setVideoMode(int videoMode)
|
||||
}
|
||||
}
|
||||
|
||||
// Reinicia los shaders
|
||||
if (options->video.shaders)
|
||||
{
|
||||
std::ifstream f(asset->get("crtpi.glsl").c_str());
|
||||
std::string source((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
|
||||
|
||||
shader::init(window, gameCanvas, source.c_str());
|
||||
}
|
||||
|
||||
// Modifica el tamaño del renderizador
|
||||
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
|
||||
else
|
||||
{
|
||||
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
|
||||
}
|
||||
|
||||
// Actualiza las opciones
|
||||
options->video.mode = videoMode;
|
||||
@@ -377,13 +398,6 @@ void Screen::doFlash()
|
||||
SDL_SetRenderTarget(renderer, temp);
|
||||
|
||||
// Actualiza la lógica del efecto
|
||||
if (flashEffect.counter < flashEffect.lenght)
|
||||
{
|
||||
flashEffect.counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
flashEffect.enabled = false;
|
||||
}
|
||||
flashEffect.counter < flashEffect.lenght ? flashEffect.counter++ : flashEffect.enabled = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user