Browse code

The screen is now a member of Ppu

neauoire authored on 27/12/2021 17:57:48
Showing 3 changed files
... ...
@@ -58,11 +58,15 @@ ppu_resize(Ppu *p, Uint16 width, Uint16 height)
58 58
 	Uint8
59 59
 		*bg = realloc(p->bg.pixels, width * height),
60 60
 		*fg = realloc(p->fg.pixels, width * height);
61
+	Uint32
62
+		*screen = realloc(p->screen, width * height * sizeof(Uint32));
61 63
 	if(bg) p->bg.pixels = bg;
62 64
 	if(fg) p->fg.pixels = fg;
63
-	if(bg && fg) {
65
+	if(screen) p->screen = screen;
66
+	if(bg && fg && screen) {
64 67
 		p->width = width;
65 68
 		p->height = height;
69
+		p->screen = screen;
66 70
 		ppu_clear(p, &p->bg);
67 71
 		ppu_clear(p, &p->fg);
68 72
 	}
... ...
@@ -22,7 +22,7 @@ typedef struct Layer {
22 22
 } Layer;
23 23
 
24 24
 typedef struct Ppu {
25
-	Uint32 palette[4];
25
+	Uint32 palette[4], *screen;
26 26
 	Uint16 width, height;
27 27
 	Layer fg, bg;
28 28
 } Ppu;
... ...
@@ -44,7 +44,7 @@ static Ppu ppu;
44 44
 static Apu apu[POLYPHONY];
45 45
 static Device *devsystem, *devscreen, *devmouse, *devctrl, *devaudio0, *devconsole;
46 46
 static Uint8 zoom = 1;
47
-static Uint32 *ppu_screen, stdin_event, audio0_event;
47
+static Uint32 stdin_event, audio0_event;
48 48
 
49 49
 static int
50 50
 clamp(int val, int min, int max)
... ...
@@ -118,15 +118,12 @@ set_size(Uint16 width, Uint16 height, int is_resize)
118 118
 	gRect.y = PAD;
119 119
 	gRect.w = ppu.width;
120 120
 	gRect.h = ppu.height;
121
-	if(!(ppu_screen = realloc(ppu_screen, ppu.width * ppu.height * sizeof(Uint32))))
122
-		return error("ppu_screen", "Memory failure");
123
-	memset(ppu_screen, 0, ppu.width * ppu.height * sizeof(Uint32));
124 121
 	if(gTexture != NULL) SDL_DestroyTexture(gTexture);
125 122
 	SDL_RenderSetLogicalSize(gRenderer, ppu.width + PAD * 2, ppu.height + PAD * 2);
126 123
 	gTexture = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, ppu.width + PAD * 2, ppu.height + PAD * 2);
127 124
 	if(gTexture == NULL || SDL_SetTextureBlendMode(gTexture, SDL_BLENDMODE_NONE))
128 125
 		return error("gTexture", SDL_GetError());
129
-	if(SDL_UpdateTexture(gTexture, NULL, ppu_screen, sizeof(Uint32)) != 0)
126
+	if(SDL_UpdateTexture(gTexture, NULL, ppu.screen, sizeof(Uint32)) != 0)
130 127
 		return error("SDL_UpdateTexture", SDL_GetError());
131 128
 	if(is_resize)
132 129
 		set_window_size(gWindow, (ppu.width + PAD * 2) * zoom, (ppu.height + PAD * 2) * zoom);
... ...
@@ -155,8 +152,8 @@ redraw(Uxn *u)
155 152
 {
156 153
 	if(devsystem->dat[0xe])
157 154
 		ppu_debug(&ppu, u->wst.dat, u->wst.ptr, u->rst.ptr, u->ram.dat);
158
-	ppu_redraw(&ppu, ppu_screen);
159
-	if(SDL_UpdateTexture(gTexture, &gRect, ppu_screen, ppu.width * sizeof(Uint32)) != 0)
155
+	ppu_redraw(&ppu, ppu.screen);
156
+	if(SDL_UpdateTexture(gTexture, &gRect, ppu.screen, ppu.width * sizeof(Uint32)) != 0)
160 157
 		error("SDL_UpdateTexture", SDL_GetError());
161 158
 	SDL_RenderClear(gRenderer);
162 159
 	SDL_RenderCopy(gRenderer, gTexture, NULL, NULL);