MODULE renderer_demo ; (* m2SDL3 example: renderer basics - clear, colored rects, present. Uses SDL_CreateWindowAndRenderer (title, w, h, flags) and the float SDLFRect records; colors are Uint8 CARDINAL8 values. Run: ./build/examples/renderer_demo (auto-quits after 3 s). *) FROM SYSTEM IMPORT CARDINAL8; FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDL_Delay, SDL_GetTicks, SDLInitVideo; FROM SDL3Video IMPORT WindowHandle, WindowResizable, SDL_DestroyWindow; FROM SDL3Render IMPORT RendererHandle, SDL_CreateWindowAndRenderer, SDL_DestroyRenderer, SDL_SetRenderDrawColor, SDL_RenderClear, SDL_RenderPresent, SDL_RenderFillRect, SDL_SetRenderLogicalPresentation, LogicalLetterbox; FROM SDL3Rect IMPORT SDLFRect, MakeFRect; FROM SDL3Utils IMPORT DrainEvents; FROM libc IMPORT printf; VAR win: WindowHandle; ren: RendererHandle; r: SDLFRect; quit: BOOLEAN; start: LONGCARD; BEGIN IF NOT SDL_Init(SDLInitVideo) THEN printf("renderer_demo: SDL_Init failed\n"); HALT(1) END; IF NOT SDL_CreateWindowAndRenderer("m2SDL3 renderer demo", 640, 480, VAL(LONGCARD, WindowResizable), win, ren) THEN printf("renderer_demo: CreateWindowAndRenderer failed\n"); SDL_Quit; HALT(1) END; IF NOT SDL_SetRenderLogicalPresentation(ren, 640, 480, LogicalLetterbox) THEN printf("renderer_demo: logical presentation failed\n") END; quit := FALSE; start := SDL_GetTicks(); WHILE NOT quit DO DrainEvents(quit); SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 20), VAL(CARDINAL8, 20), VAL(CARDINAL8, 40), VAL(CARDINAL8, 255)); SDL_RenderClear(ren); r := MakeFRect(VAL(SHORTREAL, 100.0), VAL(SHORTREAL, 100.0), VAL(SHORTREAL, 200.0), VAL(SHORTREAL, 150.0)); SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 0), VAL(CARDINAL8, 200), VAL(CARDINAL8, 0), VAL(CARDINAL8, 255)); SDL_RenderFillRect(ren, r); r := MakeFRect(VAL(SHORTREAL, 350.0), VAL(SHORTREAL, 200.0), VAL(SHORTREAL, 150.0), VAL(SHORTREAL, 100.0)); SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 200), VAL(CARDINAL8, 0), VAL(CARDINAL8, 0), VAL(CARDINAL8, 255)); SDL_RenderFillRect(ren, r); SDL_RenderPresent(ren); IF SDL_GetTicks() - start > 3000 THEN quit := TRUE END; SDL_Delay(16) END; SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit; printf("renderer_demo: bye\n") END renderer_demo.