unit uMainForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, uglcContext; type TMainForm = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private fContext: TglcContext; procedure Render; end; var MainForm: TMainForm; implementation {$R *.lfm} uses dglOpenGL; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //MainForm////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.FormCreate(Sender: TObject); var pf: TglcContextPixelFormatSettings; begin pf := TglcContext.MakePF(); fContext := TglcContext.GetPlatformClass.Create(self, pf); fContext.BuildContext; fContext.Activate; glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.FormDestroy(Sender: TObject); begin FreeAndNil(fContext); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.FormPaint(Sender: TObject); begin Render; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.FormResize(Sender: TObject); begin if Assigned(fContext) then begin glViewport(0, 0, ClientWidth, ClientHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity; glOrtho(0, ClientWidth, ClientHeight, 0, 10, -10); glMatrixMode(GL_MODELVIEW); glLoadIdentity; end; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.Render; const X = 100; var w, h: Integer; begin w := ClientWidth; h := ClientHeight; glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glColor4f(1.0, 1.0, 1.0, 1.0); glBegin(GL_QUADS); glVertex2f(X, X); glVertex2f(X, h-X); glVertex2f(w-X, h-X); glVertex2f(w-X, X); glEnd; fContext.SwapBuffers; end; end.