tglscreen.pas 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. {
  2. Copyright (c) 2026 Karoly Balogh
  3. Multibuffered TinyGL screen context creation example
  4. Example program for Free Pascal's MorphOS bindings
  5. With thanks to Mark Olsen for his help.
  6. This example program is in the Public Domain under the terms of
  7. Unlicense: http://unlicense.org/
  8. **********************************************************************}
  9. program tglscreen;
  10. uses
  11. GL, TinyGL, Intuition, Exec, Utility, AmigaDOS;
  12. var
  13. glScreen: PScreen;
  14. function CreateGLScreen: PScreen;
  15. var
  16. screen: PScreen;
  17. begin
  18. screen:=nil;
  19. if assigned(TinyGLBase) and assigned(tglContext) then
  20. begin
  21. screen:=OpenScreenTags(nil,
  22. [ SA_LikeWorkbench, 1,
  23. SA_Quiet, 1,
  24. SA_AdaptSize, 1,
  25. SA_3DSupport, 1,
  26. TAG_DONE ]);
  27. if assigned(screen) then
  28. begin
  29. if not GLAInitializeContextTags(tglContext,
  30. [ TGL_CONTEXT_SCREEN, Tag(screen),
  31. { TGL_CONTEXT_NODEPTH, 1, } { Enable this if no depth buffer is needed. }
  32. { TGL_CONTEXT_STENCIL, 1, } { Enable this if stencil buffer is needed. }
  33. TAG_DONE ]) then
  34. begin
  35. CloseScreen(screen);
  36. screen:=nil;
  37. end;
  38. end;
  39. end;
  40. CreateGLScreen:=screen;
  41. end;
  42. procedure RenderGLScreen;
  43. begin
  44. { Make the screen blue }
  45. glClearColor(0, 0, 1, 0);
  46. glClear(GL_COLOR_BUFFER_BIT);
  47. { TinyGL will handle triple buffering and buffer swapping }
  48. { Call GLASwapBuffers() when you want the current frame displayed }
  49. GLASwapBuffers(tglContext);
  50. DOSDelay(100);
  51. end;
  52. procedure CloseGLScreen(screen: PScreen);
  53. begin
  54. if assigned(screen) then
  55. begin
  56. GLADestroyContext(tglContext);
  57. CloseScreen(screen);
  58. end;
  59. end;
  60. begin
  61. glScreen:=CreateGLScreen;
  62. RenderGLScreen;
  63. CloseGLScreen(glScreen);
  64. end.