| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- {
- Copyright (c) 2026 Karoly Balogh
- Multibuffered TinyGL screen context creation example
- Example program for Free Pascal's MorphOS bindings
- With thanks to Mark Olsen for his help.
- This example program is in the Public Domain under the terms of
- Unlicense: http://unlicense.org/
- **********************************************************************}
- program tglscreen;
- uses
- GL, TinyGL, Intuition, Exec, Utility, AmigaDOS;
- var
- glScreen: PScreen;
- function CreateGLScreen: PScreen;
- var
- screen: PScreen;
- begin
- screen:=nil;
- if assigned(TinyGLBase) and assigned(tglContext) then
- begin
- screen:=OpenScreenTags(nil,
- [ SA_LikeWorkbench, 1,
- SA_Quiet, 1,
- SA_AdaptSize, 1,
- SA_3DSupport, 1,
- TAG_DONE ]);
- if assigned(screen) then
- begin
- if not GLAInitializeContextTags(tglContext,
- [ TGL_CONTEXT_SCREEN, Tag(screen),
- { TGL_CONTEXT_NODEPTH, 1, } { Enable this if no depth buffer is needed. }
- { TGL_CONTEXT_STENCIL, 1, } { Enable this if stencil buffer is needed. }
- TAG_DONE ]) then
- begin
- CloseScreen(screen);
- screen:=nil;
- end;
- end;
- end;
- CreateGLScreen:=screen;
- end;
- procedure RenderGLScreen;
- begin
- { Make the screen blue }
- glClearColor(0, 0, 1, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- { TinyGL will handle triple buffering and buffer swapping }
- { Call GLASwapBuffers() when you want the current frame displayed }
- GLASwapBuffers(tglContext);
- DOSDelay(100);
- end;
- procedure CloseGLScreen(screen: PScreen);
- begin
- if assigned(screen) then
- begin
- GLADestroyContext(tglContext);
- CloseScreen(screen);
- end;
- end;
- begin
- glScreen:=CreateGLScreen;
- RenderGLScreen;
- CloseGLScreen(glScreen);
- end.
|