- ...
- type
- TForm1 = class(TForm)
- ...
- private
- { Private declarations }
- DC,
- RC: Cardinal;
- fbo, depthbuffer, tex: GLuint;
- procedure Render;
- procedure CheckFBO;
- end;
- var
- Form1: TForm1;
- implementation
- ...
- 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);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_TEXTURE_2D);
- glGenFramebuffersEXT(1, @fbo);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
- glGenRenderbuffersEXT(1, @depthbuffer);
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer);
- glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, 512, 512);
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer);
- glGenTextures(1, @tex);
- glBindTexture(GL_TEXTURE_2D, tex);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D, tex, 0);
- CheckFBO;
- end;
- procedure TForm1.Render;
- begin
- // via fbo in textur rendern
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
- glPushAttrib(GL_VIEWPORT_BIT);
- glViewPort(0, 0, 512, 512);
- glColor3f(1,0,1);
- glBegin(GL_QUADS);
- glVertex2f(100,100);
- glVertex2f(500,100);
- glVertex2f(500,500);
- glVertex2f(100,500);
- glEnd;
- glPopAttrib;
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- //normal rendern
- glBindTexture(GL_TEXTURE_2D, tex);
- glCOlor3f(1,1,1);
- glBegin(GL_QUADS);
- glTexCoord2f(0,0);glVertex2f(100,100);
- glTexCoord2f(1,0);glVertex2f(200,100);
- glTexCoord2f(1,1);glVertex2f(200,200);
- glTexCoord2f(0,1);glVertex2f(100,200);
- glEnd;
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- glViewport(0, 0, ClientWidth, ClientHeight);
- glOrtho(0, ClientWidth, ClientHeight, 0, 0, 100);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- Render();
- SwapBuffers(DC);
- Caption:= gluErrorString(glGetError);
- end;
- ...