1
unit LUX.GPU.OpenGL.Atom.Textur;
3
interface //#################################################################### ■
5
uses Winapi.OpenGL, Winapi.OpenGLext,
9
LUX.GPU.OpenGL.Atom.Buffer.PixBuf,
10
LUX.GPU.OpenGL.Atom.Imager;
12
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
14
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
16
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
18
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLSamplr
20
IGLSamplr = interface( IGLAtomer )
21
['{E95328D2-B7D7-4A7C-9367-8A4E554E4F81}']
23
function GetWrapU :GLint;
24
procedure SetWrapU( const WrapU_:GLint );
25
function GetWrapV :GLint;
26
procedure SetWrapV( const WrapV_:GLint );
27
function GetWrapW :GLint;
28
procedure SetWrapW( const WrapW_:GLint );
29
function GetMinFilter :GLint;
30
procedure SetMinFilter( const MinFilter_:GLint );
31
function GetMagFilter :GLint;
32
procedure SetMagFilter( const MagFilter_:GLint );
34
property WrapU :GLint read GetWrapU write SetWrapU ;
35
property WrapV :GLint read GetWrapV write SetWrapV ;
36
property WrapW :GLint read GetWrapW write SetWrapW ;
37
property MinFilter :GLint read GetMinFilter write SetMinFilter;
38
property MagFilter :GLint read GetMagFilter write SetMagFilter;
40
procedure Use( const BindI_:GLuint );
41
procedure Unuse( const BindI_:GLuint );
44
//-------------------------------------------------------------------------
46
TGLSamplr = class( TGLAtomer, IGLSamplr )
55
function GetWrapU :GLint;
56
procedure SetWrapU( const WrapU_:GLint );
57
function GetWrapV :GLint;
58
procedure SetWrapV( const WrapV_:GLint );
59
function GetWrapW :GLint;
60
procedure SetWrapW( const WrapW_:GLint );
61
function GetMinFilter :GLint;
62
procedure SetMinFilter( const MinFilter_:GLint );
63
function GetMagFilter :GLint;
64
procedure SetMagFilter( const MagFilter_:GLint );
66
procedure SetParamI( const Name_:GLenum; const Value_:GLint );
67
procedure SetParamF( const Name_:GLenum; const Value_:GLfloat );
70
destructor Destroy; override;
72
property WrapU :GLint read GetWrapU write SetWrapU ;
73
property WrapV :GLint read GetWrapV write SetWrapV ;
74
property WrapW :GLint read GetWrapW write SetWrapW ;
75
property MinFilter :GLint read GetMinFilter write SetMinFilter;
76
property MagFilter :GLint read GetMagFilter write SetMagFilter;
78
procedure Use( const BindI_:GLuint );
79
procedure Unuse( const BindI_:GLuint );
82
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>
85
['{22F971D6-65FD-4F42-80ED-743253890A8C}']
87
function GetSamplr :TGLSamplr;
89
property Samplr :TGLSamplr read GetSamplr;
91
procedure Use( const BindI_:GLuint );
92
procedure Unuse( const BindI_:GLuint );
95
//-------------------------------------------------------------------------
97
TGLTextur<_TItem_ :record;
98
_TIter_ :TGLPixBufIter<_TItem_>,constructor;
99
_TGrid_ :TGLPixBuf<_TItem_,_TIter_>,constructor;
100
_TImager_:TGLImager<_TItem_,_TIter_,_TGrid_>,constructor> = class( TInterfacedBase, IGLTextur )
106
function GetSamplr :TGLSamplr;
107
function GetImager :_TImager_;
109
constructor Create; overload;
110
constructor Create( const Imager_:_TImager_ ); overload;
111
destructor Destroy; override;
113
property Samplr :TGLSamplr read GetSamplr;
114
property Imager :_TImager_ read GetImager;
116
procedure Use( const BindI_:GLuint );
117
procedure Unuse( const BindI_:GLuint );
120
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
122
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
124
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
126
implementation //############################################################### ■
128
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
130
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
132
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLSamplr
134
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
136
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
138
/////////////////////////////////////////////////////////////////////// アクセス
140
function TGLSamplr.GetWrapU :GLint;
145
procedure TGLSamplr.SetWrapU( const WrapU_:GLint );
149
SetParamI( GL_TEXTURE_WRAP_S, _WrapU );
152
function TGLSamplr.GetWrapV :GLint;
157
procedure TGLSamplr.SetWrapV( const WrapV_:GLint );
161
SetParamI( GL_TEXTURE_WRAP_T, _WrapV );
164
function TGLSamplr.GetWrapW :GLint;
169
procedure TGLSamplr.SetWrapW( const WrapW_:GLint );
173
SetParamI( GL_TEXTURE_WRAP_R, _WrapW );
176
//------------------------------------------------------------------------------
178
function TGLSamplr.GetMinFilter :GLint;
180
Result := _MinFilter;
183
procedure TGLSamplr.SetMinFilter( const MinFilter_:GLint );
185
_MinFilter := MinFilter_;
187
SetParamI( GL_TEXTURE_MIN_FILTER, _MinFilter );
190
function TGLSamplr.GetMagFilter :GLint;
192
Result := _MagFilter;
195
procedure TGLSamplr.SetMagFilter( const MagFilter_:GLint );
197
_MagFilter := MagFilter_;
199
SetParamI( GL_TEXTURE_MAG_FILTER, _MagFilter );
202
/////////////////////////////////////////////////////////////////////// メソッド
204
procedure TGLSamplr.SetParamI( const Name_:GLenum; const Value_:GLint );
206
glSamplerParameteri( _ID, Name_, Value_ );
209
procedure TGLSamplr.SetParamF( const Name_:GLenum; const Value_:GLfloat );
211
glSamplerParameterf( _ID, Name_, Value_ );
214
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
216
constructor TGLSamplr.Create;
220
glGenSamplers( 1, @_ID );
222
MinFilter := GL_LINEAR;
223
MagFilter := GL_LINEAR;
226
destructor TGLSamplr.Destroy;
228
glDeleteSamplers( 1, @_ID );
233
/////////////////////////////////////////////////////////////////////// メソッド
235
procedure TGLSamplr.Use( const BindI_:GLuint );
237
glBindSampler( BindI_, _ID );
240
procedure TGLSamplr.Unuse( const BindI_:GLuint );
242
glBindSampler( BindI_, 0 );
245
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>
247
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
249
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
251
/////////////////////////////////////////////////////////////////////// アクセス
253
function TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.GetSamplr :TGLSamplr;
258
function TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.GetImager :_TImager_;
263
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
265
constructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Create;
269
_Samplr := TGLSamplr.Create;
270
_Imager := _TImager_.Create;
273
constructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Create( const Imager_:_TImager_ );
277
_Samplr := TGLSamplr.Create;
281
destructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Destroy;
289
/////////////////////////////////////////////////////////////////////// メソッド
291
procedure TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Use( const BindI_:GLuint );
295
_Samplr.Use( BindI_ );
296
_Imager.Use( BindI_ );
299
procedure TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Unuse( const BindI_:GLuint );
301
_Samplr.Unuse( BindI_ );
302
_Imager.Unuse( BindI_ );
307
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
309
//############################################################################## □
311
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
313
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
315
end. //######################################################################### ■