C++ C++;opengl/glsl/sdl代码中的访问冲突
我正在关注一些关于GLSL的在线教程。我一直在将代码实现到我当前的程序中。它编译得很好,但当我调试它时,会遇到访问冲突:C++ C++;opengl/glsl/sdl代码中的访问冲突,c++,opengl,glsl,access-violation,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. 我不知道为
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);
...
GLuint v,f,f2,p,ge;
int gw=分辨率X;
int gh=分辨率_Y;
void setShaders()
{
char*vs=NULL,*fs=NULL,*fs2=NULL,*gs=NULL;
v=glCreateShader(GL_VERTEX_SHADER);//也许您忘记调用了?或者可能从多个线程调用此函数?我想说,glCreateShader是指向函数的空指针。这是一个并非所有驱动程序都支持的函数,因此您应该使用某种GL扩展包装,例如优秀的GLEW
在使用扩展之前,您应该检查当前实现是否支持该扩展:在您的情况下,它是一个GL2.0函数,因此:if(GLEW\u VERSION\u 2\u 0)…
+1;调用地址0x00时引发异常的事实强化了这一假设;这可能是因为glCreateShader
是一个初始化为空的指向函数。事实上,这是真的。我在sdl init之前调用了glew init。我一生中从未使用过sdl,甚至从未尝试过,但看到了大量的问题我们的SDL以前就这样崩溃了,每次结果都是SDL_Init
。所以我们开始:)哈,幸好我决定在标题中注明是SDL。谢谢!