问题标签 [glx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
351 浏览

c++ - 设置 GL 上下文时“帧缓冲区”的目的是什么?

此示例代码中,它在设置上下文之前处理帧缓冲区。

我已经阅读了函数的手册页,但我仍然不明白到底发生了什么。

所以我的问题是,GLX 中的帧缓冲区到底是什么,配置它的意义何在?

0 投票
2 回答
5293 浏览

xorg - IntelSandyBridge (Intel HD Graphics 3000) 上的“X 错误”BadAlloc GLX BadContext

我正在运行一个debian stableThinkPad X1 (1294-3QG),其中包含squeeze-backportsGraphicsModi 所需的三个包:

在运行该内核时,例如启动paraview会导致这些错误:

在网上的某个地方,我找到了在 中提供内存设置的提示xorg.conf,但这并没有解决我的问题。
在当前稳定的内核中启动工作正常。

运行glxgears结果类似:

xserver-xorg-video-intel我进一步尝试通过将(以及所有依赖项libdrm-intel1 libxfont1, xserver-common, xserver-xorg, xserver-xorg-core, xserver-xorg-input-evdev, xserver-xorg-video-fbdev和)更新到反向移植来解决问题xserver-xorg-video-vesa,但这并不成功。

另外,我找到了条目

在 的输出中dmesg

0 投票
2 回答
1404 浏览

opengl - Memory leak using glXCreateContext

I have created a class to initialize and clear Xlib and glx properly. 

Unfortunately, valgrind reports a memory leak.

Note that I’m using VirtualGL (which explains librrfaker.so). Is there something I did wrong? or should I assume this is a bug on VirtualGL’s side?

0 投票
1 回答
759 浏览

c++ - 当 VISUAL_ID 和 screen->root_visual 不相等时,glXCreateWindow 不起作用

我正在处理与此非常相似的代码:

http://xcb.freedesktop.org/opengl/

当我使用默认的帧缓冲区配置时它工作正常,尽管当我尝试查询某个它失败时。我已经确定它在任何时候都会失败VISUAL_IDvisualID在示例代码中)并且screen->root_visual是不同的值。

这是错误消息:

我能做些什么来解决这个问题?

0 投票
2 回答
868 浏览

c++ - 多线程环境中的 XSetWMProtocols 和 glXCreateContext 调用顺序

编辑:我在下面发布了一个很好的解决整个渲染器分离问题的方法。

我最近在多线程 X11 环境中使用 OpenGL。我找到了以下教程,它可以编译、链接并运行良好。

但是,在尝试根据自己的需要调整代码后,我遇到了一个奇怪的问题。

教程中XCreateWindow、glXCreateContext、XSelectInput、XSetWMProtocols的调用顺序如下:

请注意,XCreateWindow 和 XSelectInput/XSetWMProtocols 使用不同的显示连接。

但是,当更改调用顺序时

该程序失败

X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 2 (X_ChangeWindowAttributes)
Resource id in failed request: 0x5000002 Serial number of failed request: 17 Current serial number in output stream: 18

这似乎是由 XSetWMProtocols 引起的。

由于使用了不同的显示连接,如果整个事情一开始就不起作用,我不会感到惊讶。但不知何故,在调用 glXCreateContext 之后,一切似乎都神奇地好起来了。

我对 X11/GLX 编程比较陌生,我错过了什么吗?glXCreateContext 执行了什么样的魔法?还是发生了其他事情?或者也许我应该继续前进,因为 OpenGL 和多线程似乎总是会导致问题。

我的解决方案:

我很懒,只是使用教程中的方法。这一直有效,直到将 freetype 添加到我的项目中,这突然又给了我一个 BadWindow 崩溃。所以,即使一切看起来都很好,当你在不同的线程中工作时,X11 会在你不在的时候认真地处理一些内存。(不是我,我用 valgrind 检查过)

我目前的解决方案是 nm 评论的:我将所有内容都放入一个 GUI 线程(X11 和 GL/GLX 调用)中,其资源永远不可用于其他线程。但是,必须记住两件事,因为它可能会减慢渲染循环:

  • 缓慢的消息处理延迟渲染(如下 ilmale 所述)
  • 缓慢的渲染延迟消息处理(我担心)

第一个问题很容易解决。创建一个 stl deque 或列表或任何容器,您可以在其中为您的应用程序逻辑排队相关的 XEvent,然后从另一个线程中获取它们。只要确保您的 STL 是线程安全的,并且毫无疑问地实现您自己的队列。通过在容器大小上设置等待条件,您甚至可以模拟 XNextEvent 之类的阻塞调用。

第二个问题很棘手。您可能会争辩说,如果渲染器的速度为 1 fps 或更慢,那么游戏或应用程序无论如何都是无用的。那是真实的。但是,如果您能够处理一些终止信号(例如销毁窗口原子),即使您的速度为 0.1 fps,那将会很整洁。我能想到的唯一解决方案是在渲染每千个左右的精灵后检查新消息。将它们发送到您的容器并继续渲染。当然,在这种情况下,您永远不能让渲染线程随时运行用户脚本或其他未知代码。但我想,无论如何,这将使将渲染与其他线程分开的想法毫无意义。

