From 4a223f91b5bf3e7d370e528993b448ac38039e68 Mon Sep 17 00:00:00 2001 From: neauoire Date: Mon, 27 Dec 2021 09:57:48 -0800 Subject: [PATCH] The screen is now a member of Ppu --- src/devices/ppu.c | 6 +++++- src/devices/ppu.h | 2 +- src/uxnemu.c | 11 ++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/devices/ppu.c b/src/devices/ppu.c index 9dae9d9..a7e8dbb 100644 --- a/src/devices/ppu.c +++ b/src/devices/ppu.c @@ -58,11 +58,15 @@ ppu_resize(Ppu *p, Uint16 width, Uint16 height) Uint8 *bg = realloc(p->bg.pixels, width * height), *fg = realloc(p->fg.pixels, width * height); + Uint32 + *screen = realloc(p->screen, width * height * sizeof(Uint32)); if(bg) p->bg.pixels = bg; if(fg) p->fg.pixels = fg; - if(bg && fg) { + if(screen) p->screen = screen; + if(bg && fg && screen) { p->width = width; p->height = height; + p->screen = screen; ppu_clear(p, &p->bg); ppu_clear(p, &p->fg); } diff --git a/src/devices/ppu.h b/src/devices/ppu.h index 9e5f217..c2be17e 100644 --- a/src/devices/ppu.h +++ b/src/devices/ppu.h @@ -22,7 +22,7 @@ typedef struct Layer { } Layer; typedef struct Ppu { - Uint32 palette[4]; + Uint32 palette[4], *screen; Uint16 width, height; Layer fg, bg; } Ppu; diff --git a/src/uxnemu.c b/src/uxnemu.c index 7802dfa..3da4dab 100644 --- a/src/uxnemu.c +++ b/src/uxnemu.c @@ -44,7 +44,7 @@ static Ppu ppu; static Apu apu[POLYPHONY]; static Device *devsystem, *devscreen, *devmouse, *devctrl, *devaudio0, *devconsole; static Uint8 zoom = 1; -static Uint32 *ppu_screen, stdin_event, audio0_event; +static Uint32 stdin_event, audio0_event; static int clamp(int val, int min, int max) @@ -118,15 +118,12 @@ set_size(Uint16 width, Uint16 height, int is_resize) gRect.y = PAD; gRect.w = ppu.width; gRect.h = ppu.height; - if(!(ppu_screen = realloc(ppu_screen, ppu.width * ppu.height * sizeof(Uint32)))) - return error("ppu_screen", "Memory failure"); - memset(ppu_screen, 0, ppu.width * ppu.height * sizeof(Uint32)); if(gTexture != NULL) SDL_DestroyTexture(gTexture); SDL_RenderSetLogicalSize(gRenderer, ppu.width + PAD * 2, ppu.height + PAD * 2); gTexture = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, ppu.width + PAD * 2, ppu.height + PAD * 2); if(gTexture == NULL || SDL_SetTextureBlendMode(gTexture, SDL_BLENDMODE_NONE)) return error("gTexture", SDL_GetError()); - if(SDL_UpdateTexture(gTexture, NULL, ppu_screen, sizeof(Uint32)) != 0) + if(SDL_UpdateTexture(gTexture, NULL, ppu.screen, sizeof(Uint32)) != 0) return error("SDL_UpdateTexture", SDL_GetError()); if(is_resize) set_window_size(gWindow, (ppu.width + PAD * 2) * zoom, (ppu.height + PAD * 2) * zoom); @@ -155,8 +152,8 @@ redraw(Uxn *u) { if(devsystem->dat[0xe]) ppu_debug(&ppu, u->wst.dat, u->wst.ptr, u->rst.ptr, u->ram.dat); - ppu_redraw(&ppu, ppu_screen); - if(SDL_UpdateTexture(gTexture, &gRect, ppu_screen, ppu.width * sizeof(Uint32)) != 0) + ppu_redraw(&ppu, ppu.screen); + if(SDL_UpdateTexture(gTexture, &gRect, ppu.screen, ppu.width * sizeof(Uint32)) != 0) error("SDL_UpdateTexture", SDL_GetError()); SDL_RenderClear(gRenderer); SDL_RenderCopy(gRenderer, gTexture, NULL, NULL);