我之前从未遇到过此错误,并且我在项目中的其他位置使用了glTexImage2D
且没有错误。以下是Visual Studio显示的错误的屏幕截图,以及反汇编的 View :
鉴于该行中包含ptr
,我假设存在指针错误,但我不知道自己在做什么错。
下面是我用来将SDL_surface
转换为纹理的函数。
void surfaceToTexture(SDL_Surface *&surface, GLuint &texture) {
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->pixels);
glDisable(GL_TEXTURE_2D);
}
此功能在程序的其他地方成功,例如在加载文本时:
SDL_Surface *surface;
surface = TTF_RenderText_Blended(tempFont, message.c_str(), color);
if (surface == NULL)
printf("Unable to generate text surface using font: %s! SDL_ttf Error: %s\n", font.c_str(), TTF_GetError());
else {
SDL_LockSurface(surface);
width = surface->w;
height = surface->h;
if (style != TTF_STYLE_NORMAL)
TTF_SetFontStyle(tempFont, TTF_STYLE_NORMAL);
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
但是在加载图像时不行:
SDL_Surface* surface = IMG_Load(path.c_str());
if (surface == NULL)
printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
else{
SDL_LockSurface(surface);
width = (w==0)?surface->w:w;
height = (h==0)?surface->h/4:h;
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
这两个示例都是从定义了
texture
的类中提取的。图像的路径正确。
我知道是
glTexImage2D
导致此问题的原因,因为我在surfaceToTexture
的开头添加了一个断点并逐步执行了该功能。即使不起作用,
texture
和surface
确实具有看似正确的值/属性。有任何想法吗?
最佳答案
您得到的错误意味着,该proc崩溃在一段代码中,调试器无法找到任何调试信息(汇编和源代码之间的关联)。对于您的程序的调试版本中的任何部分,通常都是这种情况。
现在,在您的情况下,发生的事情是,您调用glTexImage2D
时使用的参数是data
参数所指向的缓冲区的内存布局。指针不携带任何有意义的元信息(就汇编级别而言,它们只是另一个具有特殊含义的整数)。因此,您必须确保传递给函数的所有参数以及指针都匹配。如果没有,则可能以违反操作系统设置的约束的方式访问该函数的深处或其调用(或调用的对象等)的内存,从而触发此类崩溃。
解决问题的方法:修复代码,即确保传递给OpenGL的内容是一致的。它在OpenGL驱动程序中崩溃,但这仅仅是因为您撒谎了。
关于c++ - 使用glTexImage2D时“Frame not in module”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43169176/