Strategy for sharing OpenGL resources

戏子无情 提交于 2019-12-22 05:41:17

问题


I'm creating a CAD-like app (Qt-based), it will be a multiple document interface and each document will contain about 5 viewports (derived from QGLWidget). As such I need my flat shader to be shared across the entire application, and then the 3D assets (models stored as VBOs) to be shared across each document i.e. the 5 viewports.

I thought as long as I shared around the shader program and VBO GLuint addresses all will automagickly work - it doesn't. I think because each viewport/context has it's own address space on the graphics card, if anyone knows better please inform!

I would like to have the shader compiled on application start, but this is proving difficult as I need a valid QGLWidget to get OpenGL into a valid state beforehand. But as I need to share the QGLWidgets (through their constructor) to have them share resources, one needs to be created and shown before the others can be instantiated. But this is highly impractical as multiple views to be shown at once to the user.

This must be easier than I'm making out because it's hardly groundbreaking stuff, but I am really struggling - can anyone point me in the right direction?

Thanks, Cam


回答1:


Here's what usual CAD/MDI applications are doing:

  • they create a shared context that serves for well, sharing resources.

  • they use wglShareLists when creating a new OpenGL rendering context for giving access to the resource ids of the shared context.

wglShareLists can be used for sharing VBOs, textures, shaders, etc, not only display lists (sharing DLs is the legacy usage, hence the function name).

I don't remember if you need to create resources with the shared context or if you can create them on any contexts.

If you're not on windows, see glXCreateContext. That should put you on track.

Edit:

I've looked at Qt, it looks like it's abstracted with member QGLContext::create.



来源:https://stackoverflow.com/questions/4360665/strategy-for-sharing-opengl-resources

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!