opengl / glsl / sdl代码中的C ++访问冲突

时间:2011-12-02 22:02:04

标签: c++ opengl glsl access-violation

我正在网上关于GLSL的一些教程。我一直在将代码实现到我当前的程序中。它编译得很好,但是当我调试它时,我得到了访问冲突:

First-chance exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation.
Unhandled exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation.

我不确定为什么。这是它指向的行:

GLuint v,f,f2,p,ge;
int gw = RESOLUTION_X;
int gh = RESOLUTION_Y;

void setShaders() 
{
    char *vs = NULL, *fs = NULL, *fs2 = NULL, *gs = NULL;

    v  = glCreateShader(GL_VERTEX_SHADER); //<-- this line
    f  = glCreateShader(GL_FRAGMENT_SHADER);
    ge = glCreateShader(GL_GEOMETRY_SHADER_EXT);

...

我是否需要提供任何其他代码?我只是不确定这里做错了什么。

2 个答案:

答案 0 :(得分:2)

也许您忘了拨打SDL_Init?或者可能从多个线程调用此函数?

答案 1 :(得分:1)

我会说glCreateShader是函数的NULL指针。这是一个并非所有驱动程序都支持的功能,因此您应该使用某种GL扩展包装器,例如优秀的GLEW。

在使用扩展之前,您应该检查当前实现是否支持它:在您的情况下,它是GL2.0函数,因此:if (GLEW_VERSION_2_0) ...