Проблемы с обновлением текстуры - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть функция, которая генерирует текстуру obj и другую, которая отображает ее.Чтобы не допустить утечки памяти, я попытался вызвать только одну функцию первой раз, а затем использовать glTexSubImage2D во второй, проблема в том, что эта функция не работает для меня.Когда я запускаю программу, текстура не обновляется.

Вот функция генерации текстуры:

    GLuint importText(const std::string &text,int font_size,int red,int green,int blue, texto_data *texto){
    SDL_Color font_color = {blue,green,red};
    TTF_Font* font=TTF_OpenFont("arial.ttf",font_size);
    SDL_Surface *image = TTF_RenderText_Blended(font,text.c_str(),font_color);
    SDL_DisplayFormatAlpha(image);

    glGenTextures(1,&texto->texture);

    glBindTexture(GL_TEXTURE_2D, texto->texture);

    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA,image->w,image->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels);

    SDL_FreeSurface(image);

    TTF_CloseFont(font);

    return texto->texture;
}

А вот функция отображения:

    int carrega_texto(texto_data *texto) {   

    SDL_Color font_color = {texto->b,texto->g,texto->r};
    TTF_Font* font = TTF_OpenFont("arial.ttf",texto->tamanho);
    SDL_Surface *image = TTF_RenderText_Blended(font,texto->string,font_color);
    SDL_DisplayFormatAlpha(image);

    glBindTexture(GL_TEXTURE_2D, texto->texture);

    glTexSubImage2D(GL_TEXTURE_2D, 0,0,image->w,image->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels);

    SDL_FreeSurface(image);

    TTF_CloseFont(font);

    glBindTexture(GL_TEXTURE_2D, texto->texture);
    glColor4ub(255, 255, 255, 255);

    glBegin(GL_QUADS);
    glTexCoord2d(0,0);  glVertex2f(texto->area.a.x, texto->area.a.y);
    glTexCoord2d(1,0);  glVertex2f(texto->area.b.x, texto->area.b.y);
    glTexCoord2d(1,1);  glVertex2f(texto->area.c.x, texto->area.c.y);
    glTexCoord2d(0,1);  glVertex2f(texto->area.d.x, texto->area.d.y);
    glEnd();

}

Nt: я пытался всегда вызывать генерирующую текстуру и продолжал удалять с помощью glDeleteTextures, чтобы не использовать glTexSubImage2D.Проблема в том, что glGenTexture всегда увеличивает переменную texto-> texture , а затем переполняет ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...