长绘图时Opengl nvoglv32.dll异常

时间:2019-05-31 13:07:44

标签: c++ opengl glsl

我正在使用opengl渲染分形,这可能会导致很长的绘制调用(几秒钟)。如果绘图调用结束时过长(几秒钟),则出现此错误:
Mandelbulb.exe中0x69A5E899(nvoglv32.dll)出现未处理的异常:请求致命程序退出。 大概opengl假设我陷入无限循环,因此中止了程序。

我已隔离问题,因为如果我降低质量,问题就会消失。 (在示例代码中,请注意,如果将maxiterations设置为合理的值(例如1000),则程序将正常运行。
有什么办法可以暗示opengl它不应该中止吗?
也许使用计算着色器会行得通吗?

用于再现的示例代码(非常愚蠢的示例,而不是焦点):创建一个opengl项目,绘制两个重叠的三角形,以形成覆盖整个屏幕的矩形。然后使用该片段着色器对其进行着色。 顶点:

#version 330 core

layout(location = 0) in vec4 position;

out vec4 pos;
void main()
{
    gl_Position = position;
    pos = position;
};

片段:

#version 330 core
layout(location = 0) out vec4 color;
in vec4 pos;
const int maxIterations = 8000000;
void main()
{
    vec2 npos = pos.xy;
    vec2 z=vec2(0.0,0.0);
    int i = maxIterations;
    for (; i > 0; i--)
    {
        float y2 = z.y * z.y;
        float x2 = z.x * z.x;
        if (x2 + y2 > 4) break;
        z.y = 2*z.x*z.y+npos.y;
        z.x = x2 - y2 + npos.x;
    }
    color = vec4(float(i)/float(maxIterations));
};

编辑: 尝试@Scheff建议的方法。但是,我很遗憾不能接受评论作为答案

0 个答案:

没有答案
相关问题