gpt4 book ai didi

c++ - 在无窗口 GLX 程序中读取 OpenGL 的默认帧缓冲区

转载 作者:行者123 更新时间:2023-11-30 01:40:24 24 4
gpt4 key购买 nike

我想在我的 Debian 机器上执行一些 3D 渲染并将结果存入客户端内存。

我创建了一个不需要窗口的基于 C++、GLX 和 GLEW 的应用程序。我用 glXOpenDisplay 得到一个显示器,用它通过 glXChooseFBConfig 找到合适的帧缓冲区(传递显示器的 DefaultScreen),用glXGetVisualFromFBConfig,并将相关信息传递给glXCreateContext。我使该上下文成为当前上下文并初始化 GLEW。

作为开始测试,我只是用各种颜色清除默认的帧缓冲区;我现在想逐个像素地查询结果,大概是使用 glReadPixels

但这就是我似乎从根本上误解了一些东西的地方:默认帧缓冲区的尺寸是多少?我从来没有为它定义初始高度或宽度,我也没有看到这样做的方法。

Answers such as this one暗示窗口“定义”了尺寸。在我的应用程序中,DefaultScreen 是否定义了尺寸?如果是这种情况,我该怎么做才能使默认帧缓冲区大于特别小的屏幕?

最佳答案

and pass the relevant information to glXCreateContext. I then initialize GLEW.

仅仅因为您拥有上下文并不意味着您可以立即使用它。考虑一下如果您有多个上下文会发生什么。在进行 OpenGL 调用之前,必须使用 glXMakeCurrentglXMakeContextCurrent 在当前线程上激活上下文。如果您查看这些函数的签名,您会发现除了 OpenGL 上下文之外,它们还将 Drawable 作为参数。所以你也需要它。

对于无窗口操作,GLX 提供 PBuffers,它提供无窗口可绘制对象。或者您可以使用未映射到屏幕的窗口。 PBuffers 允许在不使用帧缓冲区对象的情况下进行离屏渲染,但是使用它们的主帧缓冲区有点挑剔。我的建议是使用 0×0 大小的 PBuffer 和帧缓冲区对象。

关于c++ - 在无窗口 GLX 程序中读取 OpenGL 的默认帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com