mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-11 13:19:21 +02:00
Merge branch 'gtk1-fix-opengl-control' into 'main'
LCL-GTK1: Fix OpenGL control compilation and functionality See merge request freepascal.org/lazarus/lazarus!253
This commit is contained in:
commit
50ae771c15
@ -102,11 +102,6 @@ function gtk_gl_area_make_current(glarea: PGtkGLArea): boolean;
|
|||||||
function gtk_gl_area_begingl(glarea: PGtkGLArea): boolean;
|
function gtk_gl_area_begingl(glarea: PGtkGLArea): boolean;
|
||||||
procedure gtk_gl_area_swap_buffers(gl_area: PGtkGLArea);
|
procedure gtk_gl_area_swap_buffers(gl_area: PGtkGLArea);
|
||||||
|
|
||||||
{$IFDEF lclgtk}
|
|
||||||
function gdk_x11_get_default_xdisplay:PDisplay;cdecl;external;
|
|
||||||
function gdk_x11_get_default_screen:gint;cdecl;external;
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
procedure LOpenGLViewport({%H-}Handle: HWND; Left, Top, Width, Height: integer);
|
procedure LOpenGLViewport({%H-}Handle: HWND; Left, Top, Width, Height: integer);
|
||||||
procedure LOpenGLSwapBuffers(Handle: HWND);
|
procedure LOpenGLSwapBuffers(Handle: HWND);
|
||||||
function LOpenGLMakeCurrent(Handle: HWND): boolean;
|
function LOpenGLMakeCurrent(Handle: HWND): boolean;
|
||||||
@ -599,7 +594,7 @@ begin
|
|||||||
Result:=PGtkWidget(gl_area);
|
Result:=PGtkWidget(gl_area);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CustomXErrorHandler({%H-}para1:PDisplay; para2:PXErrorEvent):cint;cdecl;
|
function CustomXErrorHandler({%H-}para1:XLib.PDisplay; para2:PXErrorEvent):cint;cdecl;
|
||||||
begin
|
begin
|
||||||
if para2^.error_code=8 then begin
|
if para2^.error_code=8 then begin
|
||||||
raise Exception.Create('A BadMatch X error occurred. Most likely the requested OpenGL version is invalid.');
|
raise Exception.Create('A BadMatch X error occurred. Most likely the requested OpenGL version is invalid.');
|
||||||
@ -634,8 +629,13 @@ begin
|
|||||||
ShareList:=nil;
|
ShareList:=nil;
|
||||||
if share<>nil then ShareList:=share^.glcontext;
|
if share<>nil then ShareList:=share^.glcontext;
|
||||||
PrivateShareList:=PGdkGLContextPrivate(ShareList);
|
PrivateShareList:=PGdkGLContextPrivate(ShareList);
|
||||||
|
{$IFDEF LCLGTK}
|
||||||
|
XDisplay:=gdk_display;
|
||||||
|
ScreenNum:=gdk_screen;
|
||||||
|
{$ELSE}
|
||||||
XDisplay:=gdk_x11_get_default_xdisplay;
|
XDisplay:=gdk_x11_get_default_xdisplay;
|
||||||
ScreenNum:=gdk_x11_get_default_screen;
|
ScreenNum:=gdk_x11_get_default_screen;
|
||||||
|
{$ENDIF}
|
||||||
if GLX_version_1_3(XDisplay) then begin
|
if GLX_version_1_3(XDisplay) then begin
|
||||||
{ use approach recommended since glX 1.3 }
|
{ use approach recommended since glX 1.3 }
|
||||||
FBConfigsCount:=0;
|
FBConfigsCount:=0;
|
||||||
@ -718,20 +718,19 @@ begin
|
|||||||
if GLXContext=nil then
|
if GLXContext=nil then
|
||||||
raise Exception.Create('gdk_gl_context_share_new_usefpglx context creation failed');
|
raise Exception.Create('gdk_gl_context_share_new_usefpglx context creation failed');
|
||||||
|
|
||||||
|
{$IFNDEF LCLGTK}
|
||||||
ColorMap:=gdk_colormap_get_system;
|
ColorMap:=gdk_colormap_get_system;
|
||||||
Visual:=gdk_colormap_get_visual(ColorMap);
|
Visual:=gdk_colormap_get_visual(ColorMap);
|
||||||
if XVisualIDFromVisual(
|
if XVisualIDFromVisual(GDK_VISUAL_XVISUAL(visual)) <> XVInfo^.visualid then begin
|
||||||
GDK_VISUAL_XVISUAL({$IFDEF LCLGTK}PGdkVisualPrivate(visual)
|
|
||||||
{$ELSE}visual
|
|
||||||
{$ENDIF}))
|
|
||||||
<>XVInfo^.visualid
|
|
||||||
then begin
|
|
||||||
Visual:=gdkx_visual_get(XVInfo^.visualid);
|
Visual:=gdkx_visual_get(XVInfo^.visualid);
|
||||||
ColorMap:=gdk_colormap_new(Visual, {$IFDEF LCLGTK2}gFALSE{$ELSE}0{$ENDIF});
|
ColorMap:=gdk_colormap_new(Visual, gFALSE);
|
||||||
end;
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
GLArea:=gtk_type_new(gtk_gl_area_get_type);
|
GLArea:=gtk_type_new(gtk_gl_area_get_type);
|
||||||
|
{$IFNDEF LCLGTK}
|
||||||
gtk_widget_set_colormap(PGtkWidget(@GLArea^.darea), ColorMap);
|
gtk_widget_set_colormap(PGtkWidget(@GLArea^.darea), ColorMap);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
PrivateContext:=g_new(SizeOf(TGdkGLContextPrivate), 1);
|
PrivateContext:=g_new(SizeOf(TGdkGLContextPrivate), 1);
|
||||||
PrivateContext^.xdisplay:=XDisplay;
|
PrivateContext^.xdisplay:=XDisplay;
|
||||||
|
@ -29,7 +29,9 @@ unit OpenGLContext;
|
|||||||
{$DEFINE UseGtkGLX}
|
{$DEFINE UseGtkGLX}
|
||||||
{$DEFINE HasRGBA}
|
{$DEFINE HasRGBA}
|
||||||
{$DEFINE HasRGBBits}
|
{$DEFINE HasRGBBits}
|
||||||
|
{$DEFINE HasDebugContext}
|
||||||
{$DEFINE OpenGLTargetDefined}
|
{$DEFINE OpenGLTargetDefined}
|
||||||
|
{$DEFINE UsesModernGL}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$IFDEF LCLGTK2}
|
{$IFDEF LCLGTK2}
|
||||||
|
Loading…
Reference in New Issue
Block a user