fMemViewerD.pas 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. unit fMemViewerD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Imaging.JPeg,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.StdCtrls,
  13. Vcl.ExtCtrls,
  14. GLS.Scene,
  15. GLS.Objects,
  16. GLS.Cadencer,
  17. GLS.Texture,
  18. GLS.SceneViewer,
  19. GLS.Coordinates,
  20. GLS.BaseClasses,
  21. GLS.Context,
  22. GLS.OpenGLAdapter;
  23. type
  24. TFormMemViewer = class(TForm)
  25. Timer1: TTimer;
  26. GLSceneViewer1: TGLSceneViewer;
  27. GLScene1: TGLScene;
  28. GLCamera1: TGLCamera;
  29. DummyCube1: TGLDummyCube;
  30. Cube1: TGLCube;
  31. GLLightSource1: TGLLightSource;
  32. GLMemoryViewer1: TGLMemoryViewer;
  33. GLCadencer1: TGLCadencer;
  34. Panel1: TPanel;
  35. Label1: TLabel;
  36. Label2: TLabel;
  37. RB1to1: TRadioButton;
  38. RB1to2: TRadioButton;
  39. RB1to10: TRadioButton;
  40. CheckBox1: TCheckBox;
  41. LabelFPS: TLabel;
  42. procedure Timer1Timer(Sender: TObject);
  43. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  44. newTime: Double);
  45. procedure CheckBox1Click(Sender: TObject);
  46. procedure GLSceneViewer1AfterRender(Sender: TObject);
  47. procedure FormCreate(Sender: TObject);
  48. procedure RB1to1Click(Sender: TObject);
  49. private
  50. textureFramerateRatio, n: Integer;
  51. public
  52. end;
  53. var
  54. FormMemViewer: TFormMemViewer;
  55. implementation
  56. {$R *.dfm}
  57. procedure TFormMemViewer.FormCreate(Sender: TObject);
  58. begin
  59. textureFramerateRatio := 1;
  60. n := 0;
  61. end;
  62. procedure TFormMemViewer.RB1to1Click(Sender: TObject);
  63. begin
  64. textureFramerateRatio := (Sender as TRadioButton).Tag;
  65. end;
  66. procedure TFormMemViewer.CheckBox1Click(Sender: TObject);
  67. begin
  68. if CheckBox1.Checked then
  69. GLSceneViewer1.VSync := vsmSync
  70. else
  71. GLSceneViewer1.VSync := vsmNoSync;
  72. end;
  73. procedure TFormMemViewer.GLSceneViewer1AfterRender(Sender: TObject);
  74. begin
  75. if not GLSceneViewer1.Buffer.RenderingContext.gl.W_ARB_pbuffer then
  76. begin
  77. ShowMessage('WGL_ARB_pbuffer not supported...'#13#10#13#10
  78. + 'Get newer graphics hardware or try updating your drivers!');
  79. GLSceneViewer1.AfterRender := nil;
  80. Exit;
  81. end;
  82. Inc(n);
  83. try
  84. if n >= textureFramerateRatio then
  85. begin
  86. // render to the viewer
  87. GLMemoryViewer1.Render;
  88. // copy result to the textures
  89. GLMemoryViewer1.CopyToTexture(Cube1.Material.Texture);
  90. n := 0;
  91. end;
  92. except
  93. // pbuffer not supported... catchall for exotic ICDs...
  94. GLSceneViewer1.AfterRender := nil;
  95. raise;
  96. end;
  97. end;
  98. procedure TFormMemViewer.GLCadencer1Progress(Sender: TObject; const deltaTime,
  99. newTime: Double);
  100. begin
  101. DummyCube1.TurnAngle := newTime * 60;
  102. end;
  103. procedure TFormMemViewer.Timer1Timer(Sender: TObject);
  104. begin
  105. LabelFPS.Caption := Format('GLScene Memory Viewer'+' - %.1f FPS', [GLSceneViewer1.FramesPerSecond]);
  106. GLSceneViewer1.ResetPerformanceMonitor;
  107. end;
  108. end.