SFML双窗口共享OpenGL上下文仅单窗口显示三角形问题求助
SFML共享OpenGL上下文多窗口渲染异常问题解决
问题现象
使用SFML创建两个共享OpenGL上下文的窗口时,仅其中一个窗口能显示三角形,另一个仅显示纯色背景。三角形的显示窗口完全由window.setActive(true)的调用对象决定——切换激活的窗口后,三角形会随之切换到新激活的窗口显示。
问题原因
VAO(顶点数组对象)属于OpenGL上下文的不可共享资源,即使多个窗口共享同一上下文的其他资源(如VBO、着色器程序),每个窗口也需要拥有独立的VAO实例。原代码中仅在一个窗口的上下文中创建了VAO,其他窗口的上下文无法复用这个VAO,导致无法正确渲染图形。
解决方案
为每个窗口单独创建并配置专属的VAO:
- 对每个窗口,先调用
windowX.setActive(true)激活其对应的OpenGL上下文 - 在激活的上下文中,创建新的VAO对象,完成绑定VBO、设置顶点属性指针等初始化操作
- 渲染阶段,激活目标窗口的上下文后,绑定该窗口对应的VAO,再执行
glDraw*绘制命令
内容的提问来源于stack exchange,提问作者Nandu Krishna
相关产品推荐
相关产品推荐

