Luxophia

Форк
0
/
LUX.GPU.OpenGL.Atom.Porter.pas 
567 строк · 15.9 Кб
1
unit LUX.GPU.OpenGL.Atom.Porter;
2

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

5
uses System.Generics.Collections,
6
     Winapi.OpenGL, Winapi.OpenGLext,
7
     LUX,
8
     LUX.GPU.OpenGL.Atom;
9

10
type //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【型】
11

12
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
13

14
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortF
15

16
     TGLPortF = record
17
     private
18
     public
19
       Name :String;
20
     end;
21

22
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortV
23

24
     TGLPortV = record
25
     private
26
     public
27
       Name :String;
28
       EleN :GLint;
29
       EleT :GLenum;
30
       Offs :GLuint;
31
       /////
32
       constructor Create( const Name_:String;
33
                           const EleN_:GLint;
34
                           const EleT_:GLenum;
35
                           const Offs_:GLuint = 0 );
36
     end;
37

38
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortU
39

40
     TGLPortU = record
41
     private
42
     public
43
       Name :String;
44
       /////
45
       constructor Create( const Name_:String );
46
     end;
47

48
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortT
49

50
     TGLPortT = record
51
     private
52
     public
53
       Name :String;
54
       /////
55
       constructor Create( const Name_:String );
56
     end;
57

58
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortS
59

60
     TGLPortS = record
61
     private
62
     public
63
       Name :String;
64
       /////
65
       constructor Create( const Name_:String );
66
     end;
67

68
     //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
69

70
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorter<_TPort_>
71

72
     TGLPorter<_TPort_:record> = class( TDictionary<GLuint,_TPort_> )
73
     private
74
     protected
75
       _Progra :IGLProgra;
76
       ///// メソッド
77
       procedure AddPort( const BinP_:GLuint; const Port_:_TPort_ ); virtual; abstract;
78
       procedure DelPort( const BinP_:GLuint; const Port_:_TPort_ ); virtual; abstract;
79
     public
80
       constructor Create( const Progra_:IGLProgra );
81
       ///// プロパティ
82
       property Progra :IGLProgra read _Progra;
83
       ///// メソッド
84
       procedure Add( const BindI_:GLuint; const Port_:_TPort_ );
85
       procedure Remove( const BindI_:GLuint );
86
       procedure Del( const BindI_:GLuint );
87
       procedure AddPorts;
88
       procedure DelPorts;
89
       procedure Use; virtual;
90
       procedure Unuse; virtual;
91
     end;
92

93
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterF
94

95
     TGLPorterF = class( TGLPorter<TGLPortF> )
96
     private
97
     protected
98
       ///// メソッド
99
       procedure AddPort( const BinP_:GLuint; const Port_:TGLPortF ); override;
100
       procedure DelPort( const BinP_:GLuint; const Port_:TGLPortF ); override;
101
     public
102
       ///// メソッド
103
       procedure Add( const BinP_:GLuint; const Name_:String );
104
     end;
105

106
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterV
107

108
     TGLPorterV = class( TGLPorter<TGLPortV> )
109
     private
110
     protected
111
       _Varray :TGLVarray;
112
       ///// メソッド
113
       procedure AddPort( const BinP_:GLuint; const Port_:TGLPortV ); override;
114
       procedure DelPort( const BinP_:GLuint; const Port_:TGLPortV ); override;
115
     public
116
       constructor Create( const Progra_:IGLProgra );
117
       destructor Destroy; override;
118
       ///// メソッド
119
       procedure Add( const BinP_:GLuint; const Name_:String;
120
                                          const EleN_:GLint;
121
                                          const EleT_:GLenum;
122
                                          const Offs_:GLuint = 0 );
123
       procedure Use; override;
124
       procedure Unuse; override;
125
     end;
126

127
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterU
128

129
     TGLPorterU = class( TGLPorter<TGLPortU> )
130
     private
131
     protected
132
       ///// メソッド
133
       procedure AddPort( const BinP_:GLuint; const Port_:TGLPortU ); override;
134
       procedure DelPort( const BinP_:GLuint; const Port_:TGLPortU ); override;
135
     public
136
       ///// メソッド
137
       procedure Add( const BinP_:GLuint; const Name_:String );
138
     end;
139

140
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterT
141

142
     TGLPorterT = class( TGLPorter<TGLPortT> )
143
     private
144
     protected
145
       ///// メソッド
146
       procedure AddPort( const BinP_:GLuint; const Port_:TGLPortT ); override;
147
       procedure DelPort( const BinP_:GLuint; const Port_:TGLPortT ); override;
148
     public
149
       ///// メソッド
150
       procedure Add( const BinP_:GLuint; const Name_:String );
151
     end;
152

153
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterS
154

155
     TGLPorterS = class( TGLPorter<TGLPortS> )
156
     private
157
     protected
158
       ///// メソッド
159
       procedure AddPort( const BinP_:GLuint; const Port_:TGLPortS ); override;
