【发布时间】:2016-08-16 14:03:50
【问题描述】:
我有以下代码来开始一个框架:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
如果没有最后一行,程序会运行(但显然不会混合),但会出现段错误。 GDB 帮助不大,因为看起来堆栈已损坏,并且在段错误之后,正在运行:
set $pc = *(void**)$rsp
set $rsp = $rsp+8
指向函数的结束大括号作为最后一帧。
我有点怀疑这是驱动程序中的错误,但在他们的跟踪器上找不到错误报告。驱动程序是在 Ubuntu 上运行的 flgrx-updates。 GLXInfo 给出:
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon R9 200 Series
OpenGL core profile version string: 4.3.13399 Core Profile Context 15.201.1151
OpenGL core profile shading language version string: 4.40
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
【问题讨论】:
-
你看到
glGetError()在调用glEnable(GL_BLEND)后返回什么了吗?您是否尝试过其他混合模式,例如glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)? -
你有最新版本的视频驱动吗?
-
@AntonMalyshev
glGetError()在启用后返回0。更改混合模式仍会导致崩溃 -
@Unick 存储库中的最新版本 - 我不愿意手动更新它们。以前使用混合对我有用,所以肯定是我的代码或驱动程序对我所做的事情反应不佳这次
-
尝试重启机器:)
标签: c++ opengl segmentation-fault