我正在构建一个6502仿真器,我希望直观地表示cpu和内存状态。
我正为此目的使用SDL2。当6502 cpu或内存更改状态时,我必须在SDL窗口上呈现文本。
也就是说,我希望以文本和数字的形式显示整个内存内容、正在执行的当前指令、以前的cpu状态、当前cpu状态。
下面是我使用linux系统中已经存在的字体呈现文本的尝试。稍后,我希望呈现动态文本和数字,而不是静态字符串。
#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();
}
这是输出
发布于 2020-02-18 10:10:49
SDL2_ttf有几种不同的文本呈现模式。
您正在使用模式Solid
,文献资料将其描述为“快速和肮脏”:
渲染有三种方式:
如果您想要更高质量的呈现,您应该尝试*_Shaded
或*_Blended
函数。
还请注意,您几乎肯定希望使用TTF_RenderUTF8
系列函数来确保非拉丁字符的正确呈现。(这可能与您的6502仿真器没有直接关系,但它并不有害,也是很好的做法。)更多信息:混和
https://stackoverflow.com/questions/60181474
复制相似问题