glCompileShader访问冲突

时间:2013-12-17 12:21:54

标签: opengl shader

我有一个非常简单的像素着色器,只写出蓝色像素。这个着色器的目的是显示我认为是一个错误或我用OpenGL无法正确执行的操作,因为当我调整此着色器使其无法编译时,我在代码中遇到了访问冲突而不是我可以检查的简单OpenGL错误。

我有以下像素着色器:

#version 420

out vec4 Out_Colou3r;

void main(void)
{           
    Out_Colour = vec4(0.0, 0.0, 1.0, 0.0);
}

显而易见的错误在于我拼写Out_Colou3r,它与“main”中的赋值不匹配。现在,当我使用:

编译这个着色器时
const GLchar * data = shaderString.c_str();

CoreBase::Expose().glShaderSource(id, 1, &data, nullptr);
CoreBase::Expose().glCompileShader(id);

,其中CoreBase:Expose()公开了GL函数指针集,我在glCompileShader中得到以下错误。

  

TestCGI.exe中0x0000015E处的未处理异常:0xC0000005:Access   违规执行地点0x0000015E。

现在正确分配了glCompileShader函数指针,因为这个函数在编译前一个顶点着色器时没有问题,如果我纠正错字,它确实会编译上面的像素着色器OK。显然,如果我有访问冲突,我的代码之后不能读取glGetShaderInfoLog以获得失败的原因。访问冲突是终端。有关信息,我使用的是Visual Studio 2012和最新的ATI驱动程序。

所以我的问题如下:为什么着色器中的错误会引发访问冲突?

0 个答案:

没有答案