- unit Quickstart;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, DGLOpenGL;
- type
- TForm1 = class(TForm)
- procedure FormCreate(Sender: TObject);
- procedure IdleHandler(Sender: TObject; var Done: Boolean);
- procedure FormResize(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- private
- { Private-Deklarationen }
- StartTime, TimeCount, FrameCount: Cardinal; //der FrameCounter
- Frames, DrawTime : Cardinal; //TimeBased Movement
- procedure SetupGL;
- procedure Render;
- procedure ErrorHandler;
- public
- { Public-Deklarationen }
- DC : HDC; //Handle auf Zeichenfläche
- RC : HGLRC; //Rendering Context
- end;
- var
- Form1: TForm1;
- const
- NearClipping = 1;
- FarClipping = 1000;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- DC := GetDC(Handle);
- if not InitOpenGL then Application.Terminate;
- RC := CreateRenderingContext(DC,
- [opDoubleBuffered],
- 32,
- 24,
- 0,0,0,
- 0);
- ActivateRenderingContext(DC, RC);
- SetupGL;
- end;
- procedure TForm1.SetupGL;
- begin
- glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe
- glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren
- glEnable(GL_CULL_FACE); //Backface Culling aktivieren
- end;
- procedure TForm1.FormResize(Sender: TObject);
- var Done: Boolean;
- begin
- glViewport(0, 0, ClientWidth, ClientHeight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- IdleHandler(Sender, Done);
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- DeactivateRenderingContext;
- DestroyRenderingContext(RC);
- ReleaseDC(HAndle, DC);
- end;
- procedure TForm1.Render;
- begin
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
- glTranslatef(0, 0, -5);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glBegin(GL_QUADS);
- glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
- glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
- glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
- glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
- glEnd;
- SwapBuffers(DC);
- end;
- procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
- begin
- StartTime := GetTickCount;
- Render;
- DrawTime := GetTickCount - StartTime;
- Inc(TimeCount, DrawTime);
- Inc(FrameCount);
- if TimeCount >= 1000 then begin
- Frames := FrameCount;
- TimeCount := TimeCount - 1000;
- FrameCount := 0;
- Caption := IntToStr(Frames) + 'FPS';
- ErrorHandler;
- end;
- sleep(5);
- Done := false;
- end;
- procedure TForm1.ErrorHandler;
- begin
- Form1.Caption := gluErrorString(glGetError);
- end;
- end.