| @@ -36,8 +36,14 @@ type | |||
| protected | |||
| procedure OpenContext; override; | |||
| public | |||
| constructor Create(const aControl: TWinControl; const aPixelFormatSettings: TglcContextPixelFormatSettings); override; overload; | |||
| constructor Create(const aControl: TWinControl; const aPixelFormatSettings: TglcContextPixelFormatSettings; const aVersionSettings: TglcContextVersionSettings); override; overload; | |||
| constructor Create(const aControl: TWinControl; | |||
| const aPixelFormatSettings: TglcContextPixelFormatSettings; | |||
| const aShareContext: TglcContext = nil); overload; override; | |||
| constructor Create(const aControl: TWinControl; | |||
| const aPixelFormatSettings: TglcContextPixelFormatSettings; | |||
| const aVersionSettings: TglcContextVersionSettings; | |||
| const aShareContext: TglcContext = nil); overload; override; | |||
| destructor Destroy; override; | |||
| procedure CloseContext; override; | |||
| @@ -46,7 +52,6 @@ type | |||
| function IsActive: boolean; override; | |||
| procedure SwapBuffers; override; | |||
| procedure SetSwapInterval(const aInterval: GLint); override; | |||
| procedure Share(const aContext: TglcContext); override; | |||
| class function ChangeDisplaySettings(const aWidth, aHeight, | |||
| aBitPerPixel, aFreq: Integer; const aFlags: TglcDisplayFlags): Boolean; override; | |||
| @@ -420,6 +425,7 @@ end; | |||
| procedure TglcContextGtk2GLX.OpenContext; | |||
| var | |||
| share: GLXContext; | |||
| Attribs: array of GLint; | |||
| tmpContext: GLXContext; | |||
| glxID: GLXDrawable; | |||
| @@ -429,7 +435,14 @@ begin | |||
| if not Assigned(FVisual) then | |||
| raise EGLXError.Create('Failed to find Visual'); | |||
| tmpContext := glXCreateContext(FDisplay, FVisual, nil, true); | |||
| share := nil; | |||
| if Assigned(ShareContext) then begin | |||
| if (ShareContext.ClassName <> ClassName) then | |||
| raise Exception.Create('share context has invalid type: ' + ShareContext.ClassName); | |||
| share := (ShareContext as TglcContextGtk2GLX).FContext; | |||
| end; | |||
| tmpContext := glXCreateContext(FDisplay, FVisual, share, true); | |||
| if fUseVersion and | |||
| (fVersionSettings.Major <> GLC_CONTEXT_VERSION_UNKNOWN) and | |||
| (fVersionSettings.Minor <> GLC_CONTEXT_VERSION_UNKNOWN) then | |||
| @@ -461,7 +474,7 @@ begin | |||
| glXDestroyContext(FDisplay, tmpContext); | |||
| raise Exception.Create('GLX_ARB_create_context not supported'); | |||
| end; | |||
| FContext := glXCreateContextAttribsARB(FDisplay, FVisual, nil, true, @Attribs[0]); | |||
| FContext := glXCreateContextAttribsARB(FDisplay, FVisual, share, true, @Attribs[0]); | |||
| glXDestroyContext(FDisplay, tmpContext); | |||
| end else | |||
| @@ -472,17 +485,19 @@ begin | |||
| end; | |||
| constructor TglcContextGtk2GLX.Create(const aControl: TWinControl; | |||
| const aPixelFormatSettings: TglcContextPixelFormatSettings); | |||
| const aPixelFormatSettings: TglcContextPixelFormatSettings; | |||
| const aShareContext: TglcContext); | |||
| begin | |||
| inherited Create(aControl, aPixelFormatSettings); | |||
| inherited Create(aControl, aPixelFormatSettings, aShareContext); | |||
| UpdateVisual(aControl); | |||
| end; | |||
| constructor TglcContextGtk2GLX.Create(const aControl: TWinControl; | |||
| const aPixelFormatSettings: TglcContextPixelFormatSettings; | |||
| const aVersionSettings: TglcContextVersionSettings); | |||
| const aVersionSettings: TglcContextVersionSettings; | |||
| const aShareContext: TglcContext); | |||
| begin | |||
| inherited Create(aControl, aPixelFormatSettings, aVersionSettings); | |||
| inherited Create(aControl, aPixelFormatSettings, aVersionSettings, aShareContext); | |||
| UpdateVisual(aControl); | |||
| end; | |||
| @@ -513,6 +528,7 @@ begin | |||
| // make current | |||
| glxID := GDK_DRAWABLE_XID(GTK_WIDGET(FWidget)^.window); | |||
| glXMakeCurrent(FDisplay, glxID, FContext); | |||
| inherited Activate; | |||
| end; | |||
| procedure TglcContextGtk2GLX.Deactivate; | |||
| @@ -552,11 +568,6 @@ begin | |||
| glXSwapIntervalEXT(FDisplay, GDK_WINDOW_XWINDOW(drawable), aInterval); | |||
| end; | |||
| procedure TglcContextGtk2GLX.Share(const aContext: TglcContext); | |||
| begin | |||
| raise Exception.Create('not yet implemented'); | |||
| end; | |||
| class function TglcContextGtk2GLX.{%H-}ChangeDisplaySettings(const aWidth, aHeight, | |||
| aBitPerPixel, aFreq: Integer; const aFlags: TglcDisplayFlags): Boolean; | |||
| begin | |||