Ich beschäftige mich gerade mit OpenGL bin da aber noch ein rechter Anfänger. Jedoch treffe ich bereits auf ein für mich unlösbares Problem: egal wie simpel ich meine OGL-Anwendung gestalte(also z.b. nur ein Quad rendere) allokiert das Programm immer mehr RAM bis zu einer Obergrenze von 2GB(!!) daraufhin stürzt es dann ab. Der Prozess bis die genannten 2GB erreicht werden dauert unterschiedlich lange, dies hängt auch damit zusammen, dass es "Rücksprünge" im allokierten Arbeitsspeicher gibt. Bisher konnte ich feststellen, dass ein Aufruf von glClear() den oben beschrieben Prozess signifikant beschleunigt. Mein System: Nvidia 540gtm 2GB, 8GB RAM und Windows 7 64 bit desweiteren verwende ich den OGL Header von delphigl. Ich poste hier noch "meinen" (der einfachheit halber ist dieser aus einem Tutorial von delphigl übernommen) Source.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
DC:= GetDC(Form1.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);
glEnable(GL_DEPTH_TEST);
Application.OnIdle := @Idle;
end;
procedure TForm1.Idle(Sender: TObject; var Done: Boolean);
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0, 0, -5);
glBegin(GL_QUADS);
glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
glEnd;
SwapBuffers(DC);
Done := False;
end;