8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
9 uglcContext, uglcShader, uglcArrayBuffer, uglcTypes;
12 TMainForm = class(TForm)
13 ApplicationProperties: TApplicationProperties;
16 procedure ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
17 procedure FormCreate(Sender: TObject);
18 procedure FormDestroy(Sender: TObject);
19 procedure RenderPanelResize(Sender: TObject);
21 fContext: TglcContext;
22 fShader: TglcShaderProgram;
23 fVBO: TglcArrayBuffer;
24 procedure Log(aSender: TObject; const aMsg: String);
27 { public declarations }
38 dglOpenGL, ugluVector;
41 SHADER_FILE = 'shader.glsl';
43 LAYOUT_LOCATION_POS = 0;
45 procedure TMainForm.FormCreate(Sender: TObject);
47 TVertex = packed record
52 pf: TglcContextPixelFormatSettings;
55 pf := TglcContext.MakePF();
56 fContext := TglcContext.GetPlatformClass.Create(RenderPanel, pf);
57 fContext.BuildContext;
59 fShader := TglcShaderProgram.Create(@Log);
60 fShader.LoadFromFile(ExtractFilePath(Application.ExeName) + SHADER_FILE);
63 fVBO := TglcArrayBuffer.Create(TglcBufferTarget.btArrayBuffer);
64 fVBO.BufferData(4, sizeof(TVertex), TglcBufferUsage.buStaticDraw, nil);
65 p := fVBO.MapBuffer(TglcBufferAccess.baWriteOnly);
67 p^.pos := gluVector3f(-0.5, -0.5, 0); inc(p);
68 p^.pos := gluVector3f( 0.5, -0.5, 0); inc(p);
69 p^.pos := gluVector3f( 0.5, 0.5, 0); inc(p);
70 p^.pos := gluVector3f(-0.5, 0.5, 0); inc(p);
76 procedure TMainForm.ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
82 procedure TMainForm.FormDestroy(Sender: TObject);
89 procedure TMainForm.RenderPanelResize(Sender: TObject);
91 if Assigned(fContext) then begin
92 glViewport(0, 0, RenderPanel.ClientWidth, RenderPanel.ClientHeight);
96 procedure TMainForm.Log(aSender: TObject; const aMsg: String);
98 LogLB.Items.Add(aMsg);
101 procedure TMainForm.Render;
103 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
108 glEnableVertexAttribArray(LAYOUT_LOCATION_POS);
109 glVertexAttribPointer(LAYOUT_LOCATION_POS, 3, GL_FLOAT, False, 0, nil);
111 glDrawArrays(GL_QUADS, 0, fVBO.DataCount);
113 glDisableVertexAttribArray(LAYOUT_LOCATION_POS);
118 fContext.SwapBuffers;