fix Resource: ja es veu el text de càrrega amb els shaders actius
fix Screen: trampa per a que els shaders funcionen de serie en macos i linux
This commit is contained in:
@@ -50,9 +50,6 @@ Screen::Screen()
|
||||
game_canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
|
||||
SDL_SetTextureScaleMode(game_canvas_, SDL_SCALEMODE_NEAREST);
|
||||
|
||||
// Inicializa variables
|
||||
adjustRenderLogicalSize();
|
||||
|
||||
// Crea el objeto de texto
|
||||
createText();
|
||||
|
||||
@@ -62,8 +59,13 @@ Screen::Screen()
|
||||
#endif
|
||||
|
||||
// Inicializa los shaders
|
||||
show();
|
||||
initShaders();
|
||||
|
||||
// Al parecer los shaders en macos y linux no funcionan si no se ha renderizado almenos una vez
|
||||
auto temp = Options::video.shaders;
|
||||
Options::video.shaders = false;
|
||||
renderScreen();
|
||||
Options::video.shaders = temp;
|
||||
}
|
||||
|
||||
// Destructor
|
||||
@@ -275,23 +277,26 @@ void Screen::initShaders()
|
||||
// Calcula el tamaño de la ventana
|
||||
void Screen::adjustWindowSize()
|
||||
{
|
||||
// Establece el nuevo tamaño
|
||||
const int WIDTH = param.game.width * Options::window.size;
|
||||
const int HEIGHT = param.game.height * Options::window.size;
|
||||
// if (!Options::video.fullscreen)
|
||||
{
|
||||
// Establece el nuevo tamaño
|
||||
const int WIDTH = param.game.width * Options::window.size;
|
||||
const int HEIGHT = param.game.height * Options::window.size;
|
||||
|
||||
int old_width, old_height;
|
||||
SDL_GetWindowSize(window_, &old_width, &old_height);
|
||||
int old_width, old_height;
|
||||
SDL_GetWindowSize(window_, &old_width, &old_height);
|
||||
|
||||
int old_pos_x, old_pos_y;
|
||||
SDL_GetWindowPosition(window_, &old_pos_x, &old_pos_y);
|
||||
int old_pos_x, old_pos_y;
|
||||
SDL_GetWindowPosition(window_, &old_pos_x, &old_pos_y);
|
||||
|
||||
const int NEW_POS_X = old_pos_x + (old_width - WIDTH) / 2;
|
||||
const int NEW_POS_Y = old_pos_y + (old_height - HEIGHT) / 2;
|
||||
const int NEW_POS_X = old_pos_x + (old_width - WIDTH) / 2;
|
||||
const int NEW_POS_Y = old_pos_y + (old_height - HEIGHT) / 2;
|
||||
|
||||
SDL_SetWindowPosition(window_, std::max(NEW_POS_X, WINDOWS_DECORATIONS_), std::max(NEW_POS_Y, 0));
|
||||
SDL_SetWindowSize(window_, WIDTH, HEIGHT);
|
||||
SDL_SetWindowPosition(window_, std::max(NEW_POS_X, WINDOWS_DECORATIONS_), std::max(NEW_POS_Y, 0));
|
||||
SDL_SetWindowSize(window_, WIDTH, HEIGHT);
|
||||
|
||||
initShaders();
|
||||
initShaders();
|
||||
}
|
||||
}
|
||||
|
||||
// Renderiza todos los overlays y efectos
|
||||
@@ -360,10 +365,10 @@ bool Screen::initSDLVideo()
|
||||
else
|
||||
{
|
||||
SDL_SetRenderDrawColor(renderer_, 0x00, 0x00, 0x00, 0xFF);
|
||||
SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
|
||||
SDL_SetWindowFullscreen(window_, Options::video.fullscreen);
|
||||
SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, Options::video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
||||
SDL_SetRenderDrawBlendMode(renderer_, SDL_BLENDMODE_BLEND);
|
||||
SDL_SetRenderVSync(renderer_, Options::video.v_sync ? 1 : SDL_RENDERER_VSYNC_DISABLED);
|
||||
SDL_SetWindowFullscreen(window_, Options::video.fullscreen);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -414,11 +419,17 @@ void Screen::getDisplayInfo()
|
||||
}
|
||||
}
|
||||
|
||||
// Alterna entre activar y desactivar los shaders
|
||||
void Screen::toggleShaders()
|
||||
{
|
||||
Options::video.shaders = !Options::video.shaders;
|
||||
}
|
||||
|
||||
// Alterna entre activar y desactivar el escalado entero
|
||||
void Screen::toggleIntegerScale()
|
||||
{
|
||||
Options::video.integer_scale = !Options::video.integer_scale;
|
||||
SDL_SetRenderLogicalPresentation(Screen::get()->getRenderer(), param.game.width, param.game.height, Options::video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
||||
SDL_SetRenderLogicalPresentation(renderer_, param.game.width, param.game.height, Options::video.integer_scale ? SDL_LOGICAL_PRESENTATION_INTEGER_SCALE : SDL_LOGICAL_PRESENTATION_LETTERBOX);
|
||||
}
|
||||
|
||||
// Alterna entre activar y desactivar el V-Sync
|
||||
@@ -455,5 +466,5 @@ void Screen::applySettings()
|
||||
void Screen::createText()
|
||||
{
|
||||
auto texture = std::make_shared<Texture>(getRenderer(), Asset::get()->get("aseprite.png"));
|
||||
text_ = std::make_unique<Text>(texture, Asset::get()->get("aseprite.txt"));
|
||||
text_ = std::make_shared<Text>(texture, Asset::get()->get("aseprite.txt"));
|
||||
}
|
||||
Reference in New Issue
Block a user