123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- //
- // The multimedia graphics platform GLScene https://github.com/glscene
- //
- unit FRTextureEdit;
- (* Basic editing frame for TGLTexture *)
- // TODO : Replace STImageClass with a dropdown (polymorphism)
- interface
- {$I GLScene.inc}
- uses
- System.Classes,
- System.SysUtils,
- System.TypInfo,
- VCL.Forms,
- VCL.StdCtrls,
- VCL.Buttons,
- VCL.Controls,
- GLS.Graphics,
- GLS.TextureFormat,
- GLS.Texture,
- GLS.State,
- GLS.TextureImageEditors;
- type
- TRTextureEdit = class(TFrame)
- Label2: TLabel;
- SBEditImage: TSpeedButton;
- CBMagFilter: TComboBox;
- Label3: TLabel;
- Label4: TLabel;
- CBMinFilter: TComboBox;
- CBTextureMode: TComboBox;
- Label1: TLabel;
- Label5: TLabel;
- CBTextureWrap: TComboBox;
- CBDisabled: TCheckBox;
- CBImageClass: TComboBox;
- CBImageAlpha: TComboBox;
- Label6: TLabel;
- CBFilteringQuality: TComboBox;
- Label7: TLabel;
- procedure CBMagFilterChange(Sender: TObject);
- procedure CBMinFilterChange(Sender: TObject);
- procedure CBTextureModeChange(Sender: TObject);
- procedure CBTextureWrapChange(Sender: TObject);
- procedure CBDisabledClick(Sender: TObject);
- procedure SBEditImageClick(Sender: TObject);
- procedure CBImageClassChange(Sender: TObject);
- procedure CBImageAlphaChange(Sender: TObject);
- procedure CBFilteringQualityChange(Sender: TObject);
- private
- FTexture: TGLTexture;
- FOnChange: TNotifyEvent;
- Changeing: Boolean;
- protected
- procedure SetTexture(const val: TGLTexture);
- procedure DoOnChange; virtual;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- property Texture: TGLTexture read FTexture write SetTexture;
- property OnChange: TNotifyEvent read FOnChange write FOnChange;
- end;
- //-------------------------------------------------------------
- implementation
- //-------------------------------------------------------------
- {$R *.dfm}
- constructor TRTextureEdit.Create(AOwner: TComponent);
- var
- I: Integer;
- begin
- inherited;
- FTexture := TGLTexture.Create(Self);
- SetTexture(FTexture);
- SetGLTextureImageClassesToStrings(CBImageClass.Items);
- for I := 0 to Integer( High(TGLTextureImageAlpha)) do
- CBImageAlpha.Items.Add(GetEnumName(TypeInfo(TGLTextureImageAlpha), I));
- for I := 0 to Integer( High(TGLMagFilter)) do
- CBMagFilter.Items.Add(GetEnumName(TypeInfo(TGLMagFilter), I));
- for I := 0 to Integer( High(TGLMinFilter)) do
- CBMinFilter.Items.Add(GetEnumName(TypeInfo(TGLMinFilter), I));
- for I := 0 to Integer( High(TGLTextureFilteringQuality)) do
- CBFilteringQuality.Items.Add
- (GetEnumName(TypeInfo(TGLTextureFilteringQuality), I));
- for I := 0 to Integer( High(TGLTextureMode)) do
- CBTextureMode.Items.Add(GetEnumName(TypeInfo(TGLTextureMode), I));
- for I := 0 to Integer( High(TGLTextureWrap)) do
- CBTextureWrap.Items.Add(GetEnumName(TypeInfo(TGLTextureWrap), I));
- end;
- destructor TRTextureEdit.Destroy;
- begin
- FTexture.Free;
- inherited;
- end;
- procedure TRTextureEdit.SetTexture(const val: TGLTexture);
- begin
- FTexture.Assign(val);
- changeing := True;
- try
- with CBImageClass do
- ItemIndex := Items.IndexOfObject(Pointer(FTexture.Image.ClassType));
- CBImageAlpha.ItemIndex := Integer(FTexture.ImageAlpha);
- CBMagFilter.ItemIndex := Integer(FTexture.MagFilter);
- CBMinFilter.ItemIndex := Integer(FTexture.MinFilter);
- CBFilteringQuality.ItemIndex := Integer(FTexture.FilteringQuality);
- CBTextureMode.ItemIndex := Integer(FTexture.TextureMode);
- CBTextureWrap.ItemIndex := Integer(FTexture.TextureWrap);
- CBDisabled.Checked := FTexture.Disabled;
- finally
- Changeing := False;
- DoOnChange;
- end;
- end;
- procedure TRTextureEdit.DoOnChange;
- begin
- if (not changeing) and Assigned(FOnChange) then
- OnChange(Self);
- end;
- procedure TRTextureEdit.CBImageClassChange(Sender: TObject);
- var
- tic: TGLTextureImageClass;
- ti: TGLTextureImage;
- begin
- if not changeing then
- begin
- with CBImageClass do
- tic := TGLTextureImageClass(Items.Objects[ItemIndex]);
- if FTexture.Image.ClassType <> tic then
- begin
- ti := TGLTextureImageClass(tic).Create(FTexture);
- FTexture.Image := ti;
- ti.Free;
- end;
- DoOnChange;
- end;
- end;
- procedure TRTextureEdit.CBImageAlphaChange(Sender: TObject);
- begin
- FTexture.ImageAlpha := TGLTextureImageAlpha(CBImageAlpha.ItemIndex);
- DoOnChange;
- end;
- // CBMagFilterChange
- //
- procedure TRTextureEdit.CBMagFilterChange(Sender: TObject);
- begin
- FTexture.MagFilter := TGLMagFilter(CBMagFilter.ItemIndex);
- DoOnChange;
- end;
- procedure TRTextureEdit.CBMinFilterChange(Sender: TObject);
- begin
- FTexture.MinFilter := TGLMinFilter(CBMinFilter.ItemIndex);
- DoOnChange;
- end;
- procedure TRTextureEdit.CBTextureModeChange(Sender: TObject);
- begin
- FTexture.TextureMode := TGLTextureMode(CBTextureMode.ItemIndex);
- DoOnChange;
- end;
- procedure TRTextureEdit.CBTextureWrapChange(Sender: TObject);
- begin
- FTexture.TextureWrap := TGLTextureWrap(CBTextureWrap.ItemIndex);
- DoOnChange;
- end;
- procedure TRTextureEdit.CBDisabledClick(Sender: TObject);
- begin
- FTexture.Disabled := CBDisabled.Checked;
- DoOnChange;
- end;
- procedure TRTextureEdit.SBEditImageClick(Sender: TObject);
- begin
- EditGLTextureImage(FTexture.Image);
- DoOnChange;
- end;
- procedure TRTextureEdit.CBFilteringQualityChange(Sender: TObject);
- begin
- FTexture.FilteringQuality := TGLTextureFilteringQuality(CBFilteringQuality.ItemIndex);
- DoOnChange;
- end;
- end.
|