fRenderToTexD.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. unit fRenderToTexD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Variants,
  7. System.Classes,
  8. Vcl.Graphics,
  9. Vcl.Controls,
  10. Vcl.Forms,
  11. Vcl.Dialogs,
  12. Vcl.StdCtrls,
  13. Vcl.ExtCtrls,
  14. GLS.Scene,
  15. GLS.SceneViewer,
  16. GLS.FBORenderer,
  17. GLS.Objects,
  18. GLS.Coordinates,
  19. GLS.SimpleNavigation,
  20. GLS.Material,
  21. GLS.Cadencer,
  22. GLS.BaseClasses,
  23. GLS.RenderContextInfo,
  24. GLS.Context,
  25. GLS.AsyncTimer;
  26. type
  27. TForm1 = class(TForm)
  28. GLScene1: TGLScene;
  29. GLSceneViewer1: TGLSceneViewer;
  30. GLCadencer1: TGLCadencer;
  31. GLMaterialLibrary1: TGLMaterialLibrary;
  32. GLCamera1: TGLCamera;
  33. GLCube1: TGLCube;
  34. GLFBORenderer1: TGLFBORenderer;
  35. GLLightSource1: TGLLightSource;
  36. GLFBORenderer2: TGLFBORenderer;
  37. GLDirectOpenGL1: TGLDirectOpenGL;
  38. Panel1: TPanel;
  39. Label1: TLabel;
  40. CheckBox1: TCheckBox;
  41. Timer1: TTimer;
  42. RadioGroup1: TRadioGroup;
  43. RadioGroup2: TRadioGroup;
  44. GLSimpleNavigation1: TGLSimpleNavigation;
  45. procedure FormCreate(Sender: TObject);
  46. procedure GLDirectOpenGL1Render(Sender: TObject;
  47. var rci: TGLRenderContextInfo);
  48. procedure GLFBORenderer2AfterRender(Sender: TObject;
  49. var rci: TGLRenderContextInfo);
  50. procedure GLFBORenderer1AfterRender(Sender: TObject;
  51. var rci: TGLRenderContextInfo);
  52. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  53. newTime: Double);
  54. procedure CheckBox1Click(Sender: TObject);
  55. procedure RBClick(Sender: TObject);
  56. procedure AsyncTimer1Timer(Sender: TObject);
  57. procedure SBClick(Sender: TObject);
  58. private
  59. Triger: Boolean;
  60. FramerateRatio, N: Integer;
  61. public
  62. end;
  63. var
  64. Form1: TForm1;
  65. implementation
  66. {$R *.dfm}
  67. procedure TForm1.FormCreate(Sender: TObject);
  68. begin
  69. Triger := False;
  70. FramerateRatio := 1;
  71. N := 0;
  72. GLCube1.Material.LibMaterialName := GLFBORenderer2.ColorTextureName;
  73. end;
  74. procedure TForm1.AsyncTimer1Timer(Sender: TObject);
  75. begin
  76. GLSceneViewer1.ResetPerformanceMonitor;
  77. end;
  78. procedure TForm1.CheckBox1Click(Sender: TObject);
  79. begin
  80. if CheckBox1.Checked then
  81. GLSceneViewer1.VSync := vsmSync
  82. else
  83. GLSceneViewer1.VSync := vsmNoSync;
  84. end;
  85. procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  86. newTime: Double);
  87. begin
  88. GLSceneViewer1.Invalidate;
  89. GLCube1.Turn(60*deltaTime);
  90. end;
  91. procedure TForm1.GLDirectOpenGL1Render(Sender: TObject;
  92. var rci: TGLRenderContextInfo);
  93. begin
  94. Inc(N);
  95. if N >= FramerateRatio then
  96. begin
  97. GLFBORenderer2.Active := Triger;
  98. Triger := not Triger;
  99. GLFBORenderer1.Active := Triger;
  100. N := 0;
  101. end;
  102. end;
  103. procedure TForm1.GLFBORenderer1AfterRender(Sender: TObject;
  104. var rci: TGLRenderContextInfo);
  105. begin
  106. GLCube1.Material.LibMaterialName := GLFBORenderer1.ColorTextureName;
  107. GLFBORenderer1.Active := False;
  108. end;
  109. procedure TForm1.GLFBORenderer2AfterRender(Sender: TObject;
  110. var rci: TGLRenderContextInfo);
  111. begin
  112. GLCube1.Material.LibMaterialName := GLFBORenderer2.ColorTextureName;
  113. GLFBORenderer2.Active := False;
  114. end;
  115. procedure TForm1.SBClick(Sender: TObject);
  116. var
  117. Size: Integer;
  118. begin
  119. case RadioGroup1.ItemIndex of
  120. 0: Size := 256;
  121. 1: Size := 512;
  122. 2: Size := 2048;
  123. end;
  124. GLFBORenderer1.Width := Size;
  125. GLFBORenderer1.Height := Size;
  126. GLFBORenderer2.Width := Size;
  127. GLFBORenderer2.Height := Size;
  128. end;
  129. procedure TForm1.RBClick(Sender: TObject);
  130. begin
  131. case RadioGroup2.ItemIndex of
  132. 0: FramerateRatio := 1;
  133. 1: FramerateRatio := 2;
  134. 2: FramerateRatio := 10;
  135. end;
  136. end;
  137. end.