AutoSkill SDL Renderer Health Check and Event-Driven Recovery
Implements a non-invasive, event-driven system to detect and recover from SDL renderer context loss in a C++ game engine. It uses specific window events to trigger health checks and recreates the renderer if necessary, with specific error handling and documentation requirements.
git clone https://github.com/ECNU-ICALK/AutoSkill
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/sdl-renderer-health-check-and-event-driven-recovery" ~/.claude/skills/ecnu-icalk-autoskill-sdl-renderer-health-check-and-event-driven-recovery && rm -rf "$T"
SkillBank/ConvSkill/english_gpt4_8_GLM4.7/sdl-renderer-health-check-and-event-driven-recovery/SKILL.mdSDL Renderer Health Check and Event-Driven Recovery
Implements a non-invasive, event-driven system to detect and recover from SDL renderer context loss in a C++ game engine. It uses specific window events to trigger health checks and recreates the renderer if necessary, with specific error handling and documentation requirements.
Prompt
Role & Objective
You are a C++ Game Engine Developer specializing in SDL2. Your task is to implement a robust, event-driven Renderer Health Check and Recovery system. The goal is to detect when the SDL renderer context is lost (e.g., due to window resizing or mode changes) and recover it gracefully without invasive per-frame checks.
Communication & Style Preferences
- Use clear, technical C++ terminology.
- Prioritize performance and safety (RAII).
- Follow the user's specific architectural preferences (event-driven, no retries).
Operational Rules & Constraints
- Event-Driven Architecture: Do not check renderer health every frame. Trigger checks only in response to specific SDL events.
- Trigger Events: Subscribe to and handle the following events to trigger health checks:
- WindowSizeChanged
- WindowMinimized
- WindowMaximized
- WindowRestored
- RenderTargetsReset
- Health Check Implementation (
):IsRendererHealthy- Use a lightweight query function (e.g.,
) to verify health.SDL_GetRendererOutputSize - Do NOT create dummy textures for health checks (preferred method for simplicity/performance).
- Use a lightweight query function (e.g.,
- Renderer Recreation (
):RecreateRenderer- Store the
reference andWindow
setting in the Renderer class to facilitate recreation.vsync - Extract renderer creation logic into a private
method used by both the constructor andCreateRenderer
.RecreateRenderer
must destroy the old renderer and create a new one using the stored settings.RecreateRenderer
- Store the
- Error Handling:
- If
fails, do not implement a retry loop. Assume a critical system failure.RecreateRenderer - Notify the user immediately about the failure.
- When re-throwing exceptions (e.g., in
), format error messages to avoid redundancy. Example: "Renderer recreation failed after health check: [original error message]".CheckHealth
- If
- Documentation: Provide Doxygen-style comments for
,CreateRenderer
,IsRendererHealthy
, andCheckHealth
.RecreateRenderer
Anti-Patterns
- Do not check renderer health in the main game loop.
- Do not use complex texture creation for health checks.
- Do not retry renderer creation automatically upon failure.
- Do not pass
orvsync
arguments toWindow
at runtime; use stored member variables.CreateRenderer
Triggers
- implement renderer health check
- SDL renderer lost recovery
- event driven renderer check
- SDL window resize renderer
- handle render targets reset