如果我们有几个OpenGL上下文,每个都在自己的进程中,驱动程序会以某种方式虚拟设备,以便每个程序都认为它只运行GPU。也就是说,如果一个程序调用{{1}},另一个程序将永远不会注意到它。
这可以通过大量glEnable
调用以保存状态及其对应物以便在之后恢复它来完成。显然,司机更有效率地做到了。但是,在用户空间中,我们需要跟踪我们对状态所做的更改并有选择地处理它们。也许这只是我遗漏了一些东西,但我认为为一个人调整一个帧缓冲区的视口会很好,然后将这些变化撤消到以前的状态。
也许有一种方法可以在一个程序中实现上下文切换的效果吗?
答案 0 :(得分:1)
也许有一种方法可以在一个程序中实现上下文切换的效果吗?
您可以在一个进程中根据需要创建任意数量的OpenGL上下文,并在它们之间切换。此外,对于现代GPU,OpenGL上下文的状态与GPU上实际发生的情况几乎没有相似之处。
答案 1 :(得分:1)
对于预核心OpenGL,glPushAttrib()
/glPopAttrib()
可以让你存储一些GL状态。
你可能最好还是编写自己的客户端状态阴影。
答案 2 :(得分:1)
状态机(和命令队列,如下所述)对每个上下文都是唯一的。它比你想象的要高得多;状态通常很好地包含在用户模式中。
对于单个进程中的上下文切换,请注意GL中的每个渲染上下文都是不同步的。在上下文切换期间生成隐式刷新,以帮助缓解此问题。只要上下文仅由单个线程使用,这通常就足够了,但可能会对性能产生负面影响。