使用LCL创建SDL视口

使用LCL创建SDL视口,sdl,lazarus,Sdl,Lazarus,我在Lazarus中使用SDL来创建opengl上下文和查询输入。这很好,但现在我想做一个LCL组件,它应该是跨平台的。在我使用SDL_CreateWindow之前,它为我创建了一个没有LCL的窗口 编辑:问题已部分解决,请参见下面的评论 现在,对于第一个测试,我尝试使用SDL_CreateWindowFrom将TForm与SDL一起使用。它需要某种类型的窗口句柄作为参数。但是,下面的源代码只会导致程序在Linux(Lazarus 1.4.0-FPC2.6.4-SDL2.0.3)下无任何错误地退

我在Lazarus中使用SDL来创建opengl上下文和查询输入。这很好,但现在我想做一个LCL组件,它应该是跨平台的。在我使用SDL_CreateWindow之前,它为我创建了一个没有LCL的窗口

编辑:问题已部分解决,请参见下面的评论

现在,对于第一个测试,我尝试使用SDL_CreateWindowFrom将TForm与SDL一起使用。它需要某种类型的窗口句柄作为参数。但是,下面的源代码只会导致程序在Linux(Lazarus 1.4.0-FPC2.6.4-SDL2.0.3)下无任何错误地退出

程序TForm1.FormClick(发送方:TObject);
变量
DC:HDC;
H:HWND;
WND:PSDL_窗口;
开始
SDL_Init(SDL_Init_视频);
H:=手柄;
DC:=GetDC(格式1.句柄);
WND:=SDL_CreateWindowFrom(指针(H))//这两行中的任何一行。。。
WND:=SDL_CreateWindowFrom(指针(DC))//导致程序崩溃
标题:=SDL_GetError();//这一点永远不会达到
结束;
我创建窗口的第二行只是一个测试,因为第一行不起作用。 但是,这似乎是在Windows下使用Delphi进行此操作的正常方式:

在Lazarus中,TWinControl.Handle似乎不同于Delphi的TWinControl.Handle,因为它需要跨平台。 例如:
但是我不知道如何为所有平台获得SDL兼容的句柄。

我部分解决了这个问题:使用
PGdkPrivateWindow(PGtkWidget(handle)^.window)^.XID
我可以为窗口()获得正确的句柄。但是我不能创建OpenGL渲染上下文,因为我得到了一个错误:不是OpenGL窗口。我现在使用的是一个旧版本的GLContext,但是它不支持MacOS,并且链接已关闭()。我也发现了这一点:他们也有同样的问题,并设法修补了sdl2,使他们的窗口能够使用opengl。然而,他们似乎没有提供补丁或作出错误报告。