Einzelnen Beitrag anzeigen

KlausJakob

Registriert seit: 30. Jun 2014
11 Beiträge
 
#1

Framebuffer in eine BitMap unter openGL

  Alt 15. Jun 2017, 11:53
Guten Tag,
ich möchte unter Delphi/ openGL den Framebuffer (Grafik auf dem Screen) direkt in eine BitMap schaufeln - nicht über den Umweg zur Festplatte.
Den nachfolgenden -modifizierten- Code habe ich aus dem Internet - Dank an den Verfasser.
Leider zeigt die Routine glReadPixel beim Programmlauf eine "Zugriffsverletzung" an.

Frage an die Community:
Wie muss der nachfolgende Code korrigiert werden ?

Vielen Dank
KlausJakob

////////////////////////////////////////////////////

procedure screentobitmap(var name:TBitMap);
var
pixels:Array of Byte;
viewport:Array [0 .. 3] of Integer;
mstream:TMemoryStream;
begin
mstream:=TMemoryStream.Create;

name.PixelFormat:=pf32bit;
glGetIntegerv(GL_VIEWPORT,@viewport);
name.Width:=viewport[2];
name.Height:=viewport[3];

try
SetLength(pixels,viewport[2]*viewport[3]*4);
glReadPixels(0,0,viewport[2],viewport[3],GL_BGRA,GL_UNSIGNED_BYTE,@pixels);
// glReadPixels erzeugt "Zugriffsverletzung" ???????????
mstream.Read(pixels,viewport[2]*viewport[3]*4);
name.LoadFromStream(mstream);
finally
mstream.Free;
end;
end;

//////////////////////////////////////////////////////////////////////////
  Mit Zitat antworten Zitat