160
       procedure DelPort( const BinP_:GLuint; const Port_:TGLPortS ); override;
161
     public
162
       ///// メソッド
163
       procedure Add( const BinP_:GLuint; const Name_:String );
164
     end;
165

166
//const //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【定数】
167

168
//var //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【変数】
169

170
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
171

172
implementation //############################################################### ■
173

174
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【レコード】
175

176
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortF
177

178
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
179

180
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
181

182
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortV
183

184
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
185

186
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
187

188
constructor TGLPortV.Create( const Name_:String;
189
                             const EleN_:GLint;
190
                             const EleT_:GLenum;
191
                             const Offs_:GLuint );
192
begin
193
     Name := Name_;
194
     EleN := EleN_;
195
     EleT := EleT_;
196
     Offs := Offs_;
197
end;
198

199
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortU
200

201
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
202

203
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
204

205
constructor TGLPortU.Create( const Name_:String );
206
begin
207
     Name := Name_;
208
end;
209

210
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortT
211

212
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
213

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

216
constructor TGLPortT.Create( const Name_:String );
217
begin
218
     Name := Name_;
219
end;
220

221
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPortS
222

223
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
224

225
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
226

227
constructor TGLPortS.Create( const Name_:String );
228
begin
229
     Name := Name_;
230
end;
231

232
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【クラス】
233

234
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorter<_TPort_>
235

236
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
237

238
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
239

240
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
241

242
constructor TGLPorter<_TPort_>.Create( const Progra_:IGLProgra );
243
begin
244
     inherited Create;
245

246
     _Progra := Progra_;
247
end;
248

249
/////////////////////////////////////////////////////////////////////// メソッド
250

251
procedure TGLPorter<_TPort_>.Add( const BindI_:GLuint; const Port_:_TPort_ );
252
begin
253
     inherited AddOrSetValue( BindI_, Port_ );
254

255
     AddPort( BindI_, Port_ );
256
end;
257

258
procedure TGLPorter<_TPort_>.Remove( const BindI_:GLuint );
259
begin
260
     DelPort( BindI_, Items[ BindI_ ] );
261

262
     inherited Remove( BindI_ );
263
end;
264

265
procedure TGLPorter<_TPort_>.Del( const BindI_:GLuint );
266
begin
267
     Remove( BindI_ );
268
end;
269

270
//------------------------------------------------------------------------------
271

272
procedure TGLPorter<_TPort_>.AddPorts;
273
var
274
   P :TPair<GLuint,_TPort_>;
275
begin
276
     for P in Self do
277
     begin
278
          with P do AddPort( Key, Value );
279
     end;
280
end;
281

282
procedure TGLPorter<_TPort_>.DelPorts;
283
var
284
   P :TPair<GLuint,_TPort_>;
285
begin
286
     for P in Self do
287
     begin
288
          with P do DelPort( Key, Value );
289
     end;
290
end;
291

292
//------------------------------------------------------------------------------
293

294
procedure TGLPorter<_TPort_>.Use;
295
begin
296

297
end;
298

299
procedure TGLPorter<_TPort_>.Unuse;
300
begin
301

302
end;
303

304
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterF
305

306
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
307

308
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
309

310
/////////////////////////////////////////////////////////////////////// メソッド
311

312
procedure TGLPorterF.AddPort( const BinP_:GLuint; const Port_:TGLPortF );
313
begin
314
     glBindFragDataLocation( _Progra.ID, BinP_, PGLchar( AnsiString( Port_.Name ) ) );
315
end;
316

317
procedure TGLPorterF.DelPort( const BinP_:GLuint; const Port_:TGLPortF );
318
begin
319

320
end;
321

322
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
323

324
/////////////////////////////////////////////////////////////////////// メソッド
325

326
procedure TGLPorterF.Add( const BinP_:GLuint; const Name_:String );
327
var
328
   P :TGLPortF;
329
begin
330
     with P do
331
     begin
332
          Name := Name_;
333
     end;
334

335
     inherited Add( BinP_, P );
336
end;
337

338
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterV
339

340
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
341

342
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
343

344
/////////////////////////////////////////////////////////////////////// メソッド
345

346
procedure TGLPorterV.AddPort( const BinP_:GLuint; const Port_:TGLPortV );
347
var
348
   L :GLuint;
349
begin
350
     L := _Progra.GetProgramResourceLocation( GL_PROGRAM_INPUT, Port_.Name );
351

352
     with _Varray do
353
     begin
354
          Bind;
355

356
            glEnableVertexAttribArray( L );
357

358
            with Port_ do
359
            begin
360
                 case EleT of
361
                 GL_INT   :glVertexAttribIFormat( L, EleN, EleT, Offs );
362
                 GL_FLOAT :glVertexAttribFormat( L, EleN, EleT, GL_FALSE, Offs );
363
                 end;
364
            end;
365

366
            glVertexAttribBinding( L, BinP_ );
367

368
          Unbind;
369
     end;
