小编Jef*_*aka的帖子

大量计算导致 OpenGL 崩溃

我是 OpenGL 的新手。我的第一个项目是渲染一个 mandelbrot 集(我觉得这很有趣)并且由于必须完成的计算的性质,我认为最好在 GPU 上进行(基本上我在每个复杂平面的一部分的点,很多时间,我根据输出为这个点着色:大量可并行计算,这对 GPU 来说似乎不错,对吧?)。

因此,当单个图像没有太多计算时一切正常,但是一旦像素*迭代超过大约 90 亿,程序就会崩溃(显示的图像显示只计算了其中的一部分,青色部分是初始背景):

未完全计算 Mandelbrot 集的黑暗部分

事实上,如果计算总数低于这个限制但足够接近(比如 85 亿),它仍然会崩溃,但需要更多的时间。所以我猜有一些问题不会出现在足够少的计算中(在它到达那里之前它总是完美无缺地工作)。我真的不知道它可能是什么,因为我真的很陌生。当程序崩溃时,它说:“Mandelbrot Set.exe 中 0x000000005DA6DD38 (nvoglv64.dll) 处的未处理异常:请求致命程序退出。”。它也是在那里指定的相同地址(它仅在我退出 Visual Studio,我的 IDE 时才会更改)。

那么这里是整个代码,加上着色器文件(顶点着色器不做任何事情,所有计算都在片段着色器中):编辑:这是项目所有 .cpp 和 .h 文件的链接,代码太大而不能放在这里,无论如何都是正确的(虽然远非完美); https://github.com/JeffEkaka/Mandelbrot/tree/master

这是着色器:

NoChanges.vert(顶点着色器)

#version 400

// Inputs
in vec2 vertexPosition;  // 2D vec.
in vec4 vertexColor;

out vec2 fragmentPosition;
out vec4 fragmentColor;

void main() {
gl_Position.xy = vertexPosition;
gl_Position.z = 0.0;
gl_Position.w = 1.0;  // Default.

fragmentPosition = vertexPosition;

fragmentColor = vertexColor;

}
Run Code Online (Sandbox Code Playgroud)

CalculationAndColorShader.frag(片段着色器)

#version 400
uniform int …
Run Code Online (Sandbox Code Playgroud)

c++ opengl gpu mandelbrot

-2
推荐指数
1
解决办法
1307
查看次数

标签 统计

c++ ×1

gpu ×1

mandelbrot ×1

opengl ×1