Необоснованные навороты - это модуль dglOpenGL?
Я думал, что это может быть из-за него, но функции в этом модуле, как правило, повторяют основные рекомендации и уроки по openGL:
Код:
function CreateRenderingContext(DC: HDC; Options: TRCOptions; ColorBits, ZBits, StencilBits, AccumBits, AuxBuffers: Integer; Layer: Integer): HGLRC;
const
OBJ_MEMDC = 10;
OBJ_ENHMETADC = 12;
OBJ_METADC = 4;
PFD_DOUBLEBUFFER = $00000001;
PFD_STEREO = $00000002;
PFD_DRAW_TO_WINDOW = $00000004;
PFD_DRAW_TO_BITMAP = $00000008;
PFD_SUPPORT_GDI = $00000010;
PFD_SUPPORT_OPENGL = $00000020;
PFD_TYPE_RGBA = 0;
PFD_MAIN_PLANE = 0;
PFD_OVERLAY_PLANE = 1;
PFD_UNDERLAY_PLANE = LongWord(-1);
MemoryDCs = [OBJ_MEMDC, OBJ_METADC, OBJ_ENHMETADC];
var
PFDescriptor: TPixelFormatDescriptor;
PixelFormat: Integer;
AType: DWORD;
begin
if GL_LibHandle = nil then
InitOpenGL;
FillChar(PFDescriptor, SizeOf(PFDescriptor), 0);
with PFDescriptor do
begin
nSize := SizeOf(PFDescriptor);
nVersion := 1;
dwFlags := PFD_SUPPORT_OPENGL;
AType := GetObjectType(DC);
if AType = 0 then
RaiseLastOSError;
if AType in MemoryDCs then
dwFlags := dwFlags or PFD_DRAW_TO_BITMAP
else
dwFlags := dwFlags or PFD_DRAW_TO_WINDOW;
if opDoubleBuffered in Options then
dwFlags := dwFlags or PFD_DOUBLEBUFFER;
if opGDI in Options then
dwFlags := dwFlags or PFD_SUPPORT_GDI;
if opStereo in Options then
dwFlags := dwFlags or PFD_STEREO;
iPixelType := PFD_TYPE_RGBA;
cColorBits := ColorBits;
cDepthBits := zBits;
cStencilBits := StencilBits;
cAccumBits := AccumBits;
cAuxBuffers := AuxBuffers;
if Layer = 0 then
iLayerType := PFD_MAIN_PLANE
else
if Layer > 0 then
iLayerType := PFD_OVERLAY_PLANE
else
iLayerType := Byte(PFD_UNDERLAY_PLANE);
end;
PixelFormat := ChoosePixelFormat(DC, @PFDescriptor);
if PixelFormat = 0 then
RaiseLastOSError;
if GetPixelFormat(DC) <> PixelFormat then
if not SetPixelFormat(DC, PixelFormat, @PFDescriptor) then
RaiseLastOSError;
DescribePixelFormat(DC, PixelFormat, SizeOf(PFDescriptor), PFDescriptor);
Result := wglCreateContext(DC);
if Result = 0 then
RaiseLastOSError
else
LastPixelFormat := 0;
end;
Код:
procedure ActivateRenderingContext(DC: HDC; RC: HGLRC; loadext: boolean = true);
begin
Assert((DC <> 0), 'DC must not be 0');
Assert((RC <> 0), 'RC must not be 0');
wglMakeCurrent(DC, RC);
{$ifdef DGL_TINY_HEADER}
ReadCoreVersion;
{$else}
ReadImplementationProperties;
if (loadext) then
ReadExtensions;
{$endif}
end;
Код:
procedure DeactivateRenderingContext;
begin
wglMakeCurrent(0, 0);
end;
Код:
procedure DestroyRenderingContext(RC: HGLRC);
begin
wglDeleteContext(RC);
end;
Кто на Delphi 7 делал, у вас нормально всё работает?