370
end;
371

372
procedure TGLPorterV.DelPort( const BinP_:GLuint; const Port_:TGLPortV );
373
var
374
   L :GLuint;
375
begin
376
     L := _Progra.GetProgramResourceLocation( GL_PROGRAM_INPUT, Port_.Name );
377

378
     with _Varray do
379
     begin
380
          Bind;
381

382
            glDisableVertexAttribArray( L );
383

384
          Unbind;
385
     end;
386
end;
387

388
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
389

390
constructor TGLPorterV.Create( const Progra_:IGLProgra );
391
begin
392
     inherited;
393

394
     _Varray := TGLVarray.Create;
395
end;
396

397
destructor TGLPorterV.Destroy;
398
begin
399
     _Varray.Free;
400

401
     inherited;
402
end;
403

404
/////////////////////////////////////////////////////////////////////// メソッド
405

406
procedure TGLPorterV.Use;
407
begin
408
     _Varray.Bind;
409
end;
410

411
procedure TGLPorterV.Unuse;
412
begin
413
     _Varray.Unbind;
414
end;
415

416
//------------------------------------------------------------------------------
417

418
procedure TGLPorterV.Add( const BinP_:GLuint; const Name_:String;
419
                                              const EleN_:GLint;
420
                                              const EleT_:GLenum;
421
                                              const Offs_:GLuint = 0 );
422
var
423
   P :TGLPortV;
424
begin
425
     with P do
426
     begin
427
          Name := Name_;
428
          EleN := EleN_;
429
          EleT := EleT_;
430
          Offs := Offs_;
431
     end;
432

433
     inherited Add( BinP_, P );
434
end;
435

436
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterU
437

438
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
439

440
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
441

442
/////////////////////////////////////////////////////////////////////// メソッド
443

444
procedure TGLPorterU.AddPort( const BinP_:GLuint; const Port_:TGLPortU );
445
var
446
   I :GLuint;
447
begin
448
     with _Progra do
449
     begin
450
          I := GetProgramResourceIndex( GL_UNIFORM_BLOCK, Port_.Name );
451

452
          glUniformBlockBinding( ID, I, BinP_ );
453
     end;
454
end;
455

456
procedure TGLPorterU.DelPort( const BinP_:GLuint; const Port_:TGLPortU );
457
begin
458

459
end;
460

461
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
462

463
/////////////////////////////////////////////////////////////////////// メソッド
464

465
procedure TGLPorterU.Add( const BinP_:GLuint; const Name_:String );
466
var
467
   P :TGLPortU;
468
begin
469
     with P do
470
     begin
471
          Name := Name_;
472
     end;
473

474
     inherited Add( BinP_, P );
475
end;
476

477
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterT
478

479
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
480

481
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
482

483
/////////////////////////////////////////////////////////////////////// メソッド
484

485
procedure TGLPorterT.AddPort( const BinP_:GLuint; const Port_:TGLPortT );
486
var
487
   L :GLuint;
488
begin
489
     with _Progra do
490
     begin
491
          L := GetProgramResourceLocation( GL_UNIFORM, Port_.Name );
492

493
          glProgramUniform1i( ID, L, BinP_ );
494
     end;
495
end;
496

497
procedure TGLPorterT.DelPort( const BinP_:GLuint; const Port_:TGLPortT );
498
begin
499

500
end;
501

502
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
503

504
/////////////////////////////////////////////////////////////////////// メソッド
505

506
procedure TGLPorterT.Add( const BinP_:GLuint; const Name_:String );
507
var
508
   P :TGLPortT;
509
begin
510
     with P do
511
     begin
512
          Name := Name_;
513
     end;
514

515
     inherited Add( BinP_, P );
516
end;
517

518
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TGLPorterS
519

520
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& private
521

522
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& protected
523

524
/////////////////////////////////////////////////////////////////////// メソッド
525

526
procedure TGLPorterS.AddPort( const BinP_:GLuint; const Port_:TGLPortS );
527
var
528
   I :GLuint;
529
begin
530
     with _Progra do
531
     begin
532
          I := GetProgramResourceIndex( GL_SHADER_STORAGE_BLOCK, Port_.Name );
533

534
          glShaderStorageBlockBinding( ID, I, BinP_ );
535
     end;
536
end;
537

538
procedure TGLPorterS.DelPort( const BinP_:GLuint; const Port_:TGLPortS );
539
begin
540

541
end;
542

543
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public
544

545
/////////////////////////////////////////////////////////////////////// メソッド
546

547
procedure TGLPorterS.Add( const BinP_:GLuint; const Name_:String );
548
var
549
   P :TGLPortS;
550
begin
551
     with P do
552
     begin
553
          Name := Name_;
554
     end;
555

556
     inherited Add( BinP_, P );
557
end;
558

559
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$【ルーチン】
560

561
//############################################################################## □
562

563
initialization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 初期化
564

565
finalization //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 最終化
566

567
end. //######################################################################### ■

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

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

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

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