使用 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获取设备上下文

OpenGL 渲染上下文-context

在 OpenGL 中渲染 QWidget

您可以同时创建多少个 OpenGL 渲染上下文是不是有限制?

您可以同时创建多少个 OpenGL 渲染上下文是不是有限制?

Opengl:渲染到 Win32 API 上下文