所以我试图在opengl中用SDL2_ttf字体创建一个纹理,如下所示:
font->loadFont("../fonts/OpenSans-Regular.ttf", 104, SDL_Color{ 255, 255, 255 }, "Some text");
void Texture::loadFont(const char *filepath, unsigned int size, SDL_Color color, const char *text) {
TTF_Font *f = TTF_OpenFont(filepath, size);
if (f == NULL) std::cout << TTF_GetError() << std::endl;
SDL_Surface *texture = TTF_RenderText_Solid(f, text, color);
std::cout << texture->w << ", " << texture->h << std::endl;
GLuint result;
glGenTextures(1, &result);
glBindTexture(GL_TEXTURE_2D, result);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels);
glBindTexture(GL_TEXTURE_2D, 0);
this->texture = result;
}
但是在调用glTexImage2D时我一直收到这个错误:
Test Game.exe中0x03F04AEA(nvoglv32.dll)抛出异常:0xC0000005:访问冲突读取位置0x06EC0000。
当我尝试以小于104的尺寸运行它时,例如24,它不会崩溃,但纹理只在非常奇怪的地方显示一些白色像素,这显然是不正确的。
我已经使用SDL_Image IMG_Load加载了其他纹理,使用与我尝试使用相同的方法完美地运行。