Browse code

Removed gSurface and restored previous capture_screen

Andrew Alderwick authored on 17/09/2021 08:38:01
Showing 1 changed files
... ...
@@ -26,7 +26,6 @@ WITH REGARD TO THIS SOFTWARE.
26 26
 #define BENCH 0
27 27
 
28 28
 static SDL_Window *gWindow;
29
-static SDL_Surface *gSurface;
30 29
 static SDL_Texture *gTexture;
31 30
 static SDL_Renderer *gRenderer;
32 31
 static SDL_AudioDeviceID audio_id;
... ...
@@ -152,17 +151,23 @@ toggle_zoom(Uxn *u)
152 151
 {
153 152
 	zoom = zoom == 3 ? 1 : zoom + 1;
154 153
 	SDL_SetWindowSize(gWindow, (ppu.width + PAD * 2) * zoom, (ppu.height + PAD * 2) * zoom);
155
-	gSurface = SDL_GetWindowSurface(gWindow);
156 154
 	redraw(u);
157 155
 }
158 156
 
159 157
 static void
160 158
 capture_screen(void)
161 159
 {
160
+	const Uint32 format = SDL_PIXELFORMAT_RGB24;
162 161
 	time_t t = time(NULL);
163 162
 	char fname[64];
163
+	int w, h;
164
+	SDL_Surface *surface;
165
+	SDL_GetRendererOutputSize(gRenderer, &w, &h);
166
+	surface = SDL_CreateRGBSurfaceWithFormat(0, w, h, 24, format);
167
+	SDL_RenderReadPixels(gRenderer, NULL, format, surface->pixels, surface->pitch);
164 168
 	strftime(fname, sizeof(fname), "screenshot-%Y%m%d-%H%M%S.bmp", localtime(&t));
165
-	SDL_SaveBMP(gSurface, fname);
169
+	SDL_SaveBMP(surface, fname);
170
+	SDL_FreeSurface(surface);
166 171
 	fprintf(stderr, "Saved %s\n", fname);
167 172
 }
168 173
 
... ...
@@ -170,7 +175,6 @@ static void
170 175
 quit(void)
171 176
 {
172 177
 	SDL_UnlockAudioDevice(audio_id);
173
-	SDL_FreeSurface(gSurface);
174 178
 	SDL_DestroyTexture(gTexture);
175 179
 	gTexture = NULL;
176 180
 	SDL_DestroyRenderer(gRenderer);
... ...
@@ -205,9 +209,6 @@ init(void)
205 209
 	gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (ppu.width + PAD * 2) * zoom, (ppu.height + PAD * 2) * zoom, SDL_WINDOW_SHOWN);
206 210
 	if(gWindow == NULL)
207 211
 		return error("sdl_window", SDL_GetError());
208
-	gSurface = SDL_GetWindowSurface(gWindow);
209
-	if(gSurface == NULL)
210
-		return error("sdl_surface win", SDL_GetError());
211 212
 	gRenderer = SDL_CreateRenderer(gWindow, -1, 0);
212 213
 	if(gRenderer == NULL)
213 214
 		return error("sdl_renderer", SDL_GetError());
... ...
@@ -495,8 +496,6 @@ run(Uxn *u)
495 496
 			case SDL_WINDOWEVENT:
496 497
 				if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
497 498
 					redraw(u);
498
-				else if(event.window.event == SDL_WINDOWEVENT_RESIZED)
499
-					gSurface = SDL_GetWindowSurface(gWindow);
500 499
 				break;
501 500
 			default:
502 501
 				if(event.type == stdin_event) {