Как улучшить качество шрифта в SDL TTF и динамически отображать текст и цифры - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю эмулятор 6502, и я буду sh для визуального представления состояний процессора и памяти.
Я использую SDL2 для этой цели. Я должен визуализировать текст в окне SDL при изменении состояния процессора 6502 или памяти.

, т. Е. I wi sh для отображения всего содержимого памяти, текущей выполняемой инструкции, предыдущего состояния процессора, текущего Состояние процессора в виде текстов и цифр.

Вот моя попытка визуализировать текст с использованием шрифта, уже присутствующего в моей системе linux. Позже я буду sh отображать динамические c текст и числа вместо строки c.

#include<SDL2/SDL.h>
#include<SDL2/SDL_ttf.h>
#define SCREEN_HEIGHT 640
#define SCREEN_WIDTH 480
int quit=false;
SDL_Window *window;
SDL_Renderer *renderer;
int initializeDrawing(int argc,char** argv){
    if (SDL_Init(SDL_INIT_VIDEO) != 0){
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }
    window = SDL_CreateWindow("6502 cpu display!", 100, 100, SCREEN_HEIGHT, SCREEN_WIDTH, SDL_WINDOW_SHOWN);
    if (window == nullptr){
        std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == nullptr){
        SDL_DestroyWindow(window);
        std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }
    if (TTF_Init() != 0){
        SDL_Quit();
        return 1;
    }
    return 0;
}
void loop(){
    TTF_Font* Sans = TTF_OpenFont("./ttf/LH.ttf", 13);
    SDL_Color White = {255,255,255};
    SDL_Surface* surfaceMessage = TTF_RenderText_Solid(Sans, "0xABCEDFGHIJKLMNOPQRSTUVWXYZ", White);
    SDL_Texture* Message = SDL_CreateTextureFromSurface(renderer, surfaceMessage);

    SDL_Rect Message_rect;
    Message_rect.x = 0;
    Message_rect.y = 0;
    Message_rect.w = surfaceMessage->w;
    Message_rect.h = surfaceMessage->h;

    //loop
    SDL_Event e;
    while(!quit){
        SDL_PollEvent(&e);
        //If user closes the window
        if (e.type == SDL_QUIT){
            quit = true;
        }
        //First clear the renderer
        SDL_RenderClear(renderer);
        //Draw the texture
        SDL_RenderCopy(renderer, Message, NULL, &Message_rect);
        //Update the screen
        SDL_RenderPresent(renderer);
        //Take a quick break after all that hard work
    }
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
}

Вот вывод

enter image description here

  1. Я sh, чтобы сделать текст более мелким и плавным.
  2. Я ищу идеи о том, как эффективно отображать числа и текст динамически.

1 Ответ

0 голосов
/ 18 февраля 2020

SDL2_ttf имеет несколько различных режимов рендеринга текста.

Вы используете режим Solid, который в документации описан как «Быстрый и грязный».

Если вы хотите рендеринг более высокого качества, Вы должны попробовать TTF_RenderText_Shaded или TTF_RenderText_Blended.

. Эта ссылка может быть полезна: https://www.libsdl.org/projects/docs/SDL_ttf/SDL_ttf_35.html#SEC35

...