// // Created by william on 16/05/24. // #include "gui.h" #include "log.h" NesGui gui; int gui_init() { int renderer_flags = SDL_RENDERER_ACCELERATED; int window_flags = 0; if (SDL_Init(SDL_INIT_VIDEO) < 0) { log_error("Couldn't initialize SDL: %s", SDL_GetError()); return -1; } gui.window = SDL_CreateWindow("NES Emulator", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, GUI_WIDTH, GUI_HEIGHT, window_flags); if (!gui.window) { log_error("Failed to open %d x %d window: %s", GUI_WIDTH, GUI_HEIGHT, SDL_GetError()); return -1; } SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); gui.renderer = SDL_CreateRenderer(gui.window, -1, renderer_flags); if (!gui.renderer) { log_error("Failed to create renderer: %s\n", SDL_GetError()); return -1; } return 1; } int gui_input() { SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: return -1; default: break; } } return 1; } void gui_prepare() { SDL_SetRenderDrawColor(gui.renderer, 96, 128, 255, 255); SDL_RenderClear(gui.renderer); } void gui_render() { for (int x = 0; x < CANVAS_WIDTH; x++) { for (int y = 0; y < CANVAS_HEIGHT; y++) { int pixel_index = CANVAS_INDEX(x, y); Pixel pixel = gui.canvas.pixels[pixel_index]; SDL_SetRenderDrawColor(gui.renderer, pixel.r, pixel.g, pixel.b, 255); for (int i = 0; i < GUI_SCALING; i++) { for (int j = 0; j < GUI_SCALING; j++) { int scaled_x = x * GUI_SCALING + i; int scaled_y = y * GUI_SCALING + j; SDL_RenderDrawPoint(gui.renderer, scaled_x, scaled_y); } } } } } void gui_present() { SDL_RenderPresent(gui.renderer); } void gui_uninit() { } Canvas *gui_get_canvas() { return &gui.canvas; }