问题标签 [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 回答
645 浏览

opengl - GLX 创建 GL 4.x 上下文与 GLEW 崩溃 glXChooseFBConfig

我在使用普通 GLX 和 GLEW (1.12) 创建 GL 4.x 上下文时遇到问题。我在这里找到的所有解决方案都不适合我。

我正在尝试做的事情(以及我在其他问题中发现的内容):创建一个“基本”GL 上下文,调用 glewInit(),然后使用 glXCreateContextAttribsARB(...) 创建正确的 GL 4.x 上下文。这对我不起作用,因为 glXChooseFBConfig 不断出现段错误。

我读到我必须先调用 glxewInit ,但这没有用。未定义 GLEW_MX 的构建导致 glxewInit 不可用。使用定义的 GLEW_MX 构建会导致以下编译错误:

当我省略调用 glxewInit() 时,应用程序在调用 glXChooseFBConfig(...) 时崩溃

我相当卡在这里。使用普通 GLX 获取 GL 4.x 上下文的正确方法是什么?(我不能使用 glfw 或类似的东西,我正在开发一个给定的应用程序,我得到一个显示指针和一个窗口 ID 可以使用,窗口已经存在)

0 投票
2 回答
877 浏览

c++ - 使用窗口系统 (GLX) 交换缓冲区和清除返回

在后台缓冲区和前台缓冲区之间交换时,后台缓冲区中的内容变得未定义。我想使用“窗口系统”来定义它,例如 GLX、EGL、WGL。使用诸如 OpenGL (glClear) 之类的“本机”渲染器是我的后备计划,不必费心提及它。它是备份的原因是因为我不想弄乱本机渲染上下文。对于这个问题,我会坚持使用 X/GLX,但如果您倾向于描述如何在其他环境中执行此操作,请继续。

从 Xlib 文档(http://www.x.org/docs/X11/xlib.pdf)中,我找到了一个操作 XClearWindow,用于清除带有“背景像素”的窗口(顺便说一句真棒的名字......不是)。

  1. XClearWindow 是否清除前/后或两个缓冲区?我猜后台缓冲区是有道理的,但我无法仅从 Xlib 文档中弄清楚……如果有人问起三重缓冲区,那不是我!
  2. 它是与 OpenGL 渲染同步的,还是我必须通过例如在操作之前调用 glxWaitGL 来同步自己?
  3. 命令是否阻塞,即停止直到完成?实施依赖?

关于如何在使用窗口系统 (GLX) 进行交换后清除后台缓冲区的其他建议已得到应用。

干杯!

0 投票
2 回答
1060 浏览

opengl - `glwMDrawingAreaWidgetClass' 的多重定义

我正在将一个应用程序移植到 Linux,在 IRIX 上编写(并成功移植到 AIX(几年前))。我发现的问题之一是 Linux 不支持 glwMDrawingAreaWidgetClass(使用 glwDrawingAreaWidgeClass no 'M')。所以我换了。我在 Ubuntu 10.10 上构建了该应用程序。现在我正在尝试在 14.04 上构建(并且也在 15.10 上尝试过)。但我收到以下错误。

glwMDrawingAreaWidgetClass 的多重定义。

我得到了十几个(左右)文件。问题是..我没有使用它。

因此,我以良好的调试风格问:发生了什么变化。生成文件相同,文件相同。它必须是库或编译器 (G++)。

我到处找(谷歌搜索)找到这个错误。我还没有找到解决方案(甚至是问题)。

有没有人注意到这一点?我怀疑这是图书馆的问题。
我正在使用以下库来链接:..

-lxvw -ldot -lmath -lXm -lXt -lXext -lX11 -lglut -lGLU -lGL -lGLw -lm -lpthread。

前三个是我的。我尝试去除 glut、GLU、GL、GLw。要么没有区别,要么我无法链接。我怀疑它是GLw。

我正在静态链接。

谢谢

0 投票
2 回答
1908 浏览

c - GLX 垂直同步事件

我想知道是否可以通过任何文件描述符捕获屏幕 vsync 事件并 [select | 民意调查 | epoll]。

通常,如果我是对的, glXSwapBuffers() 不会阻止该过程,因此我可以执行以下操作:

因此,无论何时发生 vsync 事件,我都可以触发任何事件,并在仅使用 X 绘图功能和可能 GL 进行 vsync 的情况下避免撕裂效应。

libdrm 可以帮助我吗?更普遍的问题是:

那么我必须使用什么 fd 来捕获 vsync 事件以及如何使这个 fd 上发生的事件是 vsync 事件?

0 投票
1 回答
209 浏览

c++ - GLX 上下文帧缓冲读取

我正在尝试从 GLX 上下文中读取像素。这是我创建上下文的方式

然后我正在渲染简单的三角形,我想通过 glReadPixels 读取该缓冲区。有没有可能做到这一点?

然后我打电话

0 投票
1 回答
122 浏览

debian - 调试 GLX 应用程序 - 缓慢的窗口不会重新绘制

我正在将 OpenGL 应用程序移植到 Linux(Debian Jesse 核心,使用 GLX、X11 和 Xfree86,通过 Mesa 10.3.2 使用 GL 3.0)。我陷入了一个我不完全理解的渲染问题(描述如下),并且我已经用尽了我知道如何使用的调试方法。我的问题是,我该如何调试呢?是否有我可以用来检查性能的工具、我可以查看的日志文件、我可以安装和设置断点的开发库等等?

症状:

  • 实例化窗口后,将绘制窗口框架但未绘制窗口内容(我在窗口中看到桌面背景)
  • 在标题栏上单击拖动以移动窗口是缓慢的
  • 关闭应用程序需要几秒钟,但在窗口被销毁之前的很短的瞬间,正确的屏幕输出出现在窗口中
  • 将窗口调整为非常小不会改善缓慢或显示问题
  • top显示最大 cpu 使用率仅为 2%(大部分时间在 0.3 - 0.7% 之间),内存使用率上升和下降但保持在稳定范围内,我的其他图形应用程序稍有延迟,但其余的该系统相当活泼。这是来自的快照top

我试过的:

  • 我在 Windows 上遇到了类似的问题,问题是将空窗口句柄传递给SwapBuffers调用。我在通话gdb中设置了断点,glXSwapBuffers并确保现在没有发生同样的事情。
  • gdb使用确保Display*Window实例不为空且未更改来跟踪窗口创建代码。
  • 重绘和不重绘ExposeConfigureNotify事件。删除重绘代码似乎对问题没有任何影响。
  • 万一这很重要,我正在使用 GLEW,但不是用于创建上下文。我得到一个指向glXCreateContextAttribsARBvia的函数指针glXGetProcAddress
0 投票
2 回答
1179 浏览

c++ - 手动调用OpenGL函数

我一直致力于创建一个 OpenGL 函数加载库,它可以帮助我在需要时调用 OpenGL 函数。

我有一个getProcAddress使用 glX 的函数。

这将返回 OpenGL 函数的地址。如果我不使用reinterpret_casts,我会收到奇怪的编译器错误,这就是它们存在的原因。

然后我在头文件中定义一个 gl* 函数原型:

whereGLenum在另一个头文件中定义为枚举。然后我在一个类中声明函数指针:

然后在一个名为initI 的函数中:

getProcAddress函数可以自行编译,但上面的代码行不会编译。GCC 抛出此编译器错误:

而且我不知道如何处理这种编译器错误。这是没有意义的,因为这是一个函数指针,而不是函数本身,除非我使用(). 我不太确定这里的问题是什么;无论是我这边还是海湾合作委员会。目前还不清楚。我试过摆弄指针和空位,但一切都是徒劳的,并且出现了相同的错误消息。有谁知道这里发生了什么以及如何正确调用 OpenGL 函数?

0 投票
1 回答
123 浏览

opengl - GLX 动画比预期慢

我有一个使用 XCB 和 openGL 的应用程序。一开始,我选择了具有以下属性的帧缓冲区配置:

我运行了一个简单的动画,它应该持续一个固定的持续时间(1 秒),但在屏幕上显示它需要更长的时间(大约 5 秒)。添加日志以显示进度值后,我发现实际循环仅持续 1s。

我不确定到底发生了什么。我想在每次迭代中都会glXSwapBuffers()将用于绘图的opengl命令排入队列,并且在循环结束时它们中的大多数尚未执行。

调整 的参数usleep()除了使动画不那么平滑或使动画更慢之外没有任何效果。当我切换到单缓冲时,问题就消失了(但我遇到了与单缓冲相关的问题)。

看来我做的不对,但我不知道是什么。

0 投票
2 回答
791 浏览

python - 如何使用 glXChooseFBConfig 和 ctypes 模块初始化 OpenGL?

我想在我的 tkinter 窗口上制作一些简单的 OpenGL 动画。我不想包含任何不必要的依赖项,所以我使用 ctypes 从头开始​​编写所有内容。到目前为止,我有这个:

为什么这段代码会产生这个错误?

0 投票
0 回答
250 浏览

opengl - GLX 双缓冲仅在两次交换后工作

我有一个程序,使用 opengl 和 GLX。一开始我选择了具有以下属性的帧缓冲区配置:

当我必须重新渲染窗口时,我会清除屏幕,渲染内容,然后交换缓冲区:

交换缓冲区后,我看到的不是窗口的内容,而是窗口后面的内容。我的猜测是交换的缓冲区处于某种初始状态,实际上没有渲染到其中。如果我第二次触发缓冲区交换,我的窗口中的内容就会正确显示。

我错过了什么吗?


编辑

Fluxbox 1.3.7 和 mesa 11.0.6 会发生这种情况。我使用直接渲染上下文。