- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, DGLOpenGL;
- const NearClipping = 1;
- FarClipping = 1000;
- 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; //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;
- 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;
- Application.OnIdle := IdleHandler;
- 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 tmpBool : Boolean;
- begin
- glViewport(0, 0, 640, 480);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- glOrtho(0,640,0,480, 0,128);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- IdleHandler(Sender, tmpBool);
- 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;
- glViewport(0,0,ClientWidth,ClientHeight);
- glOrtho(0,640,0,480, 0,128);
- glTranslatef(0, 0, -5);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glBegin(GL_QUADS);
- glColor3f(1, 0, 0); glVertex3f(1, 1, 0);
- glColor3f(0, 1, 0); glVertex3f(1, 2, 0);
- glColor3f(0, 0, 1); glVertex3f(2, 2, 0);
- glColor3f(1, 1, 0); glVertex3f(2, 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;
- Done:= false;
- end;
- procedure TForm1.ErrorHandler;
- begin
- Form1.Caption := gluErrorString(glGetError);
- end;
- end.