sdl.dpr 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. program sdl_test;
  2. {$APPTYPE gui}
  3. uses
  4. Forms, GLScene, GLSDLContext, GLSDL, GLTeapot, SysUtils
  5. {$IFDEF FPC}, Interfaces{$ENDIF};
  6. type
  7. TMySDLViewer = class (TGLSDLViewer)
  8. procedure EventPollDone(Sender : TObject);
  9. end;
  10. procedure TMySDLViewer.EventPollDone(Sender : TObject);
  11. begin
  12. Render;
  13. end;
  14. var
  15. sdlViewer : TMySDLViewer;
  16. scene : TGLScene;
  17. camera : TGLCamera;
  18. teapot : TGLTeapot;
  19. light : TGLLightSource;
  20. begin
  21. Application.Initialize;
  22. scene:=TGLScene.Create(nil);
  23. teapot:=TGLTeapot(scene.Objects.AddNewChild(TGLTeapot));
  24. light:=TGLLightSource(scene.Objects.AddNewChild(TGLLightSource));
  25. light.Position.SetPoint(10, 15, 20);
  26. camera:=TGLCamera(scene.Objects.AddNewChild(TGLCamera));
  27. camera.TargetObject:=teapot;
  28. camera.SceneScale:=4;
  29. camera.Position.SetPoint(4, 2, 1);
  30. sdlViewer:=TMySDLViewer.Create(nil);
  31. sdlViewer.Camera:=camera;
  32. sdlViewer.OnEventPollDone:=sdlViewer.EventPollDone;
  33. sdlViewer.Render;
  34. while sdlViewer.Active do begin
  35. // Message queue is not operational, but there may still be some messages
  36. Forms.Application.ProcessMessages;
  37. // Relinquish some of that CPU time
  38. SDL_Delay(1);
  39. // Slowly rotate the teapot
  40. teapot.TurnAngle:=4*Frac(Now*24)*3600;
  41. end;
  42. sdlViewer.Free;
  43. scene.Free;
  44. end.