标签: glx

禁用glxgears的垂直同步

有时您需要检查Linux 3D加速是否真的有效(除了glxinfo输出).这可以通过该glxgears工具快速完成.但是,FPS通常限于显示器垂直刷新率(即60 fps).因此,该工具或多或少变得无用,因为即使是软件渲染也可以在现代CPU上轻松生成60FPS的glxgears.

我发现很难找到一个快速简单的解决方案,我回答了我自己的问题.希望它可以节省您的时间.

linux 3d glx

78
推荐指数
6
解决办法
10万
查看次数

使用专有的Nvidia驱动程序在Linux上出现多个OpenGLX渲染上下文失败

当我尝试在各个线程上运行超过128个当前OpenGLX渲染上下文时,调用glXMakeCurrent开始失败.

Display *display = XOpenDisplay(":0")
Window root_win = RootWindow(display, screen);
Window win = XCreateWindow (display, root_win, ...)
GLXContext context = glXCreateContext(display, visinfo, 0, True);

glXMakeCurrent(display, win, context); <---- Fails here on 128th
Run Code Online (Sandbox Code Playgroud)

此问题仅发生在专有的Nvidia驱动程序和Nvidia GPU上.我无法使用英特尔GPU重现.

复制代码glx.cpp:

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glx.h>
#include <GL/glxext.h>
#include <string.h>
#include <unistd.h>
#include <thread>
#include <vector>
#include <mutex>
#include <condition_variable>
#include <chrono>

#define MAX_CONTEXTS 200;

std::mutex mutex;
std::condition_variable cond;
bool will_stop = false;

int numSuccessfulContexts = 0;
#define EXIT_IF(condition, ...) if …
Run Code Online (Sandbox Code Playgroud)

c++ linux opengl nvidia glx

26
推荐指数
1
解决办法
885
查看次数

X11/GLX - 全屏模式?

我想创建一个Linux应用程序-屏幕保护程序,在这种情况下-这被证明是非常难以找到制作窗口全屏简单的任务信息.即使现有屏保的代码也没有提及他们如何管理它,我还没有看到任何明显的功能XRemoveDecoration().

经过多次摸索后,我确实设法创建了一个与桌面大小相同的窗口,其中:

Window win = DefaultRootWindow(disp);
XWindowAttributes getWinAttr;
XGetWindowAttributes(disp, win, &getWinAttr);
win = XCreateWindow(disp, win, 0, 0, getWinAttr.width, getWinAttr.height, 0, vInfo->depth, InputOutput, vInfo->visual, CWBorderPixel|CWColormap|CWEventMask|CWOverrideRedirect, &winAttr );
Run Code Online (Sandbox Code Playgroud)

但这并没有做任何事情来摆脱标题栏和边界.我知道有一种方法,显然 - 但是我还没有找到任何指向那个方向的东西,它不依赖于其他一些大型库被抛到顶部(现有的屏保不会使用).

编辑:请不要删除我的帖子中的信息.有一个很好的理由我明确指出现有的屏保没有使用可选库,这是因为我在过去的大部分时间里一直在分析源代码.

我选择了最直接回答问题的答案,并且适用于一般的应用程序.

如果你发现这个问题研究xscreensavers ......同样仍然适用.是的,xscreensaver有自己的API - 这很复杂,实际上涉及编写更多行代码(是的,认真的).如果您想在屏幕保护程序中使用OpenGL,则需要通过另一个 API(xlockmore,一个竞争系统)和一个将其转换为xscreensaver的兼容层.

但是,xscreensaver能够运行任何可以使用虚拟根窗口(查看vroot.h)作为屏幕保护程序的程序.所以我的建议就是这样做 - 你将拥有更多控制权,没有限制性API,以及更高的可移植性.(我看过的一个例子甚至可以编译为Linux或Windows,使用相同的文件!)

c++ linux x11 opengl glx

14
推荐指数
1
解决办法
8711
查看次数

不支持OpenGL GLX扩展

我在Ubuntu 10.04中安装了OpenGL和freeglut,它在10.04和10.10中运行良好.但是在我升级到11.04之后,我使用OpenGL开发的应用程序运行不正常.他们正在编译而没有错误,但是当我尝试执行它们时,我遇到了错误:

对于GLUT:

Xlib:  extension "GLX" missing on display ":0.0".
freeglut (./a.out): OpenGL GLX extension not supported by display ':0.0'
Run Code Online (Sandbox Code Playgroud)

对于OpenGL:

