MODULE showcase_clear ; (* m2SDL showcase, ported from SDL-main examples/renderer/01-clear/clear.c (public domain). Clears the window to a smoothly fading color every frame; the sine-wave trick picks the color from the elapsed time. SDL3 -> SDL2 adaptations - SDL_CreateWindowAndRenderer keeps the SDL2 (w, h, flags, win^, ren^) form; SDL_WINDOW_RESIZABLE reused as-is. - SDL_SetRenderDrawColorFloat does not exist in SDL2, so the 0.0..1.0 floats are scaled to Uint8 0..255 here. - Callback structure (SDL_AppInit/Iterate/...) is flattened into a plain main loop with DrainEvents; auto-quit after 8 s so the showcase also terminates unattended. *) FROM SYSTEM IMPORT CARDINAL8; FROM SDL2 IMPORT SDL_Init, SDL_Quit, SDL_Delay, SDL_GetTicks, SDL_GetTicks64, SDLInitVideo; FROM SDLVideo IMPORT WindowHandle, SDL_DestroyWindow, WindowResizable; FROM SDLRender IMPORT RendererHandle, SDL_CreateWindowAndRenderer, SDL_DestroyRenderer, SDL_SetRenderDrawColor, SDL_RenderClear, SDL_RenderPresent, SDL_RenderSetLogicalSize; FROM SDLUtils IMPORT DrainEvents; FROM MathLib0 IMPORT sin, entier; FROM libc IMPORT printf; CONST FrameMs = 16; MaxMs = 8000; VAR win: WindowHandle; ren: RendererHandle; quit: BOOLEAN; start: LONGCARD; t: REAL; r, g, b: INTEGER; BEGIN IF SDL_Init(SDLInitVideo) # 0 THEN printf("showcase_clear: SDL_Init failed\n"); HALT(1) END; IF SDL_CreateWindowAndRenderer(640, 480, WindowResizable, win, ren) # 0 THEN printf("showcase_clear: CreateWindowAndRenderer failed\n"); SDL_Quit; HALT(1) END; SDL_RenderSetLogicalSize(ren, 640, 480); printf("showcase_clear: fading, close window or wait 8s\n"); quit := FALSE; start := SDL_GetTicks64(); WHILE NOT quit DO DrainEvents(quit); (* seconds since start, as REAL (double). *) t := VAL(REAL, SDL_GetTicks()) / 1000.0; r := entier(127.5 + 127.5 * sin(t)); g := entier(127.5 + 127.5 * sin(t + 2.0944)); b := entier(127.5 + 127.5 * sin(t + 4.1888)); SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, r), VAL(CARDINAL8, g), VAL(CARDINAL8, b), VAL(CARDINAL8, 255)); SDL_RenderClear(ren); SDL_RenderPresent(ren); IF SDL_GetTicks64() - start > MaxMs THEN quit := TRUE END; SDL_Delay(FrameMs) END; SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit; printf("showcase_clear: bye\n") END showcase_clear.