fTexCombine.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. unit fTexCombine;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.StdCtrls,
  12. Vcl.Imaging.Jpeg,
  13. Vcl.ExtCtrls,
  14. GLS.Scene,
  15. GLS.Texture,
  16. GLS.Objects,
  17. GLS.SceneViewer,
  18. GLSL.TextureShaders,
  19. GLS.HUDObjects,
  20. GLS.Material,
  21. GLS.Coordinates,
  22. GLS.BaseClasses,
  23. GLS.Utils;
  24. type
  25. TFormTexCombine = class(TForm)
  26. GLScene: TGLScene;
  27. SceneViewer: TGLSceneViewer;
  28. Image1: TImage;
  29. Image2: TImage;
  30. BUApply: TButton;
  31. GLCamera: TGLCamera;
  32. GLDummyCube: TGLDummyCube;
  33. GLMaterialLibrary: TGLMaterialLibrary;
  34. Image3: TImage;
  35. Label1: TLabel;
  36. Image4: TImage;
  37. GLTexCombineShader: TGLTexCombineShader;
  38. GLHUDSprite: TGLHUDSprite;
  39. PATex1: TPanel;
  40. PATex2: TPanel;
  41. PATex3: TPanel;
  42. CBTex0: TCheckBox;
  43. CBTex1: TCheckBox;
  44. CBTex2: TCheckBox;
  45. CBTex3: TCheckBox;
  46. Label3: TLabel;
  47. Label4: TLabel;
  48. Panel1: TPanel;
  49. MECombiner: TMemo;
  50. Label2: TLabel;
  51. ColorDialog: TColorDialog;
  52. PAPrimary: TPanel;
  53. procedure FormCreate(Sender: TObject);
  54. procedure BUApplyClick(Sender: TObject);
  55. procedure SceneViewerPostRender(Sender: TObject);
  56. procedure CBTex0Click(Sender: TObject);
  57. procedure PAPrimaryClick(Sender: TObject);
  58. private
  59. public
  60. end;
  61. var
  62. FormTexCombine: TFormTexCombine;
  63. implementation
  64. {$R *.dfm}
  65. procedure TFormTexCombine.FormCreate(Sender: TObject);
  66. begin
  67. // load the textures
  68. SetGLSceneMediaDir();
  69. Image1.Picture.LoadFromFile('beigemarble.jpg');
  70. GLMaterialLibrary.Materials.Items[0].Material.Texture.Image.Assign(Image1.Picture);
  71. Image2.Picture.LoadFromFile('flare1.bmp');
  72. GLMaterialLibrary.Materials.Items[1].Material.Texture.Image.Assign(Image2.Picture);
  73. Image3.Picture.LoadFromFile('clover.jpg');
  74. GLMaterialLibrary.Materials.Items[2].Material.Texture.Image.Assign(Image3.Picture);
  75. Image4.Picture.LoadFromFile('cubemaps/cm_front.jpg');
  76. GLMaterialLibrary.Materials.Items[3].Material.Texture.Image.Assign(Image4.Picture);
  77. BUApplyClick(Sender);
  78. Application.HintHidePause := 30000;
  79. end;
  80. procedure TFormTexCombine.BUApplyClick(Sender: TObject);
  81. begin
  82. // Apply new combiner code
  83. // Depending on shader and hardware, errors may be triggered during render
  84. GLTexCombineShader.Combiners.Clear;
  85. GLTexCombineShader.Combiners.AddStrings(MECombiner.Lines);
  86. end;
  87. procedure TFormTexCombine.SceneViewerPostRender(Sender: TObject);
  88. var
  89. n: Integer;
  90. begin
  91. // disable whatever texture units are not supported by the local hardware
  92. n := SceneViewer.Buffer.LimitOf[limNbTextureUnits];
  93. PATex1.Visible := (n < 2);
  94. CBTex1.Enabled := (n >= 2);
  95. PATex2.Visible := (n < 3);
  96. CBTex2.Enabled := (n >= 3);
  97. PATex3.Visible := (n < 4);
  98. CBTex3.Enabled := (n >= 4);
  99. CBTex1.Checked := CBTex1.Checked and CBTex1.Enabled;
  100. end;
  101. procedure TFormTexCombine.CBTex0Click(Sender: TObject);
  102. var
  103. libMat: TGLLibMaterial;
  104. begin
  105. // This event is used for all 4 checkboxes of the 4 texture units
  106. libMat := GLMaterialLibrary.Materials.GetLibMaterialByName
  107. ((Sender as TCheckBox).Caption);
  108. if Assigned(libMat) then
  109. libMat.Material.Texture.Enabled := TCheckBox(Sender).Checked;
  110. end;
  111. procedure TFormTexCombine.PAPrimaryClick(Sender: TObject);
  112. begin
  113. // Allow choosing the primary color
  114. ColorDialog.Color := PAPrimary.Color;
  115. if ColorDialog.Execute then
  116. begin
  117. PAPrimary.Color := ColorDialog.Color;
  118. GLMaterialLibrary.Materials[0].Material.FrontProperties.Diffuse.AsWinColor := ColorDialog.Color;
  119. SceneViewer.Invalidate;
  120. end;
  121. end;
  122. end.