mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 17:39:20 +02:00
Merge branch 'qt5-share-opengl' into 'main'
qt5: Allow sharing OpenGL context data between instances of TOpenGLControl See merge request freepascal.org/lazarus/lazarus!95
This commit is contained in:
commit
188d3cdd8a
@ -315,6 +315,7 @@ var
|
|||||||
{$IFDEF VerboseMultiSampling}
|
{$IFDEF VerboseMultiSampling}
|
||||||
samp_buf, visual_id, red_size, blue_size, green_size, alpha_size: integer;
|
samp_buf, visual_id, red_size, blue_size, green_size, alpha_size: integer;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
SharedContext: TGLXContext;
|
||||||
begin
|
begin
|
||||||
if WSPrivate=nil then ;
|
if WSPrivate=nil then ;
|
||||||
AttrList.AttributeList := CreateOpenGLContextAttrList(DoubleBuffered,RGBA,RedBits,GreenBits,BlueBits,AlphaBits,DepthBits,StencilBits,AUXBuffers, MultiSampling);
|
AttrList.AttributeList := CreateOpenGLContextAttrList(DoubleBuffered,RGBA,RedBits,GreenBits,BlueBits,AlphaBits,DepthBits,StencilBits,AUXBuffers, MultiSampling);
|
||||||
@ -356,6 +357,14 @@ begin
|
|||||||
NewQtWidget.GetGLXDrawable;
|
NewQtWidget.GetGLXDrawable;
|
||||||
|
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{ SharedContext will be passed to various glX routines,
|
||||||
|
to enable sharing OpenGL resources with SharedControl. }
|
||||||
|
if SharedControl <> nil then
|
||||||
|
SharedContext := TQtGLWidget(SharedControl.Handle).GLXContext
|
||||||
|
else
|
||||||
|
SharedContext := nil;
|
||||||
|
|
||||||
{$IFDEF ModernGL}
|
{$IFDEF ModernGL}
|
||||||
if GLX_version_1_3(NewQtWidget.xdisplay) then
|
if GLX_version_1_3(NewQtWidget.xdisplay) then
|
||||||
begin
|
begin
|
||||||
@ -455,21 +464,13 @@ begin
|
|||||||
Context3X[4] := GLX_CONTEXT_FLAGS_ARB;
|
Context3X[4] := GLX_CONTEXT_FLAGS_ARB;
|
||||||
Context3X[5] := AttrList.ContextFlags;
|
Context3X[5] := AttrList.ContextFlags;
|
||||||
Context3X[6] := None;
|
Context3X[6] := None;
|
||||||
//if (ShareList<>nil) then begin
|
NewQtWidget.glxcontext := glXCreateContextAttribsARB(NewQtWidget.xdisplay, FBConfig, SharedContext, direct, Context3X);
|
||||||
// NewQtWidget.glxcontext:=glXCreateContextAttribsARB(NewQtWidget.xdisplay, FBConfig,PrivateShareList^.glxcontext, direct, Context3X);
|
|
||||||
//end else begin
|
|
||||||
NewQtWidget.glxcontext := glXCreateContextAttribsARB(NewQtWidget.xdisplay, FBConfig, Nil, direct, Context3X);
|
|
||||||
//end;
|
|
||||||
//raise Exception.Create('key '+inttostr(BestFBConfig));
|
//raise Exception.Create('key '+inttostr(BestFBConfig));
|
||||||
// restore default error handler
|
// restore default error handler
|
||||||
XSetErrorHandler(nil);
|
XSetErrorHandler(nil);
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
//if (ShareList<>nil) then begin
|
NewQtWidget.glxcontext := glXCreateNewContext(NewQtWidget.xdisplay, FBConfig, GLX_RGBA_TYPE, SharedContext, direct);
|
||||||
// NewQtWidget.glxcontext:=glXCreateNewContext(NewQtWidget.xdisplay, FBConfig, GLX_RGBA_TYPE,PrivateShareList^.glxcontext, direct)
|
|
||||||
//end else begin
|
|
||||||
NewQtWidget.glxcontext := glXCreateNewContext(NewQtWidget.xdisplay, FBConfig, GLX_RGBA_TYPE, Nil, direct);
|
|
||||||
//end;
|
|
||||||
end;
|
end;
|
||||||
if FBConfigs<>nil then
|
if FBConfigs<>nil then
|
||||||
XFree(FBConfigs);
|
XFree(FBConfigs);
|
||||||
@ -477,7 +478,7 @@ begin
|
|||||||
end else
|
end else
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
NewQtWidget.glxcontext := glXCreateContext(NewQtWidget.xdisplay,
|
NewQtWidget.glxcontext := glXCreateContext(NewQtWidget.xdisplay,
|
||||||
NewQtWidget.visual, nil, direct);
|
NewQtWidget.visual, SharedContext, direct);
|
||||||
//123:
|
//123:
|
||||||
NewQtWidget.ref_count := 1;
|
NewQtWidget.ref_count := 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user