2005-01-22 02:46:14 -05:00
|
|
|
{
|
|
|
|
Flame screensaver Copyright (C) 2002 Ronald Hordijk
|
|
|
|
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
}
|
|
|
|
unit RenderThread;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
2005-01-23 08:17:24 -05:00
|
|
|
Classes, windows, Messages, Graphics,
|
2005-01-29 06:09:50 -05:00
|
|
|
controlPoint, Render, Render32, Render64;
|
2005-01-22 02:46:14 -05:00
|
|
|
|
|
|
|
const
|
|
|
|
WM_THREAD_COMPLETE = WM_APP + 5437;
|
|
|
|
WM_THREAD_TERMINATE = WM_APP + 5438;
|
|
|
|
|
|
|
|
type
|
|
|
|
TRenderThread = class(TThread)
|
|
|
|
private
|
2005-01-29 06:09:50 -05:00
|
|
|
FRenderer: TBaseRenderer;
|
2005-01-22 02:46:14 -05:00
|
|
|
|
|
|
|
FOnProgress: TOnProgress;
|
2005-01-23 08:17:24 -05:00
|
|
|
FCP: TControlPoint;
|
2005-01-22 02:46:14 -05:00
|
|
|
public
|
|
|
|
MaxMem: int64;
|
|
|
|
TargetHandle: HWND;
|
|
|
|
nrSlices: int64;
|
|
|
|
Slice: int64;
|
2005-01-23 08:17:24 -05:00
|
|
|
compatibility: integer;
|
2005-01-22 02:46:14 -05:00
|
|
|
procedure Execute; override;
|
|
|
|
constructor Create;
|
|
|
|
destructor Destroy; override;
|
|
|
|
|
|
|
|
procedure SetCP(CP: TControlPoint);
|
|
|
|
function GetImage: TBitmap;
|
|
|
|
|
|
|
|
procedure Render; overload;
|
2005-01-23 08:17:24 -05:00
|
|
|
procedure Terminate;
|
2005-01-22 02:46:14 -05:00
|
|
|
|
|
|
|
property OnProgress: TOnProgress
|
|
|
|
read FOnProgress
|
2005-01-23 08:17:24 -05:00
|
|
|
write FOnProgress;
|
2005-01-22 02:46:14 -05:00
|
|
|
end;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
uses
|
|
|
|
Math, Sysutils;
|
|
|
|
|
|
|
|
{ TRenderThread }
|
|
|
|
|
|
|
|
|
|
|
|
destructor TRenderThread.Destroy;
|
|
|
|
begin
|
2005-01-23 08:17:24 -05:00
|
|
|
if assigned(FRenderer) then
|
|
|
|
FRenderer.Free;
|
2005-01-22 02:46:14 -05:00
|
|
|
|
|
|
|
inherited;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function TRenderThread.GetImage: TBitmap;
|
|
|
|
begin
|
2005-01-23 08:17:24 -05:00
|
|
|
Result := nil;
|
|
|
|
if assigned(FRenderer) then
|
|
|
|
Result := FRenderer.GetImage;
|
2005-01-22 02:46:14 -05:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TRenderThread.SetCP(CP: TControlPoint);
|
|
|
|
begin
|
|
|
|
FCP := CP;
|
|
|
|
end;
|
|
|
|
|
|
|
|
constructor TRenderThread.Create;
|
|
|
|
begin
|
|
|
|
MaxMem := 0; // mt
|
|
|
|
Slice := 0;
|
|
|
|
NrSlices := 1;
|
|
|
|
FreeOnTerminate := False;
|
|
|
|
inherited Create(True); // Create Suspended;
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TRenderThread.Render;
|
|
|
|
begin
|
2005-01-23 08:17:24 -05:00
|
|
|
if assigned(FRenderer) then
|
|
|
|
FRenderer.Free;
|
2005-01-22 02:46:14 -05:00
|
|
|
|
2005-01-29 06:09:50 -05:00
|
|
|
FRenderer := TRenderer64.Create;
|
2005-01-23 08:17:24 -05:00
|
|
|
FRenderer.SetCP(FCP);
|
|
|
|
FRenderer.compatibility := compatibility;
|
|
|
|
FRenderer.OnProgress := FOnProgress;
|
|
|
|
Frenderer.Render;
|
2005-01-22 02:46:14 -05:00
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TRenderThread.Execute;
|
|
|
|
begin
|
2005-01-29 06:09:50 -05:00
|
|
|
// if MaxMem = 0 then
|
|
|
|
Render;
|
|
|
|
// else
|
|
|
|
// RenderMaxMem(MaxMem);
|
2005-01-22 02:46:14 -05:00
|
|
|
|
|
|
|
if Terminated then
|
|
|
|
PostMessage(TargetHandle, WM_THREAD_TERMINATE, 0, 0)
|
|
|
|
else
|
|
|
|
PostMessage(TargetHandle, WM_THREAD_COMPLETE, 0, 0);
|
|
|
|
end;
|
|
|
|
|
2005-01-23 08:17:24 -05:00
|
|
|
procedure TRenderThread.Terminate;
|
|
|
|
begin
|
|
|
|
inherited Terminate;
|
|
|
|
|
|
|
|
if assigned(FRenderer) then
|
|
|
|
FRenderer.Stop;
|
|
|
|
end;
|
|
|
|
|
2005-01-22 02:46:14 -05:00
|
|
|
end.
|
|
|
|
|