...
|
...
|
@@ -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) {
|