...
|
...
|
@@ -45,9 +45,9 @@ WITH REGARD TO THIS SOFTWARE.
|
45
|
45
|
#define TIMEOUT_MS 334
|
46
|
46
|
#define BENCH 0
|
47
|
47
|
|
48
|
|
-static SDL_Window *gWindow;
|
49
|
|
-static SDL_Texture *gTexture;
|
50
|
|
-static SDL_Renderer *gRenderer;
|
|
48
|
+static SDL_Window *emu_window;
|
|
49
|
+static SDL_Texture *emu_texture;
|
|
50
|
+static SDL_Renderer *emu_renderer;
|
51
|
51
|
static SDL_AudioDeviceID audio_id;
|
52
|
52
|
static SDL_Rect gRect;
|
53
|
53
|
static SDL_Thread *stdin_thread;
|
...
|
...
|
@@ -57,8 +57,7 @@ Uint16 dei_mask[] = {0x0000, 0x0000, 0x003c, 0x0014, 0x0014, 0x0014, 0x0014, 0x0
|
57
|
57
|
|
58
|
58
|
/* devices */
|
59
|
59
|
|
60
|
|
-static Uint8 zoom = 1;
|
61
|
|
-static Uint32 stdin_event, audio0_event;
|
|
60
|
+static Uint32 stdin_event, audio0_event, zoom = 1;
|
62
|
61
|
static Uint64 exec_deadline, deadline_interval, ms_interval;
|
63
|
62
|
|
64
|
63
|
char *rom_path;
|
...
|
...
|
@@ -180,14 +179,15 @@ set_size(void)
|
180
|
179
|
gRect.y = PAD;
|
181
|
180
|
gRect.w = uxn_screen.width;
|
182
|
181
|
gRect.h = uxn_screen.height;
|
183
|
|
- if(gTexture != NULL) SDL_DestroyTexture(gTexture);
|
184
|
|
- SDL_RenderSetLogicalSize(gRenderer, uxn_screen.width + PAD * 2, uxn_screen.height + PAD * 2);
|
185
|
|
- gTexture = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STATIC, uxn_screen.width, uxn_screen.height);
|
186
|
|
- if(gTexture == NULL || SDL_SetTextureBlendMode(gTexture, SDL_BLENDMODE_NONE))
|
187
|
|
- return system_error("gTexture", SDL_GetError());
|
188
|
|
- if(SDL_UpdateTexture(gTexture, NULL, uxn_screen.pixels, sizeof(Uint32)) != 0)
|
|
182
|
+ if(emu_texture != NULL)
|
|
183
|
+ SDL_DestroyTexture(emu_texture);
|
|
184
|
+ SDL_RenderSetLogicalSize(emu_renderer, uxn_screen.width + PAD * 2, uxn_screen.height + PAD * 2);
|
|
185
|
+ emu_texture = SDL_CreateTexture(emu_renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STATIC, uxn_screen.width, uxn_screen.height);
|
|
186
|
+ if(emu_texture == NULL || SDL_SetTextureBlendMode(emu_texture, SDL_BLENDMODE_NONE))
|
|
187
|
+ return system_error("emu_texture", SDL_GetError());
|
|
188
|
+ if(SDL_UpdateTexture(emu_texture, NULL, uxn_screen.pixels, sizeof(Uint32)) != 0)
|
189
|
189
|
return system_error("SDL_UpdateTexture", SDL_GetError());
|
190
|
|
- set_window_size(gWindow, (uxn_screen.width + PAD * 2) * zoom, (uxn_screen.height + PAD * 2) * zoom);
|
|
190
|
+ set_window_size(emu_window, (uxn_screen.width + PAD * 2) * zoom, (uxn_screen.height + PAD * 2) * zoom);
|
191
|
191
|
return 1;
|
192
|
192
|
}
|
193
|
193
|
|
...
|
...
|
@@ -197,11 +197,11 @@ redraw(void)
|
197
|
197
|
if(gRect.w != uxn_screen.width || gRect.h != uxn_screen.height)
|
198
|
198
|
set_size();
|
199
|
199
|
screen_redraw();
|
200
|
|
- if(SDL_UpdateTexture(gTexture, NULL, uxn_screen.pixels, uxn_screen.width * sizeof(Uint32)) != 0)
|
|
200
|
+ if(SDL_UpdateTexture(emu_texture, NULL, uxn_screen.pixels, uxn_screen.width * sizeof(Uint32)) != 0)
|
201
|
201
|
system_error("SDL_UpdateTexture", SDL_GetError());
|
202
|
|
- SDL_RenderClear(gRenderer);
|
203
|
|
- SDL_RenderCopy(gRenderer, gTexture, NULL, &gRect);
|
204
|
|
- SDL_RenderPresent(gRenderer);
|
|
202
|
+ SDL_RenderClear(emu_renderer);
|
|
203
|
+ SDL_RenderCopy(emu_renderer, emu_texture, NULL, &gRect);
|
|
204
|
+ SDL_RenderPresent(emu_renderer);
|
205
|
205
|
}
|
206
|
206
|
|
207
|
207
|
static int
|
...
|
...
|
@@ -217,13 +217,13 @@ init(void)
|
217
|
217
|
as.userdata = NULL;
|
218
|
218
|
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0)
|
219
|
219
|
return system_error("sdl", SDL_GetError());
|
220
|
|
- gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (WIDTH + PAD * 2) * zoom, (HEIGHT + PAD * 2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
221
|
|
- if(gWindow == NULL)
|
|
220
|
+ emu_window = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (WIDTH + PAD * 2) * zoom, (HEIGHT + PAD * 2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
|
221
|
+ if(emu_window == NULL)
|
222
|
222
|
return system_error("sdl_window", SDL_GetError());
|
223
|
|
- gRenderer = SDL_CreateRenderer(gWindow, -1, 0);
|
224
|
|
- if(gRenderer == NULL)
|
|
223
|
+ emu_renderer = SDL_CreateRenderer(emu_window, -1, 0);
|
|
224
|
+ if(emu_renderer == NULL)
|
225
|
225
|
return system_error("sdl_renderer", SDL_GetError());
|
226
|
|
- SDL_SetRenderDrawColor(gRenderer, 0x00, 0x00, 0x00, 0xff);
|
|
226
|
+ SDL_SetRenderDrawColor(emu_renderer, 0x00, 0x00, 0x00, 0xff);
|
227
|
227
|
audio_id = SDL_OpenAudioDevice(NULL, 0, &as, NULL, 0);
|
228
|
228
|
if(!audio_id)
|
229
|
229
|
system_error("sdl_audio", SDL_GetError());
|
...
|
...
|
@@ -256,7 +256,7 @@ start(Uxn *u, char *rom, int queue)
|
256
|
256
|
exec_deadline = SDL_GetPerformanceCounter() + deadline_interval;
|
257
|
257
|
if(!uxn_eval(u, PAGE_PROGRAM))
|
258
|
258
|
return system_error("Boot", "Failed to eval rom.");
|
259
|
|
- SDL_SetWindowTitle(gWindow, rom);
|
|
259
|
+ SDL_SetWindowTitle(emu_window, rom);
|
260
|
260
|
return 1;
|
261
|
261
|
}
|
262
|
262
|
|
...
|
...
|
@@ -265,7 +265,7 @@ set_zoom(Uint8 z)
|
265
|
265
|
{
|
266
|
266
|
if(z >= 1) {
|
267
|
267
|
zoom = z;
|
268
|
|
- set_window_size(gWindow, (uxn_screen.width + PAD * 2) * zoom, (uxn_screen.height + PAD * 2) * zoom);
|
|
268
|
+ set_window_size(emu_window, (uxn_screen.width + PAD * 2) * zoom, (uxn_screen.height + PAD * 2) * zoom);
|
269
|
269
|
}
|
270
|
270
|
}
|
271
|
271
|
|
...
|
...
|
@@ -274,23 +274,23 @@ capture_screen(void)
|
274
|
274
|
{
|
275
|
275
|
const Uint32 format = SDL_PIXELFORMAT_RGB24;
|
276
|
276
|
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
277
|
|
- /* SDL_PIXELFORMAT_RGB24 */
|
278
|
|
- Uint32 Rmask = 0x000000FF;
|
279
|
|
- Uint32 Gmask = 0x0000FF00;
|
280
|
|
- Uint32 Bmask = 0x00FF0000;
|
|
277
|
+ /* SDL_PIXELFORMAT_RGB24 */
|
|
278
|
+ Uint32 Rmask = 0x000000FF;
|
|
279
|
+ Uint32 Gmask = 0x0000FF00;
|
|
280
|
+ Uint32 Bmask = 0x00FF0000;
|
281
|
281
|
#else
|
282
|
|
- /* SDL_PIXELFORMAT_BGR24 */
|
283
|
|
- Uint32 Rmask = 0x00FF0000;
|
284
|
|
- Uint32 Gmask = 0x0000FF00;
|
285
|
|
- Uint32 Bmask = 0x000000FF;
|
|
282
|
+ /* SDL_PIXELFORMAT_BGR24 */
|
|
283
|
+ Uint32 Rmask = 0x00FF0000;
|
|
284
|
+ Uint32 Gmask = 0x0000FF00;
|
|
285
|
+ Uint32 Bmask = 0x000000FF;
|
286
|
286
|
#endif
|
287
|
287
|
time_t t = time(NULL);
|
288
|
288
|
char fname[64];
|
289
|
289
|
int w, h;
|
290
|
290
|
SDL_Surface *surface;
|
291
|
|
- SDL_GetRendererOutputSize(gRenderer, &w, &h);
|
|
291
|
+ SDL_GetRendererOutputSize(emu_renderer, &w, &h);
|
292
|
292
|
surface = SDL_CreateRGBSurface(0, w, h, 24, Rmask, Gmask, Bmask, 0);
|
293
|
|
- SDL_RenderReadPixels(gRenderer, NULL, format, surface->pixels, surface->pitch);
|
|
293
|
+ SDL_RenderReadPixels(emu_renderer, NULL, format, surface->pixels, surface->pitch);
|
294
|
294
|
strftime(fname, sizeof(fname), "screenshot-%Y%m%d-%H%M%S.bmp", localtime(&t));
|
295
|
295
|
SDL_SaveBMP(surface, fname);
|
296
|
296
|
SDL_FreeSurface(surface);
|
...
|
...
|
@@ -487,11 +487,13 @@ run(Uxn *u)
|
487
|
487
|
if(uxn_screen.x2)
|
488
|
488
|
redraw();
|
489
|
489
|
}
|
490
|
|
- if(BENCH);
|
|
490
|
+ if(BENCH)
|
|
491
|
+ ;
|
491
|
492
|
else if(screen_vector || uxn_screen.x2) {
|
492
|
493
|
Uint64 delay_ms = (next_refresh - now) / ms_interval;
|
493
|
494
|
if(delay_ms > 0) SDL_Delay(delay_ms);
|
494
|
|
- } else SDL_WaitEvent(NULL);
|
|
495
|
+ } else
|
|
496
|
+ SDL_WaitEvent(NULL);
|
495
|
497
|
}
|
496
|
498
|
}
|
497
|
499
|
|