Luxophia

Форк
0
/
LUX.GPU.OpenGL.Atom.Textur.pas 
315 строк · 9.5 Кб
1
unit LUX.GPU.OpenGL.Atom.Textur;
2

3
interface //#################################################################### ■
4

5
uses Winapi.OpenGL, Winapi.OpenGLext,
6
     LUX,
7
     LUX.Data.Grid,
8
     LUX.GPU.OpenGL.Atom,
9
     LUX.GPU.OpenGL.Atom.Buffer.PixBuf,
10
     LUX.GPU.OpenGL.Atom.Imager;
11

12
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
13

14
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
15

16
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
17

18
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLSamplr
19

20
     IGLSamplr = interface( IGLAtomer )
21
     ['{E95328D2-B7D7-4A7C-9367-8A4E554E4F81}']
22
       ///// アクセス
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 );
33
       ///// プロパティ
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;
39
       /////メソッド
40
       procedure Use( const BindI_:GLuint );
41
       procedure Unuse( const BindI_:GLuint );
42
     end;
43

44
     //-------------------------------------------------------------------------
45

46
     TGLSamplr = class( TGLAtomer, IGLSamplr )
47
     private
48
     protected
49
       _WrapU     :GLint;
50
       _WrapV     :GLint;
51
       _WrapW     :GLint;
52
       _MinFilter :GLint;
53
       _MagFilter :GLint;
54
       ///// アクセス
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 );
65
       ///// メソッド
66
       procedure SetParamI( const Name_:GLenum; const Value_:GLint );
67
       procedure SetParamF( const Name_:GLenum; const Value_:GLfloat );
68
     public
69
       constructor Create;
70
       destructor Destroy; override;
71
       ///// プロパティ
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;
77
       ///// メソッド
78
       procedure Use( const BindI_:GLuint );
79
       procedure Unuse( const BindI_:GLuint );
80
     end;
81

82
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>
83

84
     IGLTextur = interface
85
     ['{22F971D6-65FD-4F42-80ED-743253890A8C}']
86
       ///// アクセス
87
       function GetSamplr :TGLSamplr;
88
       ///// プロパティ
89
       property Samplr :TGLSamplr read GetSamplr;
90
       ///// メソッド
91
       procedure Use( const BindI_:GLuint );
92
       procedure Unuse( const BindI_:GLuint );
93
     end;
94

95
     //-------------------------------------------------------------------------
96

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 )
101
     private
102
     protected
103
       _Samplr :TGLSamplr;
104
       _Imager :_TImager_;
105
       ///// アクセス
106
       function GetSamplr :TGLSamplr;
107
       function GetImager :_TImager_;
108
     public
109
       constructor Create; overload;
110
       constructor Create( const Imager_:_TImager_ ); overload;
111
       destructor Destroy; override;
112
       ///// プロパティ
113
       property Samplr :TGLSamplr read GetSamplr;
114
       property Imager :_TImager_ read GetImager;
115
       ///// メソッド
116
       procedure Use( const BindI_:GLuint );
117
       procedure Unuse( const BindI_:GLuint );
118
     end;
119

120
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
121

122
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
123

124
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
125

126
implementation //############################################################### ■
127

128
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
129

130
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
131

132
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLSamplr
133

134
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
135

136
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
137

138
/////////////////////////////////////////////////////////////////////// アクセス
139

140
function TGLSamplr.GetWrapU :GLint;
141
begin
142
     Result := _WrapU;
143
end;
144

145
procedure TGLSamplr.SetWrapU( const WrapU_:GLint );
146
begin
147
     _WrapU := WrapU_;
148

149
     SetParamI( GL_TEXTURE_WRAP_S, _WrapU );
150
end;
151

152
function TGLSamplr.GetWrapV :GLint;
153
begin
154
     Result := _WrapV;
155
end;
156

157
procedure TGLSamplr.SetWrapV( const WrapV_:GLint );
158
begin
159
     _WrapV := WrapV_;
160

161
     SetParamI( GL_TEXTURE_WRAP_T, _WrapV );
