fTexCombineD.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. unit fTexCombineD;
  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. GLScene.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. PathToData: TFileName;
  60. public
  61. end;
  62. var
  63. FormTexCombine: TFormTexCombine;
  64. implementation
  65. {$R *.dfm}
  66. procedure TFormTexCombine.FormCreate(Sender: TObject);
  67. begin
  68. // load the textures
  69. PathToData := GetCurrentAssetPath();
  70. SetCurrentDir(PathToData + '\texture');
  71. Image1.Picture.LoadFromFile('beigemarble.jpg');
  72. GLMaterialLibrary.Materials.Items[0].Material.Texture.Image.Assign(Image1.Picture);
  73. Image2.Picture.LoadFromFile('flare1.bmp');
  74. GLMaterialLibrary.Materials.Items[1].Material.Texture.Image.Assign(Image2.Picture);
  75. Image3.Picture.LoadFromFile('clover.jpg');
  76. GLMaterialLibrary.Materials.Items[2].Material.Texture.Image.Assign(Image3.Picture);
  77. Image4.Picture.LoadFromFile('concrete.jpg');
  78. GLMaterialLibrary.Materials.Items[3].Material.Texture.Image.Assign(Image4.Picture);
  79. BUApplyClick(Sender);
  80. Application.HintHidePause := 30000;
  81. end;
  82. procedure TFormTexCombine.BUApplyClick(Sender: TObject);
  83. begin
  84. // Apply new combiner code
  85. // Depending on shader and hardware, errors may be triggered during render
  86. GLTexCombineShader.Combiners.Clear();
  87. GLTexCombineShader.Combiners.AddStrings(MECombiner.Lines);
  88. end;
  89. procedure TFormTexCombine.SceneViewerPostRender(Sender: TObject);
  90. begin
  91. // disable whatever texture units are not supported by the local hardware
  92. var n: integer := 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.