Fix: TextRenderer aplica offset de viewport para modo letterbox (F3)

Corrige el posicionamiento del texto HUD en modo F3 (letterbox) cuando
SDL3 crea barras negras y ajusta el viewport con offset para centrar.

## Problema

En modo letterbox (F3), SDL_LOGICAL_PRESENTATION_LETTERBOX crea:
- Barras negras para mantener aspect ratio
- Viewport con offset (x, y) para centrar la imagen renderizada

Cuando printAbsolute() deshabilitaba temporalmente la presentación
lógica, perdía el offset del viewport y pintaba en (0,0) absoluto,
cayendo en las barras negras.

## Solución

**textrenderer.cpp - printAbsolute():**
- Obtener viewport ANTES de deshabilitar presentación lógica
- Aplicar offset del viewport a coordenadas físicas:
  - `dest_rect.x = physical_x + viewport.x`
  - `dest_rect.y = physical_y + viewport.y`

## Resultado

 HUD se pinta dentro del área visible con offset de letterbox
 Compatible con todos los modos:
   - Ventana normal
   - F3 letterbox (con barras negras)
   - F4 stretch fullscreen

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-10 11:18:16 +02:00
parent d2f170d313
commit 33728857ac

View File

@@ -186,10 +186,16 @@ void TextRenderer::printAbsolute(int physical_x, int physical_y, const char* tex
SDL_SetTextureAlphaModFloat(text_texture, color.a / 255.0f);
}
// Obtener viewport ANTES de deshabilitar presentación lógica
// En modo letterbox (F3), SDL crea un viewport con offset para centrar la imagen
SDL_Rect viewport;
SDL_GetRenderViewport(renderer_, &viewport);
// Preparar rectángulo de destino en coordenadas físicas absolutas
// Aplicar offset del viewport para que el texto se pinte dentro del área visible
SDL_FRect dest_rect;
dest_rect.x = static_cast<float>(physical_x);
dest_rect.y = static_cast<float>(physical_y);
dest_rect.x = static_cast<float>(physical_x + viewport.x);
dest_rect.y = static_cast<float>(physical_y + viewport.y);
dest_rect.w = static_cast<float>(text_surface->w);
dest_rect.h = static_cast<float>(text_surface->h);
@@ -198,7 +204,7 @@ void TextRenderer::printAbsolute(int physical_x, int physical_y, const char* tex
SDL_RendererLogicalPresentation presentation_mode;
SDL_GetRenderLogicalPresentation(renderer_, &logical_w, &logical_h, &presentation_mode);
// Renderizar sin presentación lógica (coordenadas absolutas)
// Renderizar sin presentación lógica (coordenadas absolutas con offset de viewport)
SDL_SetRenderLogicalPresentation(renderer_, 0, 0, SDL_LOGICAL_PRESENTATION_DISABLED);
SDL_RenderTexture(renderer_, text_texture, nullptr, &dest_rect);