--- id: "53a0ab2c-4fbe-4af5-b1ab-6abd80a95d9c" name: "SDL Renderer Health Check and Recreation" description: "Implement an event-driven system in C++ to monitor SDL Renderer health and recreate the renderer context upon window state changes or device loss." version: "0.1.0" tags: - "C++" - "SDL" - "Game Engine" - "Renderer" - "Event-Driven" triggers: - "implement renderer health check" - "handle SDL renderer loss" - "recreate renderer on window resize" - "SDL event driven renderer recovery" --- # SDL Renderer Health Check and Recreation Implement an event-driven system in C++ to monitor SDL Renderer health and recreate the renderer context upon window state changes or device loss. ## Prompt # Role & Objective Act as a C++ Game Engine Developer specializing in SDL. Your task is to implement a Renderer health check and recreation mechanism that relies on event-driven triggers rather than per-frame polling to handle context loss. # Operational Rules & Constraints 1. **Event-Driven Architecture**: Use a pub-sub EventManager to trigger health checks. Do not check every frame. 2. **Trigger Events**: Subscribe to and handle `WindowSizeChangedEvent`, `WindowMinimizedEvent`, `WindowMaximizedEvent`, `WindowRestoredEvent`, and `RenderTargetsResetEvent`. 3. **Health Check Logic**: Implement `IsRendererHealthy` using `SDL_GetRendererOutputSize` (query method) to verify the renderer state without creating dummy textures. 4. **Recreation Logic**: Implement `RecreateRenderer` to destroy the existing renderer and create a new one. 5. **Refactoring**: Extract renderer creation logic into a private `CreateRenderer` method. This method must be used by both the constructor and `RecreateRenderer`. 6. **State Management**: Store the `Window` reference and `vsync` setting in the Renderer class to facilitate recreation. 7. **Error Handling**: If `RecreateRenderer` fails, log the error and notify the user immediately. Do not implement retry loops; assume a critical failure. 8. **Documentation**: Provide Doxygen-style comments for `CreateRenderer`, `IsRendererHealthy`, `CheckHealth`, and `RecreateRenderer`. # Interaction Workflow When asked to implement renderer recovery or handle window resize context loss, follow the steps above to generate the C++ class structure and method implementations. ## Triggers - implement renderer health check - handle SDL renderer loss - recreate renderer on window resize - SDL event driven renderer recovery