Xlib:  extension "GLX" missing on display ":0.0".
main: X server has no OpenGL GLX extension
Run Code Online (Sandbox Code Playgroud)

我试过的一些事情:

$glxgears
Xlib:  extension "GLX" missing on display ":0.0".
Error: couldn't get an RGB, Double-buffered visual


$glxinfo
name of display: :0.0
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension …
Run Code Online (Sandbox Code Playgroud)

opengl ubuntu glut xlib glx

12
推荐指数
2
解决办法
6万
查看次数

Electron中神秘无效的OpenGL上下文

我创建了一个由GLX和GLEW支持的C++和OpenGL动画引擎,通过SWIG包装在Node.js模块中.目标是在浏览器进程中使用Electron应用程序内的引擎.

发动机看起来很稳定.它具有多上下文感知能力,在所有相关操作之前绑定正确的OpenGL上下文,在几乎所有可能的操作之后检查错误,并由相当大的测试套件支持.

在电子应用程序之外,一切正常.然而,神秘的是,通常在Electron之外工作的简单脚本在浏览器或渲染器进程中的Electron应用程序内失败.

症状

  • 生成的任何内容glGenX都返回0
  • glGetString(GL_VERSION)返回null,之后glGetError返回没有错误

事实

按此顺序:

  • glXCreateContextAttribsARB使用合理的FB配置创建OpenGL上下文.返回值不为零.
  • XSync(display, false)被调用等待X错误.没有错误导致程序崩溃,设置X错误处理程序不会产生任何结果.
  • 上下文是最新的glXMakeCurrent,没有报告错误glGetError.
  • 上下文是直接的,检查glXIsDirect.
  • GLEW初始化glewInit,返回GLEW_OK.
  • 这种情况下的操作发生在同一个线程中.在Electron应用程序中,上下文被制作并立即在同一过程中使用; 上下文本身的创建在同一方法中查询版本.Electron应用程序之前和之后的相同症状已"准备就绪".

我对此非常困惑.我正在检查的所有内容似乎都表明正确创建了上下文,但它看起来已损坏或功能失常.

这是怎么回事?我还能检查什么?

c++ opengl glx electron

12
推荐指数
1
解决办法
1101
查看次数

SDL2无法创建窗口,因为找不到匹配的GLX visual

我有一个问题,因为我目前正在Windows 10上运行Ubuntu终端.我还安装了XMing作为我的X服务器(我使用XMing作为qemu等等).我正在尝试运行这个SDL2计划.所以我对main.cpp有这个:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

#include <SDL2/SDL.h> 
#include <GL/gl.h> 

