无法将SDL2 ttf字体绘制为纹理

时间:2016-06-30 22:53:30

标签: c++ opengl sdl-2 sdl-ttf

所以我试图在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加载了其他纹理,使用与我尝试使用相同的方法完美地运行。

0 个答案:

没有答案