glewInit()在创建osmesa(屏幕外台面)上下文后崩溃(segfault)
glewInit() crashing (segfault) after creating osmesa (off-screen mesa) context
我正在尝试在远程计算集群上运行opengl应用程序。我正在使用osmesa,因为我打算执行屏幕外的软件渲染(没有x11转发等)。我想使用glow(使生活处理着色器和其他扩展相关的调用更容易),我似乎已经建立并链接了mesa和glow。
当我调用mesa-create-context时,glewinit给出了一个OPENGL版本不可用的输出,这可能意味着上下文尚未创建。当我调用glGetString(GL_EXTENSIONS)时,我没有得到任何输出,这证实了这一点。这也表明glow可以很好地独立工作。(其他的glow命令,比如glow version等也可以)。
现在,当我(如下所示)添加mesa-make-context-current函数时,glewinit会因段错误而崩溃。运行glGetString(GL_EXTENSIONS)现在给了我一个扩展列表(这意味着上下文创建成功了!)
我花了几个小时试图弄清楚这个问题,试着修修补补,但没有任何效果。我将非常感谢任何帮助。也许你们中的一些人以前也经历过类似的事情??再次感谢!
int Height = 1; int Width = 1;
OSMesaContext ctx; void *buffer;
ctx = OSMesaCreateContext( OSMESA_RGBA, NULL );
buffer = malloc( Width * Height * 4 * sizeof(GLfloat) );
if (!OSMesaMakeCurrent( ctx, buffer, GL_UNSIGNED_BYTE, Width, Height )) {
printf("OSMesaMakeCurrent failed!n");
return 0;
}
-- glewinit() crashes after this.
补充一下,osmesa和glow最初实际上没有编译。由于glow在最后一行取消了GLAPI的定义,并且osmesa将不再包含gl.h,因此GLAPI仍然未定义,并在osmesa.h(119)中导致错误。我通过向GLAPI添加外部来解决这个问题,但不确定这是否相关。
查看glewInit在glew.c中的源代码,如果glewContextInit成功,它返回GLEW_OK, glewcontextok被定义为0,等等,在Linux系统中,它将始终调用glxewContextInit,它调用glX函数,在OSMesa的情况下可能还没有准备好使用。这将导致段错误(如我所见),不幸的是,glewInit函数似乎没有能力处理这种情况,除非修补C源代码并重新编译库。
如果其他人已经解决了这个问题,我会很感兴趣,我已经看到了一些解决这个问题的补丁版本的glow .c源代码。目前尚不清楚GLEW社区中是否有任何能量来合并针对该用例的更改。
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- C++中带有List类的迭代器Segfault
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::partition segfault issue
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- 安排带有上下文的协同程序
- 我的文件无法正常工作,无法从C++文件中读取上下文
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 具有std::initializer_list参数的非成员函数(/non构造函数上下文)的重载解析
- antlr 规则上下文是否可以独立于目标
- glewInit()在创建osmesa(屏幕外台面)上下文后崩溃(segfault)