fRenderToTexture.pas 3.4 KB

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