int main(int argc, char *argv[]) 
{ 
        int final_status = 1; 
        SDL_Window *window; 
        SDL_GLContext openGL_context; 

        if (SDL_Init(SDL_INIT_VIDEO)) { 
                fprintf(stderr, "Unable to initialize SDL: %s\n", 
                        SDL_GetError()); 
                return 1; 
        } 
        window = SDL_CreateWindow("My Demo", SDL_WINDOWPOS_CENTERED, 
                                  SDL_WINDOWPOS_CENTERED, 640, 480, 
                                  SDL_WINDOW_OPENGL); 
        if (!window) { 
                fprintf(stderr, "Can't create window: %s\n", SDL_GetError()); 
                goto finished; 
        } 

        openGL_context = SDL_GL_CreateContext(window); 
        if (!openGL_context) { 
                fprintf(stderr, "Can't create openGL context: %s\n", 
                        SDL_GetError()); 
                goto close_window; 
        } 

        /* drawing code removed …
Run Code Online (Sandbox Code Playgroud)

c++ glx sdl-2 windows-subsystem-for-linux

9
推荐指数
1
解决办法
5028
查看次数

如果“纯 XCB”OpenGL 是不可能的,那么 xcb/glx.h 中的 XCB/GLX API 有什么用?

XCB 官方文档告诉我们,将 OpenGL 与 XCB 一起使用是不可能的:还必须使用 Xlib。

Bart Massey(XCB 的创建者)的这篇文章并不表明这应该是不可能的。但我确定我错过了一些东西。

我花了几个小时浏览xcb/glx.h这里组织得很好。在我看来,它就像一个成熟的 API。但我无法让它工作。

问题

  1. XCB/GLX API 没用吗?的目的是xcb/glx.h什么?
  2. 如何使用 API?

(注意。这是了解 XCB 工作原理的持续努力的一部分。)

相关的SO 线程


次要的、冗长的东西

如果有人愿意尝试一下,这里是 XCB 邮件列表中原始帖子的来源,将其精简并放入单个文件中。

你会注意到xcb_glx_make_context_current返回错误169(不知道是什么意思),但只有在 xcb_glx_create_window需要0NULL它的最后两个参数。这些参数涉及一组属性,似乎是由函数返回的xcb_glx_create_window_attribs,但我不知道如何使用它...

之前的长辅助函数int main()仅意味着两个返回两个整数,xcb_glx_fbconfig_t fbconfig xcb_visualid_t glx_visual,对应于第一个“匹配”帧缓冲区配置。在我的平台上,这些是0xa70x24。它们正是 Xlib/GLX 例程(实际有效)返回的内容,所以我知道我选择的帧缓冲区配置很好。

所以,问题似乎发生在xcb_glx_create_windowxcb_glx_make_context_current......

// gcc main2.c -o main …
Run Code Online (Sandbox Code Playgroud)

linux x11 framebuffer glx xcb

8
推荐指数
1
解决办法
2282
查看次数

X2Go 错误:X 服务器不支持 XInput 2

我正在使用远程桌面软件 X2Go 来远程使用 Ubuntu 20.04 Linux 工作站。我正在使用 Ubuntu 20.04 笔记本电脑进行隧道传输。最初,一切似乎都运行良好。当我启动 paraFoam 时,收到以下错误消息:

qt.qpa.xcb: X server does not support XInput 2

Aborted (core dumped)

有什么想法可能会导致这个问题吗?我正在使用 mate-desktop-environment,与 xfce 遇到完全相同的问题。

X2Go 邮件存档中有一个与此相关的线程,导致了 Ubuntu 14 的解决方案。有没有人尝试过这个并且可以给出详细的说明?

主题: https ://www.mail-archive.com/x2go-user@lists.x2go.org/msg04042.html

解决方法:https://wiki.x2go.org/doku.php/wiki:development:glx- xlib-workaround

remote-access glx openfoam x2go

8
推荐指数
0
解决办法
4179
查看次数

Libgdx没有使用Opengl ES 2.0

最好,我想将OpenGL ES 2.0用于我开始制作的新3D游戏.无论如何,我一直在Ubuntu PC上开发它(不是顶级的,但体面的)我在2010年买的.

Gdx.graphics.isGL20Available()返回false,我很确定我的驱动程序支持3.3.0.这是我从glxinfo收到的:

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig, 
GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control, 
GLX_EXT_swap_control, GLX_EXT_texture_from_pixmap, GLX_ARB_create_context, 
GLX_ARB_create_context_profile, GLX_EXT_create_context_es2_profile, 
GLX_ARB_create_context_robustness, GLX_ARB_multisample, 
GLX_NV_float_buffer, GLX_ARB_fbconfig_float, GLX_EXT_framebuffer_sRGB
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info, 
GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync, 
GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_ARB_create_context, 
GLX_ARB_create_context_profile, GLX_NV_float_buffer, 
GLX_ARB_fbconfig_float, GLX_EXT_fbconfig_packed_float, 
GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB, 
GLX_NV_present_video, …
Run Code Online (Sandbox Code Playgroud)

lwjgl glx opengl-es-2.0 libgdx

7
推荐指数
1
解决办法
6927
查看次数

无法在 WSL2 上运行 OpenGL

我尝试在 WSL2 上运行 OpenGL 代码,但在尝试运行可执行文件时出现以下错误:

GLFW error 65543: GLX: Failed to create context: GLXBadFBConfig
Unable to create GLFW window
Run Code Online (Sandbox Code Playgroud)

这是我用来创建窗口的代码:

....
GLFWwindow* initialize() {
      int glfwInitRes = glfwInit();
      if (!glfwInitRes) {
         fprintf(stderr, "Unable to initialize GLFW\n");
         return nullptr;
      }

      glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
      glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
      glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
      glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

      GLFWwindow* window = glfwCreateWindow(1280, 720, "InitGL", nullptr, nullptr);
      if (!window) {
         fprintf(stderr, "Unable to create GLFW window\n");
         glfwTerminate();
         return nullptr;
      }

      glfwMakeContextCurrent(window);

      ....
      return window;
   }
   ....

GLFWwindow* window = initialize();
Run Code Online (Sandbox Code Playgroud)

我使用 VcxSrv …

c++ opengl glfw glx

6
推荐指数
1
解决办法
2万
查看次数