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:
@@ -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
|
||||
Reference in New Issue
Block a user