Arreglar degradado de fondo restaurando campo alpha en SDL_Vertex

- Identificado que SDL_RenderGeometry requiere campo alpha en SDL_Vertex
- Restaurada implementación original con alpha=1.0f en todos los vértices
- Eliminado código debug temporal y workaround con SDL_RenderFillRect
- El degradado de fondo ahora funciona correctamente como en la versión original

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-28 07:58:29 +02:00
parent 6a84234265
commit dab71d41b6
6 changed files with 225 additions and 96 deletions
+67 -2
View File
@@ -37,8 +37,8 @@ bool WindowManager::initialize(const char* title, int width, int height, int zoo
return false;
}
// Crear ventana SDL
if (!createSDLWindow(title, width * zoom, height * zoom)) {
// Crear ventana SDL (sin multiplicar por zoom - trabajamos nativo)
if (!createSDLWindow(title, width, height)) {
return false;
}
@@ -57,11 +57,28 @@ bool WindowManager::initialize(const char* title, int width, int height, int zoo
return false;
}
// Crear textura de renderizado para postprocesado
auto* sdl_renderer = getSDLRenderer();
if (sdl_renderer) {
render_texture_ = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_TARGET, width, height);
if (!render_texture_) {
std::cout << "¡No se pudo crear la textura de renderizado! Error: " << SDL_GetError() << std::endl;
return false;
}
std::cout << "Textura de renderizado creada: " << width << "x" << height << std::endl;
}
std::cout << "Backend de renderizado inicializado: " << renderer_->getBackendName() << std::endl;
return true;
}
void WindowManager::shutdown() {
if (render_texture_) {
SDL_DestroyTexture(render_texture_);
render_texture_ = nullptr;
}
if (renderer_) {
renderer_->shutdown();
renderer_.reset();
@@ -234,4 +251,52 @@ const char* WindowManager::getBackendName() const {
return renderer_ ? renderer_->getBackendName() : "None";
}
SDL_Renderer* WindowManager::getSDLRenderer() const {
// Solo funciona si el backend activo es SDL
if (renderer_ && renderer_->getBackendType() == BackendType::SDL) {
auto* sdl_renderer = static_cast<SDLRenderer*>(renderer_.get());
return sdl_renderer->getSDLRenderer();
}
return nullptr;
}
bool WindowManager::setRenderTarget() {
auto* sdl_renderer = getSDLRenderer();
if (!sdl_renderer || !render_texture_) {
return false;
}
// Cambiar el render target a nuestra textura
if (!SDL_SetRenderTarget(sdl_renderer, render_texture_)) {
std::cout << "¡No se pudo establecer render target! Error: " << SDL_GetError() << std::endl;
return false;
}
// Limpiar la textura de renderizado
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255);
SDL_RenderClear(sdl_renderer);
return true;
}
void WindowManager::presentFrame() {
auto* sdl_renderer = getSDLRenderer();
if (!sdl_renderer || !render_texture_) {
return;
}
// Volver al render target por defecto (la ventana)
SDL_SetRenderTarget(sdl_renderer, nullptr);
// Limpiar la pantalla
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255);
SDL_RenderClear(sdl_renderer);
// Copiar la textura de renderizado a la pantalla 1:1 (sin zoom)
SDL_RenderTexture(sdl_renderer, render_texture_, nullptr, nullptr);
// Presentar el frame final
SDL_RenderPresent(sdl_renderer);
}
} // namespace vibe4