gpt4 book ai didi

c++ - 使用 glTexImage2D 时为 "Frame not in module"

转载 作者:行者123 更新时间:2023-11-30 03:33:09 24 4
gpt4 key购买 nike

我以前从未遇到过这个错误,我在项目的其他地方使用 glTexImage2D 没有错误。下面是 Visual Studio 显示错误的屏幕截图,以及反汇编 View : Frame not in module Disassembly code

鉴于该行中有 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 的开头添加了一个断点并逐步执行了该函数。即使它不起作用,texturesurface 也确实具有看似正确的值/属性。

有什么想法吗?

最佳答案

您得到的错误意味着,进程在一段代码中崩溃,调试器找不到任何调试信息(程序集和源代码之间的关联)。对于属于/您的程序的调试构建的任何部分,通常都是这种情况。

现在在你的情况下发生的事情是,你调用 glTexImage2D 时使用的参数“说谎”了你用 data 指向它的缓冲区的内存布局> 参数。指针不携带任何有意义的元信息(就汇编级别而言,它们只是另一个具有特殊含义的整数)。所以你必须确保你传递给函数的所有参数和指针都匹配。如果不是,在该函数或它调用的任何东西(或那个调用等)的深处某个地方,内存可能会以违反操作系统设置的约束的方式被访问,从而引发这种崩溃。

您的问题的解决方案:修复您的代码,即确保您传递给 OpenGL 的内容是一致的。它在 OpenGL 驱动程序中崩溃,但这只是因为你对它撒了谎。

关于c++ - 使用 glTexImage2D 时为 "Frame not in module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com