162
end;
163

164
function TGLSamplr.GetWrapW :GLint;
165
begin
166
     Result := _WrapW;
167
end;
168

169
procedure TGLSamplr.SetWrapW( const WrapW_:GLint );
170
begin
171
     _WrapW := WrapW_;
172

173
     SetParamI( GL_TEXTURE_WRAP_R, _WrapW );
174
end;
175

176
//------------------------------------------------------------------------------
177

178
function TGLSamplr.GetMinFilter :GLint;
179
begin
180
     Result := _MinFilter;
181
end;
182

183
procedure TGLSamplr.SetMinFilter( const MinFilter_:GLint );
184
begin
185
     _MinFilter := MinFilter_;
186

187
     SetParamI( GL_TEXTURE_MIN_FILTER, _MinFilter );
188
end;
189

190
function TGLSamplr.GetMagFilter :GLint;
191
begin
192
     Result := _MagFilter;
193
end;
194

195
procedure TGLSamplr.SetMagFilter( const MagFilter_:GLint );
196
begin
197
     _MagFilter := MagFilter_;
198

199
     SetParamI( GL_TEXTURE_MAG_FILTER, _MagFilter );
200
end;
201

202
/////////////////////////////////////////////////////////////////////// メソッド
203

204
procedure TGLSamplr.SetParamI( const Name_:GLenum; const Value_:GLint );
205
begin
206
     glSamplerParameteri( _ID, Name_, Value_ );
207
end;
208

209
procedure TGLSamplr.SetParamF( const Name_:GLenum; const Value_:GLfloat );
210
begin
211
     glSamplerParameterf( _ID, Name_, Value_ );
212
end;
213

214
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
215

216
constructor TGLSamplr.Create;
217
begin
218
     inherited;
219

220
     glGenSamplers( 1, @_ID );
221

222
     MinFilter := GL_LINEAR;
223
     MagFilter := GL_LINEAR;
224
end;
225

226
destructor TGLSamplr.Destroy;
227
begin
228
     glDeleteSamplers( 1, @_ID );
229

230
     inherited;
231
end;
232

233
/////////////////////////////////////////////////////////////////////// メソッド
234

235
procedure TGLSamplr.Use( const BindI_:GLuint );
236
begin
237
     glBindSampler( BindI_, _ID );
238
end;
239

240
procedure TGLSamplr.Unuse( const BindI_:GLuint );
241
begin
242
     glBindSampler( BindI_, 0 );
243
end;
244

245
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>
246

247
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
248

249
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
250

251
/////////////////////////////////////////////////////////////////////// アクセス
252

253
function TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.GetSamplr :TGLSamplr;
254
begin
255
     Result := _Samplr;
256
end;
257

258
function TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.GetImager :_TImager_;
259
begin
260
     Result := _Imager;
261
end;
262

263
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
264

265
constructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Create;
266
begin
267
     inherited;
268

269
     _Samplr := TGLSamplr.Create;
270
     _Imager := _TImager_.Create;
271
end;
272

273
constructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Create( const Imager_:_TImager_ );
274
begin
275
     inherited Create;
276

277
     _Samplr := TGLSamplr.Create;
278
     _Imager := Imager_;
279
end;
280

281
destructor TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Destroy;
282
begin
283
     _Samplr.Free;
284
     _Imager.Free;
285

286
     inherited;
287
end;
288

289
/////////////////////////////////////////////////////////////////////// メソッド
290

291
procedure TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Use( const BindI_:GLuint );
292
begin
293
     inherited;
294

295
     _Samplr.Use( BindI_ );
296
     _Imager.Use( BindI_ );
297
end;
298

299
procedure TGLTextur<_TItem_,_TIter_,_TGrid_,_TImager_>.Unuse( const BindI_:GLuint );
300
begin
301
     _Samplr.Unuse( BindI_ );
302
     _Imager.Unuse( BindI_ );
303

304
     inherited;
305
end;
306

307
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
308

309
//############################################################################## □
310

311
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
312

313
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
314

315
end. //######################################################################### ■
316

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.