procedure TForm1.Button1Click(Sender: TObject);
VAR
DemoStart, LastTime : DWORD;
ElapsedTime : INTEGER;
glslsimplevert,
glslsimplefrag : TGLSLShader;
glslsimpleprog : TGLSLProgram;
pfd : TPixelFormatDescriptor;
DC,RC : HDC;
tbm:tbitmap;
BEGIN
tbm:=tbitmap.create;
tbm.pixelformat:=pf24bit;
tbm.width:=form1.clientwidth;
tbm.height:=form1.clientheight;
InitOpenGL;
DC:=form1.canvas.handle;
//DC:=tbm.canvas.handle;
RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
// Erstellten Renderkontext aktivieren
ActivateRenderingContext(DC, RC);
ReadImplementationProperties;
ReadOpenGLCore;
//load simple glsl shader
glslsimpleprog := TGLSLProgram.Create();
glslsimplevert := TGLSLShader.Create('mandelbrot.vert');
glslsimplefrag := TGLSLShader.Create('mandelbrot.frag', GL_FRAGMENT_SHADER_ARB);
glslsimpleprog.Attach(glslsimplevert);
glslsimpleprog.Attach(glslsimplefrag);
glslsimpleprog.Link;
glslsimpleprog.Enable;
glslsimpleprog.Set2F('mouse',320,240);
glslsimpleprog.Set2F('resolution',form1.clientwidth,form1.clientheight);
demostart:=gettickcount;
elapsedtime:=1;
WHILE GetAsyncKeyState ( 27 ) = 0 DO
BEGIN
glslsimpleprog.setf('time', elapsedtime/640);
glLoadIdentity;
glBegin ( GL_QUADS );
glTexCoord2f ( 0.0, 0.0 ); glVertex3f ( -320, -240, 0 );
glTexCoord2f ( 1.0, 0.0 ); glVertex3f ( 320, -240, 0 );
glTexCoord2f ( 1.0, 1.0 ); glVertex3f ( 320, 240, 0 );
glTexCoord2f ( 0.0, 1.0 ); glVertex3f ( -320, 240, 0 );
glEnd;
LastTime := ElapsedTime;
{ Calculate Elapsed Time }
ElapsedTime := GetTickCount - DemoStart;
{ average it out for smoother movement }
ElapsedTime := ( LastTime + ElapsedTime ) DIV 2;
SwapBuffers ( DC );
//form1.canvas.draw(0,0,tbm);
END;
application.terminate;
end;