stb_truetype.h и SDL2 меняют цвет шрифта - PullRequest
0 голосов
/ 24 мая 2019

Я использую stb_truetype.h и SDL2 для визуализации текста. Есть ли простой способ изменить цвет шрифта? Вот что у меня есть (текст - это символ *):

while (*text) {
    if (*text >= 32 && *text < 128) {
      stbtt_aligned_quad q;
      stbtt_GetBakedQuad(font->cdata, 512, 512, *text - 32, &x, &y, &q, 1);
      SDL_Rect src_rect = {.x = (int)512 * q.s0 - 1,
                           .y = (int)512 * (q.t0) - 1,
                           .w = (int)512 * (q.s1 - q.s0) + 1,
                           .h = (int)512 * (q.t1 - q.t0) + 1};
      SDL_Rect dst_rect = {
          .x = q.x0, .y = q.y0, .w = q.x1 - q.x0, .h = q.y1 - q.y0};


      // Has no effect because I am just grabbing a rect from the font data.
      SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
      // Always renders the font white.
      SDL_RenderCopy(renderer, font->texture, &src_rect, &dst_rect);
    }
    ++text;
}

Я бы хотел иметь возможность отображать шрифт разными цветами. Сейчас шрифт всегда белый.

1 Ответ

0 голосов
/ 24 мая 2019

Нашел способ сделать это, используя SDL_SetTextureColorMod: (* https://wiki.libsdl.org/SDL_SetTextureColorMod)

SDL_SetTextureColorMod(font->texture, 255, 0, 0);

, например, поменяет шрифт на красный.

Мой оригинальный код использует это:

while (*text) {
    if (*text >= 32 && *text < 128) {
      stbtt_aligned_quad q;
      stbtt_GetBakedQuad(font->cdata, 512, 512, *text - 32, &x, &y, &q, 1);
      SDL_Rect src_rect = {.x = (int)512 * q.s0 - 1,
                           .y = (int)512 * (q.t0) - 1,
                           .w = (int)512 * (q.s1 - q.s0) + 1,
                           .h = (int)512 * (q.t1 - q.t0) + 1};
      SDL_Rect dst_rect = {
          .x = q.x0, .y = q.y0, .w = q.x1 - q.x0, .h = q.y1 - q.y0};

      // set the font texture to display red.
      SDL_SetTextureColorMod(font->texture, 255, 0, 0);
      SDL_RenderCopy(renderer, font->texture, &src_rect, &dst_rect);
    }
    ++text;
}
...