[quote="noeska"]I use this class with my form. Here's the code:Originally Posted by JSoftware
[pascal]
unit UBEWindow;
interface
uses
Windows, Classes, Controls, Forms, AppEvnts,
// -- Headers --
dglOpenGL,
// -- Engine units --
UBEOpenGLBuffer, UBEInput, UBELogger, UBETimer;
type
{ .: TBrainEngineForm :. }
TBrainEngineForm = class(TForm)
private
{ Private declarations }
FAppEvent: TApplicationEvents;
FOGLBuffer: TOpenGLBuffer;
FInput: TInputSystem;
FPerfTimer: TPerformanceTimer;
procedure MyOnResize(Sender: TObject);
procedure MyOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure MyOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure MyOnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MyOnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MyOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
protected
{ Protected declarations }
procedure DoRender(); virtual; abstract;
procedure MyOnIdle(Sender: TObject; var Done: Boolean); virtual; abstract;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy(); override;
property OpenGLBuffer: TOpenGLBuffer read FOGLBuffer;
property InputSystem: TInputSystem read FInput;
property PerformanceTimer: TPerformanceTimer read FPerfTimer;
end;
implementation
{ TBrainEngineForm }
constructor TBrainEngineForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAppEvent := TApplicationEvents.Create(Self);
FOGLBuffer := TOpenGLBuffer.Create(GetDC(Handle));
FOGLBuffer.InitGL();
FInput := TInputSystem.Create();
FPerfTimer := TPerformanceTimer.Create();
FAppEvent.OnIdle := MyOnIdle;
OnResize := MyOnResize;
OnKeyDown := MyOnKeyDown;
OnKeyUp := MyOnKeyUp;
OnMouseDown := MyOnMouseDown;
OnMouseUp := MyOnMouseUp;
OnMouseMove := MyOnMouseMove;
Log.Log('Window created.', 'UBEWindow');
FPerfTimer.StartTiming();
end;
destructor TBrainEngineForm.Destroy;
begin
FAppEvent.Free();
FOGLBuffer.Free();
FInput.Free();
FPerfTimer.Free();
Log.Log('Window freed.', 'UBEWindow');
inherited Destroy();
end;
procedure TBrainEngineForm.MyOnKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FInput.ProcessKeyboard(keKeyDown, Key);
end;
procedure TBrainEngineForm.MyOnKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FInput.ProcessKeyboard(keKeyUp, Key);
end;
procedure TBrainEngineForm.MyOnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case Button of
mbLeft: FInput.ProcessMouse(meLeftButtonDown, X, Y);
mbRight: FInput.ProcessMouse(meRightButtonDown, X, Y);
mbMiddle: FInput.ProcessMouse(meMiddleButtonDown, X, Y);
end;
end;
procedure TBrainEngineForm.MyOnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
FInput.ProcessMouse(meMove, X, Y);
end;
procedure TBrainEngineForm.MyOnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case Button of
mbLeft: FInput.ProcessMouse(meLeftButtonUp, X, Y);
mbRight: FInput.ProcessMouse(meRightButtonUp, X, Y);
mbMiddle: FInput.ProcessMouse(meMiddleButtonUp, X, Y);
end;
end;
procedure TBrainEngineForm.MyOnResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, ClientWidth / ClientHeight, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
end;
end.
[/pascal]
Bookmarks