希望这可以帮助。

0 投票
1 回答
1582 浏览

opengl - 支持 OpenGL 的虚拟机

我们有一个想要在虚拟机上编译、自动构建和自动测试的应用程序。虚拟机“提供者”必须能够跨平台,因为我们需要在 Windows 和多个 Linux 发行版上同时执行此操作。我们的应用程序依赖于 OpenGL,并且需要相当新版本的 OpenGL 才能正常工作。

我们在 Oracles Virtual Box 方面拥有不错的经验,我们可以通过一些努力来执行上述操作,因为我们可以通过主机进行硬件加速。然而,它有一定的局限性,因为它对主机要求很高,而且它并不适合同时运行的许多虚拟机。

因此,理想的解决方案可能是 Amazon EC2 云计算,但在这里我们遇到了“常见”问题,即我们可能能够轻松启动并运行 Linux 发行版(例如 Ubuntu),但遇到了非常困难的问题一旦我们想开始安装一些 OpenGL 驱动程序以便能够编译和测试我们的应用程序。即使是台面驱动程序也无法启动并运行到可以运行 glxinfo 或 glxgears 的程度。

我们不能成为唯一面临这个问题的人,那么其他人怎么办?

0 投票
2 回答
2460 浏览

c++ - 在 Ubuntu 中正确链接 GLX 库

我正在尝试编译其中一种 X11 + OpenGL 组合,但我对编译器不满意。特别是,我得到:

我试过了

作为链接器的参数,以及它们的一些排列,到目前为止还没有运气。

我正在运行 Ubuntu 12.04,并且我已经安装了所有与我有一个模糊想法的 opengl 相关的开发包。我也在用 C++ 开发,如果没有准备好 opengl 头文件,这可能会导致问题......但他们是对的吗?

我什至在 /usr/lib/x86_64-linux-gnu/ 中使用 fgrep 显式查找符号,但它不存在,此外,“nm”表示没有符号。

那么,与 glx 链接的正确方法是什么?

编辑:这是链接问题,当 python 尝试加载已编译(并且链接不正确)的模块时会产生错误。不是在编译时。

编辑:这是编译日志

这是函数的调用方式:

0 投票
2 回答
3402 浏览

c++ - 创建 OpenGL 4.3 上下文崩溃 GLX

我正在使用 SDL2 和 C++11 构建游戏引擎(只是作为个人项目,为了娱乐和练习),我想做的一件事是尝试让图形驱动程序使用最新的支持版本OpenGL,并根据版本改变引擎的图形部分的渲染方式。这样,我可以在相关且有用的地方使用 OpenGL 的最新功能,同时也支持旧硬件。我能想到的方法有两种:

  1. 检测最新支持的 OpenGL 版本并使用它,但我想不出任何方法来做到这一点。是的,我试过谷歌。

  2. 使用反复试验,我从最新版本开始(4.3,但我的 GTX 460 仅支持最高 4.2,即使我更新了驱动程序),如果失败(我通过检查 SDL 来检测返回 NULL 上下文),我降低版本号并重试。

我使用的方法(#2)在创建 4.3 上下文后立即失败。我知道我的图形驱动程序现在只支持 4.2,但我曾认为 GLX 旨在引发错误,提供 NULL 上下文,并让您的程序继续运行,但它无法通过上下文创建失败. 我对 GLX 行为方式的假设是否错误?有没有办法在不创建上下文的情况下检测最新的支持版本?

因为我知道有些人更喜欢看到演示错误的完整和最小的源,所以它是:

此外,如果我将该代码更改为以 4.2 上下文而不是 4.3 开头,它就可以正常工作。所以错误在于专门创建 4.3 上下文。

0 投票
0 回答
692 浏览

opengl - OpenGL 的立体 3D 渲染问题

我正在尝试在 NVIDIA Quadro 5000 上使用立体 3D 渲染绘制从 .obj 文件加载的基本网格。据我所知,我认为我的左眼和右眼截锥体和偏移量已相应设置,但我的主要问题是写入和清除 BACK_LEFT 和 BACK_RIGHT 缓冲区。似乎它完全错过了第一部分,只绘制了 BACK_RIGHT 缓冲区(渲染循环的第二部分)。如果我能得到一些关于如何在同一帧中写入/读取和清除这些缓冲区的指示,那就太好了。它是一个 Linux 应用程序,因此是 glXSwap(),不使用 glut 或 glew 并使用 glm 进行数学运算。这是我的绘图循环:

编辑:意识到如果我在正确的屏幕上运行我的应用程序,它会呈现 GL_BACK_RIGHT 缓冲区。在左侧屏幕上运行它会绘制 GL_BACK_LEFT。

有任何想法吗?可能是显示器设置?

0 投票
1 回答
2643 浏览

osx-lion - NV-GLX 在 OS X Lion 中缺少扩展

我使用“ssh -X machine”连接到远程 linux 机器,然后运行图形应用程序,因此它的窗口使用 X Window 显示在我的本地 OS X Lion 机器上。我得到错误

“Xlib:显示“localhost:11.0”上缺少扩展名“NV-GLX”。”

应用程序移动非常缓慢。有没有办法在 OS X 上使用 NV-GLX 或解决这个问题?