- 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;