微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SDL 2.0:在主线程中创build窗口,但在单独的窗口中进行所有的渲染

这是我目前的设置:我正在使用SDL(目前在Linux上)进行OpenGL渲染。 我初始化SDL( SDL_Init )并在主线程中创build应用程序窗口( SDL_CreateWindow )并将其传递给第二个线程。 第二个线程从它创build一个OpenGL上下文( SDL_GL_CreateContext )并启动一个渲染循环,而主线程监听事件。 我认为重要的是要注意,GL调用完全局限于第二个线程。 实际上我的大部分应用程序逻辑发生在那里,主线程只负责处理通过SDL发送的事件。

原来我反过来这样做,但事实certificate,你不能处理除了OSX的主线程以外的任何事件,也可能是Windows,所以我将它切换到兼容这两个在未来。

我有什么担心,这将无法在OSX / Windows上工作? 在Linux上,我什么都没有。 互联网上有很多关于上下文共享和multithreadingGL调用的信息,但是我想要做的只是在一个不是主线程的线程中执行OpenGL。 我不想继续编写我的应用程序,后来发现它不会在其他地方工作。

Linux,C:几秒钟后终止multithreading(timer?)

Java线程和本地Linux线程之间的匹配

我怎样才能从一个单独的线程处理窗口消息?

Javamultithreading在Windows中工作,但不在Ubuntu中

如何使线程同步,而不使用互斥,semorphore,spinLock和futex?

如何执行一个新的线程在Linux上的新terminal?

如何使方法运行在“后台”(线程?)

外部进程与线程和数据处理

系统API来查看线程何时处于活动状态

multithreading和多进程的性能差异

我有一个在Mac / iOS / Windows上运行的应用程序(在渲染线程中的所有GL),但是我不使用SDL。

我只是看了一下SDL的Cocoa_GL_CreateContext (在OS X上由SDL_GL_CreateContext调用),它调用我从主线程创建的上下文。

因此,如果遇到任何问题,请尝试在主线程中创建GL上下文,然后将其传递给呈现线程(而不是在呈现线程中创建GL上下文)。

OpenGL和多线程基本上是敌人:在任何时候只有一个线程可以“拥有渲染上下文” – 是的,每当线程切换时,您都可以切换GL渲染上下文,但考虑成本,并考虑到,从一个OEM驱动程序到下一个,它不是很好的支持,可能会为一些人,而不是其他人。 唯一合乎逻辑的(也是理智的)选择是将所有的OpenGL调用保存到一个线程中(注意:有例外,任何线程都可以在gl中调用,涉及流数据,而不需要拥有渲染上下文) 。 不幸的是,我们不能简单地按照建议在线程周围传递GL上下文,我们必须调用(w)glMakeCurrent,它告诉GL“这个调用者线程现在拥有你”,但是不能告诉其他线程…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