Commit 2470ca3

Nick committed on
Adding BGRABitmap for performance
commit 2470ca341517d2ccfff1a4f953f2ded803f27d36 parent ccca4e5
9 changed files +106−114
ModifiedGBEmu.lpi +39−43
@@ -148,24 +148,27 @@
148 </Mode0> 148 </Mode0>
149 </Modes> 149 </Modes>
150 </RunParams> 150 </RunParams>
151 <RequiredPackages Count="5"> 151 <RequiredPackages Count="6">
152 <Item1> 152 <Item1>
153 <PackageName Value="etpackage"/> 153 <PackageName Value="BGRABitmapPack"/>
154 </Item1> 154 </Item1>
155 <Item2> 155 <Item2>
156 <PackageName Value="RackCtlsPkg"/> 156 <PackageName Value="etpackage"/>
157 </Item2> 157 </Item2>
158 <Item3> 158 <Item3>
159 <PackageName Value="SynEdit"/> 159 <PackageName Value="RackCtlsPkg"/>
160 </Item3> 160 </Item3>
161 <Item4> 161 <Item4>
162 <PackageName Value="LazControls"/> 162 <PackageName Value="SynEdit"/>
163 </Item4> 163 </Item4>
164 <Item5> 164 <Item5>
165 <PackageName Value="LCL"/> 165 <PackageName Value="LazControls"/>
166 </Item5> 166 </Item5>
167 <Item6>
168 <PackageName Value="LCL"/>
169 </Item6>
167 </RequiredPackages> 170 </RequiredPackages>
168 <Units Count="23"> 171 <Units Count="22">
169 <Unit0> 172 <Unit0>
170 <Filename Value="GBEmu.lpr"/> 173 <Filename Value="GBEmu.lpr"/>
171 <IsPartOfProject Value="True"/> 174 <IsPartOfProject Value="True"/>
@@ -200,93 +203,85 @@
200 <UnitName Value="Tracker"/> 203 <UnitName Value="Tracker"/>
201 </Unit6> 204 </Unit6>
202 <Unit7> 205 <Unit7>
203 <Filename Value="about.pas"/> 206 <Filename Value="instruments.pas"/>
204 <IsPartOfProject Value="True"/> 207 <IsPartOfProject Value="True"/>
205 <ComponentName Value="frmAbout"/>
206 <HasResources Value="True"/>
207 <ResourceBaseClass Value="Form"/>
208 <UnitName Value="About"/>
209 </Unit7> 208 </Unit7>
210 <Unit8> 209 <Unit8>
211 <Filename Value="instruments.pas"/>
212 <IsPartOfProject Value="True"/>
213 </Unit8>
214 <Unit9>
215 <Filename Value="song.pas"/> 210 <Filename Value="song.pas"/>
216 <IsPartOfProject Value="True"/> 211 <IsPartOfProject Value="True"/>
217 <UnitName Value="Song"/> 212 <UnitName Value="Song"/>
218 </Unit9> 213 </Unit8>
219 <Unit10> 214 <Unit9>
220 <Filename Value="emulationthread.pas"/> 215 <Filename Value="emulationthread.pas"/>
221 <IsPartOfProject Value="True"/> 216 <IsPartOfProject Value="True"/>
222 <UnitName Value="EmulationThread"/> 217 <UnitName Value="EmulationThread"/>
223 </Unit10> 218 </Unit9>
224 <Unit11> 219 <Unit10>
225 <Filename Value="utils.pas"/> 220 <Filename Value="utils.pas"/>
226 <IsPartOfProject Value="True"/> 221 <IsPartOfProject Value="True"/>
227 <UnitName Value="Utils"/> 222 <UnitName Value="Utils"/>
228 </Unit11> 223 </Unit10>
229 <Unit12> 224 <Unit11>
230 <Filename Value="constants.pas"/> 225 <Filename Value="constants.pas"/>
231 <IsPartOfProject Value="True"/> 226 <IsPartOfProject Value="True"/>
232 <UnitName Value="Constants"/> 227 <UnitName Value="Constants"/>
233 </Unit12> 228 </Unit11>
234 <Unit13> 229 <Unit12>
235 <Filename Value="waves.pas"/> 230 <Filename Value="waves.pas"/>
236 <IsPartOfProject Value="True"/> 231 <IsPartOfProject Value="True"/>
237 <UnitName Value="Waves"/> 232 <UnitName Value="Waves"/>
238 </Unit13> 233 </Unit12>
239 <Unit14> 234 <Unit13>
240 <Filename Value="about_hugetracker.pas"/> 235 <Filename Value="about_hugetracker.pas"/>
241 <IsPartOfProject Value="True"/> 236 <IsPartOfProject Value="True"/>
242 <ComponentName Value="frmAboutHugetracker"/> 237 <ComponentName Value="frmAboutHugetracker"/>
243 <HasResources Value="True"/> 238 <HasResources Value="True"/>
244 <ResourceBaseClass Value="Form"/> 239 <ResourceBaseClass Value="Form"/>
245 </Unit14> 240 </Unit13>
246 <Unit15> 241 <Unit14>
247 <Filename Value="trackergrid.pas"/> 242 <Filename Value="trackergrid.pas"/>
248 <IsPartOfProject Value="True"/> 243 <IsPartOfProject Value="True"/>
249 <UnitName Value="TrackerGrid"/> 244 <UnitName Value="TrackerGrid"/>
250 </Unit15> 245 </Unit14>
251 <Unit16> 246 <Unit15>
252 <Filename Value="patterns.pas"/> 247 <Filename Value="patterns.pas"/>
253 <IsPartOfProject Value="True"/> 248 <IsPartOfProject Value="True"/>
254 <UnitName Value="Patterns"/> 249 <UnitName Value="Patterns"/>
255 </Unit16> 250 </Unit15>
256 <Unit17> 251 <Unit16>
257 <Filename Value="clipboardutils.pas"/> 252 <Filename Value="clipboardutils.pas"/>
258 <IsPartOfProject Value="True"/> 253 <IsPartOfProject Value="True"/>
259 <UnitName Value="ClipboardUtils"/> 254 <UnitName Value="ClipboardUtils"/>
260 </Unit17> 255 </Unit16>
261 <Unit18> 256 <Unit17>
262 <Filename Value="hugedatatypes.pas"/> 257 <Filename Value="hugedatatypes.pas"/>
263 <IsPartOfProject Value="True"/> 258 <IsPartOfProject Value="True"/>
264 <UnitName Value="HugeDatatypes"/> 259 <UnitName Value="HugeDatatypes"/>
265 </Unit18> 260 </Unit17>
266 <Unit19> 261 <Unit18>
267 <Filename Value="codegen.pas"/> 262 <Filename Value="codegen.pas"/>
268 <IsPartOfProject Value="True"/> 263 <IsPartOfProject Value="True"/>
269 <UnitName Value="Codegen"/> 264 <UnitName Value="Codegen"/>
270 </Unit19> 265 </Unit18>
271 <Unit20> 266 <Unit19>
272 <Filename Value="symparser.pas"/> 267 <Filename Value="symparser.pas"/>
273 <IsPartOfProject Value="True"/> 268 <IsPartOfProject Value="True"/>
274 <UnitName Value="SymParser"/> 269 <UnitName Value="SymParser"/>
275 </Unit20> 270 </Unit19>
276 <Unit21> 271 <Unit20>
277 <Filename Value="effecteditor.pas"/> 272 <Filename Value="effecteditor.pas"/>
278 <IsPartOfProject Value="True"/> 273 <IsPartOfProject Value="True"/>
279 <ComponentName Value="frmEffectEditor"/> 274 <ComponentName Value="frmEffectEditor"/>
280 <HasResources Value="True"/> 275 <HasResources Value="True"/>
281 <ResourceBaseClass Value="Form"/> 276 <ResourceBaseClass Value="Form"/>
282 </Unit21> 277 </Unit20>
283 <Unit22> 278 <Unit21>
284 <Filename Value="options.pas"/> 279 <Filename Value="options.pas"/>
285 <IsPartOfProject Value="True"/> 280 <IsPartOfProject Value="True"/>
286 <ComponentName Value="frmOptions"/> 281 <ComponentName Value="frmOptions"/>
287 <HasResources Value="True"/> 282 <HasResources Value="True"/>
288 <ResourceBaseClass Value="Form"/> 283 <ResourceBaseClass Value="Form"/>
289 </Unit22> 284 </Unit21>
290 </Units> 285 </Units>
291 </ProjectOptions> 286 </ProjectOptions>
292 <CompilerOptions> 287 <CompilerOptions>
@@ -310,6 +305,7 @@
310 <StackChecks Value="True"/> 305 <StackChecks Value="True"/>
311 </Checks> 306 </Checks>
312 <TargetCPU Value="i386"/> 307 <TargetCPU Value="i386"/>
308 <TargetOS Value="win32"/>
313 <Optimizations> 309 <Optimizations>
314 <OptimizationLevel Value="0"/> 310 <OptimizationLevel Value="0"/>
315 </Optimizations> 311 </Optimizations>
ModifiedGBEmu.lpr +3−1
@@ -32,7 +32,8 @@ uses
32 sound in 'Sound\sound.pas', 32 sound in 'Sound\sound.pas',
33 vars in 'Global\vars.pas', 33 vars in 'Global\vars.pas',
34 mainloop in 'mainloop.pas', 34 mainloop in 'mainloop.pas',
35 options in 'options.pas'; 35 options in 'options.pas',
36 about_hugetracker in 'about_hugetracker.pas';
36 37
37 {.$R *.RES} 38 {.$R *.RES}
38 39
@@ -69,5 +70,6 @@ begin
69 Application.Initialize; 70 Application.Initialize;
70 Application.CreateForm(TfrmTracker, frmTracker); 71 Application.CreateForm(TfrmTracker, frmTracker);
71 Application.CreateForm(TfrmOptions, frmOptions); 72 Application.CreateForm(TfrmOptions, frmOptions);
73 Application.CreateForm(TfrmAboutHugeTracker, frmAboutHugetracker);
72 Application.Run; 74 Application.Run;
73 end. 75 end.
Deletedabout.lfm +0−9
@@ -1,9 +0,0 @@
1 object frmAbout: TfrmAbout
2 Left = 1143
3 Height = 350
4 Top = 371
5 Width = 420
6 Caption = 'About'
7 Position = poScreenCenter
8 LCLVersion = '2.0.2.0'
9 end
Deletedabout.pas +0−26
@@ -1,26 +0,0 @@
1 unit About;
2
3 {$mode delphi}
4
5 interface
6
7 uses
8 Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
9
10 type
11 TfrmAbout = class(TForm)
12 private
13
14 public
15
16 end;
17
18 var
19 frmAbout: TfrmAbout;
20
21 implementation
22
23 {$R *.lfm}
24
25 end.
26
Modifiedabout_hugetracker.lfm +3−2
@@ -1,7 +1,7 @@
1 object frmAboutHugetracker: TfrmAboutHugetracker 1 object frmAboutHugetracker: TfrmAboutHugetracker
2 Left = 710 2 Left = 849
3 Height = 502 3 Height = 502
4 Top = 325 4 Top = 334
5 Width = 917 5 Width = 917
6 BorderStyle = bsNone 6 BorderStyle = bsNone
7 Caption = 'About hUGETracker' 7 Caption = 'About hUGETracker'
@@ -9,6 +9,7 @@ object frmAboutHugetracker: TfrmAboutHugetracker
9 ClientWidth = 917 9 ClientWidth = 917
10 Color = clMoneyGreen 10 Color = clMoneyGreen
11 DesignTimePPI = 168 11 DesignTimePPI = 168
12 OnDeactivate = FormDeactivate
12 Position = poDesktopCenter 13 Position = poDesktopCenter
13 LCLVersion = '2.0.6.0' 14 LCLVersion = '2.0.6.0'
14 object Panel1: TPanel 15 object Panel1: TPanel
Modifiedabout_hugetracker.pas +6−0
@@ -16,6 +16,7 @@ type
16 Label1: TLabel; 16 Label1: TLabel;
17 Panel1: TPanel; 17 Panel1: TPanel;
18 procedure Button1Click(Sender: TObject); 18 procedure Button1Click(Sender: TObject);
19 procedure FormDeactivate(Sender: TObject);
19 private 20 private
20 21
21 public 22 public
@@ -36,5 +37,10 @@ begin
36 Close; 37 Close;
37 end; 38 end;
38 39
40 procedure TfrmAboutHugetracker.FormDeactivate(Sender: TObject);
41 begin
42 Close;
43 end;
44
39 end. 45 end.
40 46
Modifiedtracker.lfm +10−3
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 621 2 Left = 514
3 Height = 1250 3 Height = 1250
4 Top = 297 4 Top = 188
5 Width = 2067 5 Width = 2067
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1216 7 ClientHeight = 1216
@@ -4875,7 +4875,7 @@ object frmTracker: TfrmTracker
4875 } 4875 }
4876 end 4876 end
4877 object OscilloscopeUpdateTimer: TTimer 4877 object OscilloscopeUpdateTimer: TTimer
4878 Interval = 200 4878 Interval = 15
4879 OnTimer = OscilloscopeUpdateTimerTimer 4879 OnTimer = OscilloscopeUpdateTimerTimer
4880 left = 512 4880 left = 512
4881 top = 64 4881 top = 64
@@ -4904,6 +4904,13 @@ object frmTracker: TfrmTracker
4904 object TrackerGridPopup: TPopupMenu 4904 object TrackerGridPopup: TPopupMenu
4905 left = 1093 4905 left = 1093
4906 top = 191 4906 top = 191
4907 object TrackerPopupEditEffect: TMenuItem
4908 Caption = 'Edit effect ...'
4909 OnClick = TrackerPopupEditEffectClick
4910 end
4911 object MenuItem28: TMenuItem
4912 Caption = '-'
4913 end
4907 object TrackerPopupSelectAll: TMenuItem 4914 object TrackerPopupSelectAll: TMenuItem
4908 Caption = 'Select all' 4915 Caption = 'Select all'
4909 OnClick = TrackerPopupSelectAllClick 4916 OnClick = TrackerPopupSelectAllClick
Modifiedtracker.pas +23−14
@@ -9,8 +9,8 @@ uses
9 Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, math, Instruments, Waves, 9 Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, math, Instruments, Waves,
10 Song, EmulationThread, Utils, Constants, sound, vars, machine, 10 Song, EmulationThread, Utils, Constants, sound, vars, machine,
11 about_hugetracker, TrackerGrid, lclintf, lmessages, Buttons, Grids, DBCtrls, 11 about_hugetracker, TrackerGrid, lclintf, lmessages, Buttons, Grids, DBCtrls,
12 HugeDatatypes, LCLType, RackCtls, Codegen, 12 HugeDatatypes, LCLType, RackCtls, Codegen, SymParser, options, IniFiles,
13 SymParser, options, IniFiles; 13 bgrabitmap;
14 14
15 type 15 type
16 { TfrmTracker } 16 { TfrmTracker }
@@ -32,6 +32,8 @@ type
32 MenuItem25: TMenuItem; 32 MenuItem25: TMenuItem;
33 MenuItem26: TMenuItem; 33 MenuItem26: TMenuItem;
34 MenuItem27: TMenuItem; 34 MenuItem27: TMenuItem;
35 MenuItem28: TMenuItem;
36 TrackerPopupEditEffect: TMenuItem;
35 TrackerPopupTransposeOctaveUp: TMenuItem; 37 TrackerPopupTransposeOctaveUp: TMenuItem;
36 TrackerPopupTransposeOctaveDown: TMenuItem; 38 TrackerPopupTransposeOctaveDown: TMenuItem;
37 TrackerPopupTransposeSemiUp: TMenuItem; 39 TrackerPopupTransposeSemiUp: TMenuItem;
@@ -277,6 +279,7 @@ type
277 procedure ExportGBButtonClick(Sender: TObject); 279 procedure ExportGBButtonClick(Sender: TObject);
278 procedure TrackerPopupCopyClick(Sender: TObject); 280 procedure TrackerPopupCopyClick(Sender: TObject);
279 procedure TrackerPopupCutClick(Sender: TObject); 281 procedure TrackerPopupCutClick(Sender: TObject);
282 procedure TrackerPopupEditEffectClick(Sender: TObject);
280 procedure TrackerPopupEraseClick(Sender: TObject); 283 procedure TrackerPopupEraseClick(Sender: TObject);
281 procedure TrackerPopupFloodPasteClick(Sender: TObject); 284 procedure TrackerPopupFloodPasteClick(Sender: TObject);
282 procedure TrackerPopupPasteClick(Sender: TObject); 285 procedure TrackerPopupPasteClick(Sender: TObject);
@@ -322,13 +325,14 @@ type
322 DrawingWave: Boolean; 325 DrawingWave: Boolean;
323 Playing: Boolean; 326 Playing: Boolean;
324 LoadingFile: Boolean; 327 LoadingFile: Boolean;
328 RedrawingOscillators: Boolean;
325 329
326 {PatternsNode, }InstrumentsNode, WavesNode, RoutinesNode: TTreeNode; 330 {PatternsNode, }InstrumentsNode, WavesNode, RoutinesNode: TTreeNode;
327 331
328 SymbolTable: TSymbolMap; 332 SymbolTable: TSymbolMap;
329 OptionsFile: TIniFile; 333 OptionsFile: TIniFile;
330 334
331 VisualizerBuffer: TBitmap; 335 VisualizerBuffer: TBGRABitmap;
332 336
333 procedure ChangeToSquare; 337 procedure ChangeToSquare;
334 procedure ChangeToWave; 338 procedure ChangeToWave;
@@ -477,7 +481,8 @@ begin
477 Line(0, PB.Height, PB.Width, 0); 481 Line(0, PB.Height, PB.Width, 0);
478 end; 482 end;
479 end; 483 end;
480 PB.Canvas.Draw(0, 0, VisualizerBuffer); 484 VisualizerBuffer.Draw(PB.Canvas, 0, 0, True);
485 //PB.Canvas.Draw(0, 0, VisualizerBuffer);
481 end; 486 end;
482 487
483 procedure TfrmTracker.PreviewInstrument(Freq: Integer; Instr: Integer); 488 procedure TfrmTracker.PreviewInstrument(Freq: Integer; Instr: Integer);
@@ -939,9 +944,7 @@ begin
939 'font file, so please install PixeliteTTF.ttf and relaunch! Thanks.', 944 'font file, so please install PixeliteTTF.ttf and relaunch! Thanks.',
940 mtWarning, [mbOk], 0); 945 mtWarning, [mbOk], 0);
941 946
942 VisualizerBuffer := TBitmap.Create; 947 VisualizerBuffer := TBGRABitmap.Create(Duty1Visualizer.Width, Duty1Visualizer.Height);
943 VisualizerBuffer.Height := Duty1Visualizer.Height;
944 VisualizerBuffer.Width := Duty1Visualizer.Width;
945 948
946 ReturnNilIfGrowHeapFails := False; 949 ReturnNilIfGrowHeapFails := False;
947 PreviewingInstrument := -1; 950 PreviewingInstrument := -1;
@@ -1417,12 +1420,8 @@ begin
1417 end; 1420 end;
1418 1421
1419 procedure TfrmTracker.MenuItem5Click(Sender: TObject); 1422 procedure TfrmTracker.MenuItem5Click(Sender: TObject);
1420 var
1421 AboutForm: TfrmAboutHugeTracker;
1422 begin 1423 begin
1423 AboutForm := TfrmAboutHugetracker.Create(Self); 1424 frmAboutHugetracker.Show;
1424 AboutForm.ShowModal;
1425 AboutForm.Free;
1426 end; 1425 end;
1427 1426
1428 procedure TfrmTracker.MenuItem8Click(Sender: TObject); 1427 procedure TfrmTracker.MenuItem8Click(Sender: TObject);
@@ -1526,10 +1525,12 @@ var
1526 I: Integer; 1525 I: Integer;
1527 Samp: Integer; 1526 Samp: Integer;
1528 begin 1527 begin
1529 if Playing then 1528 //if RedrawingOscillators then Exit;
1529 //RedrawingOscillators := True;
1530 {if Playing then
1530 OscilloscopeUpdateTimer.Interval := 25 1531 OscilloscopeUpdateTimer.Interval := 25
1531 else 1532 else
1532 OscilloscopeUpdateTimer.Interval := 200; 1533 OscilloscopeUpdateTimer.Interval := 200;}
1533 1534
1534 Max1 := -1; 1535 Max1 := -1;
1535 Max2 := -1; 1536 Max2 := -1;
@@ -1552,6 +1553,9 @@ begin
1552 Max2 := Trunc((Max2/512)*100); 1553 Max2 := Trunc((Max2/512)*100);
1553 if Max1 > LEDMeter1.Position then LEDMeter1.Position := Max1; 1554 if Max1 > LEDMeter1.Position then LEDMeter1.Position := Max1;
1554 if Max2 > LEDMeter2.Position then LEDMeter2.Position := Max2; 1555 if Max2 > LEDMeter2.Position then LEDMeter2.Position := Max2;
1556
1557 //Application.ProcessMessages;
1558 //RedrawingOscillators := False;
1555 end; 1559 end;
1556 1560
1557 procedure TfrmTracker.ExportGBSButtonClick(Sender: TObject); 1561 procedure TfrmTracker.ExportGBSButtonClick(Sender: TObject);
@@ -1603,6 +1607,11 @@ begin
1603 SendMessage(TrackerGrid.Handle, LM_CUT, 0, 0) 1607 SendMessage(TrackerGrid.Handle, LM_CUT, 0, 0)
1604 end; 1608 end;
1605 1609
1610 procedure TfrmTracker.TrackerPopupEditEffectClick(Sender: TObject);
1611 begin
1612 TrackerGrid.OpenEffectEditor;
1613 end;
1614
1606 procedure TfrmTracker.TrackerPopupEraseClick(Sender: TObject); 1615 procedure TfrmTracker.TrackerPopupEraseClick(Sender: TObject);
1607 begin 1616 begin
1608 TrackerGrid.EraseSelection 1617 TrackerGrid.EraseSelection
Modifiedtrackergrid.pas +22−16
@@ -137,6 +137,7 @@ type
137 procedure DoRedo; 137 procedure DoRedo;
138 procedure DoRepeatPaste; 138 procedure DoRepeatPaste;
139 procedure TransposeSelection(Semitones: Integer); 139 procedure TransposeSelection(Semitones: Integer);
140 procedure OpenEffectEditor;
140 141
141 constructor Create( 142 constructor Create(
142 AOwner: TComponent; 143 AOwner: TComponent;
@@ -320,23 +321,8 @@ begin
320 end; 321 end;
321 322
322 procedure TTrackerGrid.DblClick; 323 procedure TTrackerGrid.DblClick;
323 var
324 FXEditor: TfrmEffectEditor;
325 begin 324 begin
326 inherited DblClick; 325 OpenEffectEditor
327
328 FXEditor := TfrmEffectEditor.Create(@Patterns[Cursor.X]^[Cursor.Y]);
329 try
330 FXEditor.ShowModal;
331 finally
332 FXEditor.Free;
333 end;
334
335 NormalizeCursors;
336
337 MouseButtonDown := False;
338
339 Invalidate;
340 end; 326 end;
341 327
342 procedure TTrackerGrid.KeyDown(var Key: Word; Shift: TShiftState); 328 procedure TTrackerGrid.KeyDown(var Key: Word; Shift: TShiftState);
@@ -587,6 +573,26 @@ begin
587 SaveUndoState; 573 SaveUndoState;
588 end; 574 end;
589 575
576 procedure TTrackerGrid.OpenEffectEditor;
577 var
578 FXEditor: TfrmEffectEditor;
579 begin
580 inherited DblClick;
581
582 FXEditor := TfrmEffectEditor.Create(@Patterns[Cursor.X]^[Cursor.Y]);
583 try
584 FXEditor.ShowModal;
585 finally
586 FXEditor.Free;
587 end;
588
589 NormalizeCursors;
590
591 MouseButtonDown := False;
592
593 Invalidate;
594 end;
595
590 procedure TTrackerGrid.EraseSelection; 596 procedure TTrackerGrid.EraseSelection;
591 var 597 var
592 X: TSelectionPos; 598 X: TSelectionPos;