-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfv3d.pas
More file actions
155 lines (145 loc) · 5.72 KB
/
Copy pathfv3d.pas
File metadata and controls
155 lines (145 loc) · 5.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
unit fv3d;
interface
uses
Windows, Messages, Forms, OpenGL, Controls, StdCtrls, Classes, ExtCtrls,
Menus, Dialogs, Graphics, Buttons, Mask, Spin;
type
Tf_main = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
help1: TMenuItem;
About1: TMenuItem;
Options1: TMenuItem;
N1: TMenuItem;
procedure FormCreate(Sender : TObject);
procedure FormResize(Sender : TObject);
procedure FormDestroy(Sender : TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Exit1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure FormKey(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Options1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
DC : HDC;
hrc : HGLRC;
timer1 : uint;
procedure SetDCPixelFormat();
procedure Form_create_text();
protected
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
var
f_main : Tf_main;
implementation
uses mmSystem, about,GLunit,tools,dialog,rotate;
{$R *.DFM}
//------------------------------------------------------------------------------
procedure FTimerCallBack(uTimerID,uMessage : UINT; dwUser,dw1,dw2: DWORD) stdcall;
begin
InvalidateRect(f_main.Handle, nil, False); // ïåðåðèñîâêà ðåãèîíà
end;
//------------------------------------------------------------------------------
procedure Tf_main.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint(Handle,ps);
//==========
start_draw();
if (need_rotate<>0) then f_rotate.rotate;
//==========
SwapBuffers(DC);
EndPaint(Handle,ps);
end;
//------------------------------------------------------------------------------
procedure Tf_main.SetDCPixelFormat();
var
pfd : TPIXELFORMATDESCRIPTOR; // äàííûå ôîðìàòà ïèêñåëåé
nPixelFormat : Integer;
nPixelSet : Bool;
begin
FillChar(pfd,SizeOf(pfd),0);
With pfd do begin
nSize:=sizeof(pfd);
nVersion:=1;
dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
iPixelType:=PFD_TYPE_RGBA; // ðåæèì äëÿ èçîáðàæåíèÿ öâåòîâ
cColorBits:=24; // ÷èñëî áèòîâûõ ïëîñêîñòåé â êàæäîì áóôåðå öâåòà
cDepthBits:=32; // ðàçìåð áóôåðà ãëóáèíû (îñü z)
cStencilBits:=8; // ðàçìåð áóôåðà òðàôàðåòà
iLayerType:=PFD_MAIN_PLANE; // òèï ïëîñêîñòè
end;
nPixelFormat:=ChoosePixelFormat(f_main.DC,@pfd); // ïîääåðæèâàåòñÿ ëè âûáðàííûé ôîðìàò ïèêñåëåé
if (nPixelFormat=0) then begin MessageDlg('Error 01: Can`t execute ChoosePixelFormat()',mtError,[mbAbort],0); halt; end;
nPixelSet:=SetPixelFormat(f_main.DC,nPixelFormat,@pfd); // óñòàíàâëèâàåì ôîðìàò ïèêñåëåé â êîíòåêñòå óñòðîéñòâà
if (nPixelSet=false) then begin MessageDlg('Error 02: Can`t execute SetPixelFormat()',mtError,[mbAbort],0); halt; end;
DescribePixelFormat(f_main.DC,nPixelFormat,sizeof(TPixelFormatDescriptor),pfd);
end;
//------------------------------------------------------------------------------
procedure Tf_main.Form_create_text();
var
hFontNew, hOldFont : HFONT;
agmf : Array [0..255] of TGLYPHMETRICSFLOAT;
begin
hFontNew:=CreateFont(-14,0,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET,OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,
FF_DONTCARE or DEFAULT_PITCH,'Courier New');
hOldFont:=SelectObject(DC,hFontNew);
wglUseFontOutlines(DC,0,255,l_text,0.0,0.15,WGL_FONT_POLYGONS,@agmf);
DeleteObject(SelectObject(DC,hOldFont));
DeleteObject(SelectObject(DC,hFontNew));
end;
//------------------------------------------------------------------------------
procedure Tf_main.FormCreate(Sender : TObject);
begin
DC:=GetDC(Handle);
SetDCPixelFormat();
hrc:=wglCreateContext(DC);
wglMakeCurrent(DC,hrc);
Form_create_text();
timer1:=timeSetEvent(2,0,@FTimerCallBack,0,TIME_PERIODIC);
gl_create_form();
end;
//------------------------------------------------------------------------------
procedure Tf_main.FormResize(Sender : TObject); begin start_form_resize(width,height); end;
//------------------------------------------------------------------------------
procedure Tf_main.FormDestroy(Sender : TObject);
begin
gl_destroy_form();
delete_vf();
timeKillEvent(Timer1);
wglMakeCurrent(0,0);
wglDeleteContext(hrc);
ReleaseDC(Handle,DC);
end;
//------------------------------------------------------------------------------
procedure Tf_main.FormKey(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case (Key) of
VK_ESCAPE : Application.Terminate;
VK_UP : coord_rotate(1,0,0); // up
VK_DOWN : coord_rotate(-1,0,0); // down
VK_LEFT : coord_rotate(0,-1,0); // left
VK_RIGHT : coord_rotate(0,1,0); // right
VK_NEXT : coord_rotate(0,0,-1); // page_up
VK_DELETE : coord_rotate(0,0,1); // page_down
end;
end;
//------------------------------------------------------------------------------
procedure Tf_main.FormKeyPress(Sender: TObject; var Key: Char);
begin
{ case (Key) of
end;}
end;
//------------------------------------------------------------------------------
procedure Tf_main.Exit1Click(Sender: TObject); begin Application.Terminate; end;
//------------------------------------------------------------------------------
procedure Tf_main.About1Click(Sender: TObject); begin f_about.ShowModal(); end;
//------------------------------------------------------------------------------
procedure Tf_main.Options1Click(Sender: TObject); begin f_dialog.ShowModal(); end;
//------------------------------------------------------------------------------
procedure Tf_main.N1Click(Sender: TObject); begin f_rotate.ShowModal(); end;
//------------------------------------------------------------------------------
end.