123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- unit fTexCombine;
- interface
- uses
- Winapi.OpenGL,
- System.SysUtils,
- System.Classes,
- Vcl.Graphics,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.Dialogs,
- Vcl.StdCtrls,
- Vcl.Imaging.Jpeg,
- Vcl.ExtCtrls,
- GLS.Scene,
- GLS.Texture,
- GLS.Objects,
- GLS.SceneViewer,
- GLSL.TextureShaders,
- GLS.HUDObjects,
- GLS.Material,
- GLS.Coordinates,
- GLS.BaseClasses,
- GLS.Utils;
- type
- TFormTexCombine = class(TForm)
- GLScene: TGLScene;
- SceneViewer: TGLSceneViewer;
- Image1: TImage;
- Image2: TImage;
- BUApply: TButton;
- GLCamera: TGLCamera;
- GLDummyCube: TGLDummyCube;
- GLMaterialLibrary: TGLMaterialLibrary;
- Image3: TImage;
- Label1: TLabel;
- Image4: TImage;
- GLTexCombineShader: TGLTexCombineShader;
- GLHUDSprite: TGLHUDSprite;
- PATex1: TPanel;
- PATex2: TPanel;
- PATex3: TPanel;
- CBTex0: TCheckBox;
- CBTex1: TCheckBox;
- CBTex2: TCheckBox;
- CBTex3: TCheckBox;
- Label3: TLabel;
- Label4: TLabel;
- Panel1: TPanel;
- MECombiner: TMemo;
- Label2: TLabel;
- ColorDialog: TColorDialog;
- PAPrimary: TPanel;
- procedure FormCreate(Sender: TObject);
- procedure BUApplyClick(Sender: TObject);
- procedure SceneViewerPostRender(Sender: TObject);
- procedure CBTex0Click(Sender: TObject);
- procedure PAPrimaryClick(Sender: TObject);
- private
- public
- end;
- var
- FormTexCombine: TFormTexCombine;
- implementation
- {$R *.dfm}
- procedure TFormTexCombine.FormCreate(Sender: TObject);
- begin
- // load the textures
- SetGLSceneMediaDir();
- Image1.Picture.LoadFromFile('beigemarble.jpg');
- GLMaterialLibrary.Materials.Items[0].Material.Texture.Image.Assign(Image1.Picture);
- Image2.Picture.LoadFromFile('flare1.bmp');
- GLMaterialLibrary.Materials.Items[1].Material.Texture.Image.Assign(Image2.Picture);
- Image3.Picture.LoadFromFile('clover.jpg');
- GLMaterialLibrary.Materials.Items[2].Material.Texture.Image.Assign(Image3.Picture);
- Image4.Picture.LoadFromFile('cubemaps/cm_front.jpg');
- GLMaterialLibrary.Materials.Items[3].Material.Texture.Image.Assign(Image4.Picture);
- BUApplyClick(Sender);
- Application.HintHidePause := 30000;
- end;
- procedure TFormTexCombine.BUApplyClick(Sender: TObject);
- begin
- // Apply new combiner code
- // Depending on shader and hardware, errors may be triggered during render
- GLTexCombineShader.Combiners.Clear;
- GLTexCombineShader.Combiners.AddStrings(MECombiner.Lines);
- end;
- procedure TFormTexCombine.SceneViewerPostRender(Sender: TObject);
- var
- n: Integer;
- begin
- // disable whatever texture units are not supported by the local hardware
- n := SceneViewer.Buffer.LimitOf[limNbTextureUnits];
- PATex1.Visible := (n < 2);
- CBTex1.Enabled := (n >= 2);
- PATex2.Visible := (n < 3);
- CBTex2.Enabled := (n >= 3);
- PATex3.Visible := (n < 4);
- CBTex3.Enabled := (n >= 4);
- CBTex1.Checked := CBTex1.Checked and CBTex1.Enabled;
- end;
- procedure TFormTexCombine.CBTex0Click(Sender: TObject);
- var
- libMat: TGLLibMaterial;
- begin
- // This event is used for all 4 checkboxes of the 4 texture units
- libMat := GLMaterialLibrary.Materials.GetLibMaterialByName
- ((Sender as TCheckBox).Caption);
- if Assigned(libMat) then
- libMat.Material.Texture.Enabled := TCheckBox(Sender).Checked;
- end;
- procedure TFormTexCombine.PAPrimaryClick(Sender: TObject);
- begin
- // Allow choosing the primary color
- ColorDialog.Color := PAPrimary.Color;
- if ColorDialog.Execute then
- begin
- PAPrimary.Color := ColorDialog.Color;
- GLMaterialLibrary.Materials[0].Material.FrontProperties.Diffuse.AsWinColor := ColorDialog.Color;
- SceneViewer.Invalidate;
- end;
- end;
- end.
|