renderer_demo.mod 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. MODULE renderer_demo ;
  2. (*
  3. m2SDL3 example: renderer basics - clear, colored rects, present.
  4. Uses SDL_CreateWindowAndRenderer (title, w, h, flags) and the
  5. float SDLFRect records; colors are Uint8 CARDINAL8 values.
  6. Run: ./build/examples/renderer_demo (auto-quits after 3 s).
  7. *)
  8. FROM SYSTEM IMPORT CARDINAL8;
  9. FROM SDL3 IMPORT SDL_Init, SDL_Quit, SDL_Delay, SDL_GetTicks,
  10. SDLInitVideo;
  11. FROM SDL3Video IMPORT WindowHandle, WindowResizable, SDL_DestroyWindow;
  12. FROM SDL3Render IMPORT RendererHandle, SDL_CreateWindowAndRenderer,
  13. SDL_DestroyRenderer, SDL_SetRenderDrawColor,
  14. SDL_RenderClear, SDL_RenderPresent, SDL_RenderFillRect,
  15. SDL_SetRenderLogicalPresentation, LogicalLetterbox;
  16. FROM SDL3Rect IMPORT SDLFRect, MakeFRect;
  17. FROM SDL3Utils IMPORT DrainEvents;
  18. FROM libc IMPORT printf;
  19. VAR
  20. win: WindowHandle;
  21. ren: RendererHandle;
  22. r: SDLFRect;
  23. quit: BOOLEAN;
  24. start: LONGCARD;
  25. BEGIN
  26. IF NOT SDL_Init(SDLInitVideo) THEN
  27. printf("renderer_demo: SDL_Init failed\n");
  28. HALT(1)
  29. END;
  30. IF NOT SDL_CreateWindowAndRenderer("m2SDL3 renderer demo",
  31. 640, 480,
  32. VAL(LONGCARD, WindowResizable),
  33. win, ren) THEN
  34. printf("renderer_demo: CreateWindowAndRenderer failed\n");
  35. SDL_Quit;
  36. HALT(1)
  37. END;
  38. IF NOT SDL_SetRenderLogicalPresentation(ren, 640, 480,
  39. LogicalLetterbox) THEN
  40. printf("renderer_demo: logical presentation failed\n")
  41. END;
  42. quit := FALSE;
  43. start := SDL_GetTicks();
  44. WHILE NOT quit DO
  45. DrainEvents(quit);
  46. SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 20), VAL(CARDINAL8, 20),
  47. VAL(CARDINAL8, 40), VAL(CARDINAL8, 255));
  48. SDL_RenderClear(ren);
  49. r := MakeFRect(VAL(SHORTREAL, 100.0), VAL(SHORTREAL, 100.0),
  50. VAL(SHORTREAL, 200.0), VAL(SHORTREAL, 150.0));
  51. SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 0), VAL(CARDINAL8, 200),
  52. VAL(CARDINAL8, 0), VAL(CARDINAL8, 255));
  53. SDL_RenderFillRect(ren, r);
  54. r := MakeFRect(VAL(SHORTREAL, 350.0), VAL(SHORTREAL, 200.0),
  55. VAL(SHORTREAL, 150.0), VAL(SHORTREAL, 100.0));
  56. SDL_SetRenderDrawColor(ren, VAL(CARDINAL8, 200), VAL(CARDINAL8, 0),
  57. VAL(CARDINAL8, 0), VAL(CARDINAL8, 255));
  58. SDL_RenderFillRect(ren, r);
  59. SDL_RenderPresent(ren);
  60. IF SDL_GetTicks() - start > 3000 THEN quit := TRUE END;
  61. SDL_Delay(16)
  62. END;
  63. SDL_DestroyRenderer(ren);
  64. SDL_DestroyWindow(win);
  65. SDL_Quit;
  66. printf("renderer_demo: bye\n")
  67. END renderer_demo.