使用 OpenGL 不渲染 --> 上下文
Posted
技术标签:
【中文标题】使用 OpenGL 不渲染 --> 上下文【英文标题】:no-render with OpenGL --> contexts 【发布时间】:2011-09-21 19:16:43 【问题描述】:我有一个程序可以使用可选的 OpenGL 渲染进行一些 GPU 计算。 使用动态如下:
-
init 函数(init GLEW 是最相关的)。
将网格从文件加载到 GPU(使用 glGenBuffers 是制作 VBO 的相关函数)。
并行处理此网格(GPU 计算 API)。
将网格保存到文件中。
我的问题是,当网格加载时,我使用 opengl 调用并且没有创建上下文,我只是 得到分段错误。
编辑:问题的演变:
-
我缺少 GL/glx.h 我认为 GL/glxew.h 包含它,这要感谢已修复的答案。
我缺少 glXMakeCurrent;因此它的上下文为零。
修复此问题后,它可以工作了:)。
也感谢您提供的工具建议,我很乐意使用它们,只是我需要针对这种特殊情况的低级代码。
【问题讨论】:
注意:这不是论坛;在接受解决方案后,我们不会输入“SOLVED”。我们可以从解决方案旁边的绿色复选框中看到解决方案已被接受;) 【参考方案1】:我尝试使用此代码创建上下文(我正在使用 glew,因此我将标头更改为 GL/glxew.h 但此代码的其余部分保持不变)
不要这样做。 glxew
用于加载 glx 函数。你可能不需要它。
如果您想使用 GLEW,请将 GL/gl.h
替换为 GL/glew.h
保留 GL/glx.h
原样。
X11 和 GLX 相当复杂,请考虑改用 sdl 或 glfw。
【讨论】:
感谢您的澄清,即使我知道 glew 是 gl 的扩展牧马人,我仍认为 glxew 做了 glx 的功能等等。 我更改了 GL/glx.h 的标头,现在确实创建了上下文,但是在使用 gl 缓冲区函数时我仍然收到错误。 @Cristobal:确保glewInit
正在返回 GLEW_OK
并且您的 OpenGL 驱动程序实际上支持 VBO。【参考方案2】:
只是在这里疯狂地猜测,但 GLEW 是否使用自定义的东西重新定义了 glXChooseFBConfig? glXChooseFBConfig 调用中的某些内容取消了对无效指针的引用。所以要么 glXChooseFBConfig 本身无效,要么 fbcount 太小,要么 visual_attribs 没有正确终止。
【讨论】:
我认为这是问题之一,我现在更近了一步。更新了问题【参考方案3】:GLEW 与上下文创建无关。它是一个OpenGL加载库;它加载 OpenGL 函数。它需要你有一个 OpenGL 上下文才能运行。
由于您并没有真正使用此上下文来绘制内容,因此我建议您使用现成的工具来创建上下文。 GLFW 或 FreeGLUT 将是最轻量级的替代品。只需使用它们创建一个上下文,做你需要做的,然后销毁它们创建的窗口。
【讨论】:
也感谢您的澄清,我得到了关于这个问题的更新(也关于我为什么要避免使用高级工具)以上是关于使用 OpenGL 不渲染 --> 上下文的主要内容,如果未能解决你的问题,请参考以下文章
您可以同时创建多少个 OpenGL 渲染上下文是不是有限制?