我正在网上关于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);
...
我是否需要提供任何其他代码?我只是不确定这里做错了什么。
答案 0 :(得分:2)
也许您忘了拨打SDL_Init
?或者可能从多个线程调用此函数?
答案 1 :(得分:1)
我会说glCreateShader是函数的NULL指针。这是一个并非所有驱动程序都支持的功能,因此您应该使用某种GL扩展包装器,例如优秀的GLEW。
在使用扩展之前,您应该检查当前实现是否支持它:在您的情况下,它是GL2.0函数,因此:if (GLEW_VERSION_2_0) ...
。