【问题标题】:Segfault with glPopMatrixglPopMatrix 的段错误
【发布时间】:2013-12-28 06:03:28
【问题描述】:

我正在运行 Pidora 的 Raspberry Pi 上移植/测试我的代码,所有这些都已更新。

测试是一个非常简单的 OpenGL 程序,在另外两台计算机上运行良好。我将问题缩小到导致段错误的 glPopMatrix 调用。问题的简单再现(整个绘制函数)是:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glViewport(0,0,200,200);

float d1=0.0f, d2=0.1f;

glPushMatrix(); //gratuitous push/pop pair to demonstrate
glBegin(GL_TRIANGLES);
glColor4f(1.0f,0.0f,0.0f,0.5f); glVertex3f( 0.00f, 1.0f,d1);
glColor4f(0.0f,1.0f,0.0f,0.5f); glVertex3f( 0.87f,-0.5f,d1);
glColor4f(0.0f,0.0f,1.0f,0.5f); glVertex3f(-0.87f,-0.5f,d1);
glColor4f(1,0,0,1);
glVertex3f(0,0,d2);
glVertex3f(1,0,d2);
glVertex3f(0,1,d2);
glColor4f(1,0,1,1);
glVertex3f( 0, 0,-d2);
glVertex3f(-1, 0,-d2);
glVertex3f( 0,-1,-d2);
glEnd();
glPopMatrix(); //segfault here!

我能找到的唯一参考是this 2011 bug report,它有效地描述了同样的问题。到目前为止,他们似乎只有一个解决方法:

export GALLIUM_DRIVER=softpipe
export DRAW_USE_LLVM=no

我发现只有第一行是必要的。但是,正如上面所建议的,它看起来可能会迫使操作系统使用软件后备。表明。程序(如上绘制三个三角形)以大约 10Hz 的频率运行。

众所周知,OpenGL 矩阵堆栈已被弃用,但像上面这样的简单用例对测试很有用。如果 glPopMatrix 存在,我希望它至少不会崩溃。有没有办法让我获得硬件加速但仍然使用它?

【问题讨论】:

    标签: opengl fedora


    【解决方案1】:

    树莓派通过供应商特定的库对 OpenGL ES 1.x/2.x 提供硬件支持,但不支持桌面 GL。即时模式 (glBegin/glEnd) 在 GLES 中从不。您必须使用顶点数组。但是,矩阵堆栈在 GLES1.x 中可用。您必须使用 egl 来获得硬件加速的上下文。从好的方面来说,RPi 上的 GL 不需要 X11,因此您可以直接在控制台上覆盖 GL,这非常酷。官方 RPi 固件附带 hello_triangle 演示,演示如何获取有效上下文,源代码可在 /opt/vc/src/hello_pi/hello_triangle 中找到。还有OpenGL ES编程指南的Ben O. Steen's RPi ports of the examples/

    您当前正在使用 mesa 软件渲染器,在该平台上会非常慢。崩溃似乎是一个台面错误,但由于台面对 rpi 的 GPU 没有任何硬件加速支持,这应该无关紧要。您粘贴的 cod 是有效的桌面 GL1.x/2.x,不应在符合标准的实现上崩溃。

    【讨论】:

    • 是获取 ES 上下文以使用 EGL 的唯一方法吗?
    • @IanMallett:据我所知,是的。更有问题的部分不是 EGL,而是 VideoCore GPU 的供应商特定库,您需要创建要渲染到的叠加层(以及通过 egl 创建 GLES contetx)。但是,我已经一年多没有检查过这个问题了。也许像 SDL 这样的库现在有原生的 RPi 支持。 IIRC,qt 有一些支持。
    • FWIW 我能够通过 wgl_create_context_es2_profile/glx_create_context_es2_profile 获得 ES 上下文,它的优点是它也适用于桌面。我现在被困在gamedev.net/topic/651807-segfault-with-opengl-es-gldrawarrays 上。感谢您的帮助,
    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多