Mercurial > repos > blastem
annotate render_sdl.c @ 2015:8a64d86cc362
Use different variants for Genesis controllers to better represent what types are out there
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 04 Nov 2020 22:55:26 -0800 |
parents | 66f08024d9e9 |
children | 193b804c9845 |
rev | line source |
---|---|
467
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
445
diff
changeset
|
1 /* |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
445
diff
changeset
|
2 Copyright 2013 Michael Pavone |
487
c08a4efeee7f
Update opengl branch from default. Fix build breakage unrelated to merge
Mike Pavone <pavone@retrodev.com>
diff
changeset
|
3 This file is part of BlastEm. |
467
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
445
diff
changeset
|
4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
445
diff
changeset
|
5 */ |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include <stdlib.h> |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #include <stdio.h> |
745
daa31ee7d8cd
Get windows build compiling again post-merge
Michael Pavone <pavone@retrodev.com>
parents:
744
diff
changeset
|
8 #include <string.h> |
500
251fe7a75a14
Preserve aspect ratio unless config file says otherwise
Mike Pavone <pavone@retrodev.com>
parents:
498
diff
changeset
|
9 #include <math.h> |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 #include "render.h" |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
11 #include "render_sdl.h" |
66 | 12 #include "blastem.h" |
1103
22e87b739ad6
WIP split of ROM loading/argument parsing from Genesis emulation code. Compiles and doesn't crash, but nothing works. Still a few too many globals as well.
Michael Pavone <pavone@retrodev.com>
parents:
1102
diff
changeset
|
13 #include "genesis.h" |
1583
430dd12e4010
Refactor to split device bindings from IO emulation code
Michael Pavone <pavone@retrodev.com>
parents:
1580
diff
changeset
|
14 #include "bindings.h" |
497
0820a71b80f3
Move shader files to their own directory. Read shaders from /.config/blastem/shaders or from path_to_exe/shaders instead of the current working directory.
Mike Pavone <pavone@retrodev.com>
parents:
495
diff
changeset
|
15 #include "util.h" |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
16 #include "paths.h" |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
17 #include "ppm.h" |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
18 #include "png.h" |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
19 #include "config.h" |
1603
c0727712d529
Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents:
1600
diff
changeset
|
20 #include "controller_info.h" |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
22 #ifndef DISABLE_OPENGL |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
23 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
24 #include <SDL_opengles2.h> |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
25 #else |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
26 #include <GL/glew.h> |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
27 #endif |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
28 #endif |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
29 |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
30 #define MAX_EVENT_POLL_PER_FRAME 2 |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
31 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
32 static SDL_Window *main_window; |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
33 static SDL_Window **extra_windows; |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
34 static SDL_Renderer *main_renderer; |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
35 static SDL_Renderer **extra_renderers; |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
36 static SDL_Texture **sdl_textures; |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
37 static window_close_handler *close_handlers; |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
38 static uint8_t num_textures; |
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
39 static SDL_Rect main_clip; |
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
40 static SDL_GLContext *main_context; |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
41 |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
42 static int main_width, main_height, windowed_width, windowed_height, is_fullscreen; |
914
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
43 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
44 static uint8_t render_gl = 1; |
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
45 static uint8_t scanlines = 0; |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
47 static uint32_t last_frame = 0; |
54
3b79cbcf6846
Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents:
43
diff
changeset
|
48 |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
49 static SDL_mutex *audio_mutex, *frame_mutex, *free_buffer_mutex; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
50 static SDL_cond *audio_ready, *frame_ready; |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
51 static uint8_t quitting = 0; |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
52 |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
53 enum { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
54 SYNC_AUDIO, |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
55 SYNC_AUDIO_THREAD, |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
56 SYNC_VIDEO, |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
57 SYNC_EXTERNAL |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
58 }; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
59 |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
60 static uint8_t sync_src; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
61 static uint32_t min_buffered; |
354
15dd6418fe67
Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents:
342
diff
changeset
|
62 |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
63 uint32_t **frame_buffers; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
64 uint32_t num_buffers; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
65 uint32_t buffer_storage; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
66 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
67 uint32_t render_min_buffered(void) |
1552
13a82adb185b
Add support for float32 format audio samples
Michael Pavone <pavone@retrodev.com>
parents:
1551
diff
changeset
|
68 { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
69 return min_buffered; |
1796
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
70 } |
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
71 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
72 uint8_t render_is_audio_sync(void) |
1796
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
73 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
74 return sync_src < SYNC_VIDEO; |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
75 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
76 |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
77 uint8_t render_should_release_on_exit(void) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
78 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
79 return sync_src != SYNC_AUDIO_THREAD; |
1796
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
80 } |
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
81 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
82 void render_buffer_consumed(audio_source *src) |
1796
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
83 { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
84 SDL_CondSignal(src->opaque); |
1552
13a82adb185b
Add support for float32 format audio samples
Michael Pavone <pavone@retrodev.com>
parents:
1551
diff
changeset
|
85 } |
13a82adb185b
Add support for float32 format audio samples
Michael Pavone <pavone@retrodev.com>
parents:
1551
diff
changeset
|
86 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
87 static void audio_callback(void * userdata, uint8_t *byte_stream, int len) |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 { |
354
15dd6418fe67
Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents:
342
diff
changeset
|
89 SDL_LockMutex(audio_mutex); |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
90 uint8_t all_ready; |
364
62177cc39049
Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents:
361
diff
changeset
|
91 do { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
92 all_ready = all_sources_ready(); |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
93 if (!quitting && !all_ready) { |
364
62177cc39049
Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents:
361
diff
changeset
|
94 SDL_CondWait(audio_ready, audio_mutex); |
62177cc39049
Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents:
361
diff
changeset
|
95 } |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
96 } while(!quitting && !all_ready); |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
97 if (!quitting) { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
98 mix_and_convert(byte_stream, len, NULL); |
361 | 99 } |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
100 SDL_UnlockMutex(audio_mutex); |
1117
928a65750345
Initial support for Genesis/Megadrive PBC mode. VDP still needs Mode 4 to be useful.
Michael Pavone <pavone@retrodev.com>
parents:
1103
diff
changeset
|
101 } |
928a65750345
Initial support for Genesis/Megadrive PBC mode. VDP still needs Mode 4 to be useful.
Michael Pavone <pavone@retrodev.com>
parents:
1103
diff
changeset
|
102 |
1564
48b08986bf8f
Mostly working dynamic rate control. Needs some tweaking, especially for PAL
Michael Pavone <pavone@retrodev.com>
parents:
1563
diff
changeset
|
103 #define NO_LAST_BUFFERED -2000000000 |
48b08986bf8f
Mostly working dynamic rate control. Needs some tweaking, especially for PAL
Michael Pavone <pavone@retrodev.com>
parents:
1563
diff
changeset
|
104 static int32_t last_buffered = NO_LAST_BUFFERED; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
105 static float average_change; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
106 #define BUFFER_FRAMES_THRESHOLD 6 |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
107 #define BASE_MAX_ADJUST 0.0125 |
1565
61fafcbc2c38
Audio DRC now sounds good in both NTSC and PAL, just need to adjust constants to minimize latency without leading to dropouts
Michael Pavone <pavone@retrodev.com>
parents:
1564
diff
changeset
|
108 static float max_adjust; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
109 static int32_t cur_min_buffered; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
110 static uint32_t min_remaining_buffer; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
111 static void audio_callback_drc(void *userData, uint8_t *byte_stream, int len) |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
112 { |
1589
780604a036e4
Limit underflow warning spam
Michael Pavone <pavone@retrodev.com>
parents:
1588
diff
changeset
|
113 if (cur_min_buffered < 0) { |
780604a036e4
Limit underflow warning spam
Michael Pavone <pavone@retrodev.com>
parents:
1588
diff
changeset
|
114 //underflow last frame, but main thread hasn't gotten a chance to call SDL_PauseAudio yet |
780604a036e4
Limit underflow warning spam
Michael Pavone <pavone@retrodev.com>
parents:
1588
diff
changeset
|
115 return; |
780604a036e4
Limit underflow warning spam
Michael Pavone <pavone@retrodev.com>
parents:
1588
diff
changeset
|
116 } |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
117 cur_min_buffered = mix_and_convert(byte_stream, len, &min_remaining_buffer); |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
118 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
119 |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
120 static void audio_callback_run_on_audio(void *user_data, uint8_t *byte_stream, int len) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
121 { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
122 if (current_system) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
123 current_system->resume_context(current_system); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
124 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
125 mix_and_convert(byte_stream, len, NULL); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
126 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
127 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
128 void render_lock_audio() |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
129 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
130 if (sync_src == SYNC_AUDIO) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
131 SDL_LockMutex(audio_mutex); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
132 } else { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
133 SDL_LockAudio(); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
134 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
135 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
136 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
137 void render_unlock_audio() |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
138 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
139 if (sync_src == SYNC_AUDIO) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
140 SDL_UnlockMutex(audio_mutex); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
141 } else { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
142 SDL_UnlockAudio(); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
143 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
144 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
145 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
146 static void render_close_audio() |
361 | 147 { |
148 SDL_LockMutex(audio_mutex); | |
149 quitting = 1; | |
150 SDL_CondSignal(audio_ready); | |
151 SDL_UnlockMutex(audio_mutex); | |
152 SDL_CloseAudio(); | |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
153 /* |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
154 FIXME: move this to render_audio.c |
1797
5ff8f0d28188
Make sure there are no races between main thread and audio thread around mix_buf. Fix lack of proper termination in shader loading code
Mike Pavone <pavone@retrodev.com>
parents:
1796
diff
changeset
|
155 if (mix_buf) { |
5ff8f0d28188
Make sure there are no races between main thread and audio thread around mix_buf. Fix lack of proper termination in shader loading code
Mike Pavone <pavone@retrodev.com>
parents:
1796
diff
changeset
|
156 free(mix_buf); |
5ff8f0d28188
Make sure there are no races between main thread and audio thread around mix_buf. Fix lack of proper termination in shader loading code
Mike Pavone <pavone@retrodev.com>
parents:
1796
diff
changeset
|
157 mix_buf = NULL; |
5ff8f0d28188
Make sure there are no races between main thread and audio thread around mix_buf. Fix lack of proper termination in shader loading code
Mike Pavone <pavone@retrodev.com>
parents:
1796
diff
changeset
|
158 } |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
159 */ |
361 | 160 } |
161 | |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
162 void *render_new_audio_opaque(void) |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
163 { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
164 return SDL_CreateCond(); |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
165 } |
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
166 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
167 void render_free_audio_opaque(void *opaque) |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
168 { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
169 SDL_DestroyCond(opaque); |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
170 } |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
171 |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
172 void render_audio_created(audio_source *source) |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
173 { |
1981
3537514ea206
Go back to unpausing audio in render_video_loop to ensure the core is no longer running on the main thread when audio callbacks start when using run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1980
diff
changeset
|
174 if (sync_src == SYNC_AUDIO) { |
2004
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
175 //SDL_PauseAudio acquires the audio device lock, which is held while the callback runs |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
176 //since our callback can itself be stuck waiting on the audio_ready condition variable |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
177 //calling SDL_PauseAudio(0) again for audio sources after the first can deadlock |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
178 //fortunately SDL_GetAudioStatus does not acquire the lock so is safe to call here |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
179 if (SDL_GetAudioStatus() == SDL_AUDIO_PAUSED) { |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
180 SDL_PauseAudio(0); |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
181 } |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
182 } |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
183 if (current_system && sync_src == SYNC_AUDIO_THREAD) { |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
184 system_request_exit(current_system, 0); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
185 } |
1796
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
186 } |
51417bb557b6
Configurable gain for overall output and individual components
Michael Pavone <pavone@retrodev.com>
parents:
1792
diff
changeset
|
187 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
188 void render_source_paused(audio_source *src, uint8_t remaining_sources) |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
189 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
190 if (sync_src == SYNC_AUDIO) { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
191 SDL_CondSignal(audio_ready); |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
192 } |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
193 if (!remaining_sources && render_is_audio_sync()) { |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
194 SDL_PauseAudio(1); |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
195 if (sync_src == SYNC_AUDIO_THREAD) { |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
196 SDL_CondSignal(frame_ready); |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
197 } |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
198 } |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
199 } |
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
200 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
201 void render_source_resumed(audio_source *src) |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
202 { |
1981
3537514ea206
Go back to unpausing audio in render_video_loop to ensure the core is no longer running on the main thread when audio callbacks start when using run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1980
diff
changeset
|
203 if (sync_src == SYNC_AUDIO) { |
2004
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
204 //SDL_PauseAudio acquires the audio device lock, which is held while the callback runs |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
205 //since our callback can itself be stuck waiting on the audio_ready condition variable |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
206 //calling SDL_PauseAudio(0) again for audio sources after the first can deadlock |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
207 //fortunately SDL_GetAudioStatus does not acquire the lock so is safe to call here |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
208 if (SDL_GetAudioStatus() == SDL_AUDIO_PAUSED) { |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
209 SDL_PauseAudio(0); |
66f08024d9e9
Fix occasional deadlock on startup when using audio sync
Michael Pavone <pavone@retrodev.com>
parents:
1981
diff
changeset
|
210 } |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
211 } |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
212 if (current_system && sync_src == SYNC_AUDIO_THREAD) { |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
213 system_request_exit(current_system, 0); |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
214 } |
1551
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
215 } |
ce1f93be0104
Small cleanup to audio interface between emulation code and renderer backend
Michael Pavone <pavone@retrodev.com>
parents:
1534
diff
changeset
|
216 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
217 void render_do_audio_ready(audio_source *src) |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
218 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
219 if (sync_src == SYNC_AUDIO_THREAD) { |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
220 int16_t *tmp = src->front; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
221 src->front = src->back; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
222 src->back = tmp; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
223 src->front_populated = 1; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
224 src->buffer_pos = 0; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
225 if (all_sources_ready()) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
226 //we've emulated far enough to fill the current buffer |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
227 system_request_exit(current_system, 0); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
228 } |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
229 } else if (sync_src == SYNC_AUDIO) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
230 SDL_LockMutex(audio_mutex); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
231 while (src->front_populated) { |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
232 SDL_CondWait(src->opaque, audio_mutex); |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
233 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
234 int16_t *tmp = src->front; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
235 src->front = src->back; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
236 src->back = tmp; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
237 src->front_populated = 1; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
238 src->buffer_pos = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
239 SDL_CondSignal(audio_ready); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
240 SDL_UnlockMutex(audio_mutex); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
241 } else { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
242 uint32_t num_buffered; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
243 SDL_LockAudio(); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
244 src->read_end = src->buffer_pos; |
1565
61fafcbc2c38
Audio DRC now sounds good in both NTSC and PAL, just need to adjust constants to minimize latency without leading to dropouts
Michael Pavone <pavone@retrodev.com>
parents:
1564
diff
changeset
|
245 num_buffered = ((src->read_end - src->read_start) & src->mask) / src->num_channels; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
246 SDL_UnlockAudio(); |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
247 if (num_buffered >= min_buffered && SDL_GetAudioStatus() == SDL_AUDIO_PAUSED) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
248 SDL_PauseAudio(0); |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
249 } |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
250 } |
1555
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
251 } |
6ce36c3f250b
More audio refactoring in preparation for allowing proper sync to video with dynamic audio rate control
Michael Pavone <pavone@retrodev.com>
parents:
1552
diff
changeset
|
252 |
937
9364dad5561a
Added reasonable handling of joystick hotplug
Michael Pavone <pavone@retrodev.com>
parents:
915
diff
changeset
|
253 static SDL_Joystick * joysticks[MAX_JOYSTICKS]; |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
254 static int joystick_sdl_index[MAX_JOYSTICKS]; |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
255 static uint8_t joystick_index_locked[MAX_JOYSTICKS]; |
432
18cde14e8c10
Read joystick bindings from config file
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
256 |
914
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
257 int render_width() |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
258 { |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
259 return main_width; |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
260 } |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
261 |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
262 int render_height() |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
263 { |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
264 return main_height; |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
265 } |
28ec32e720b2
Scale mouse data based on window size
Michael Pavone <pavone@retrodev.com>
parents:
907
diff
changeset
|
266 |
915
9e882eca717e
Initial support for relative mouse mode and skeleton of support for capture mode. Avoid mouse position overflow in absolute mode. Allow absolute mode to be set by ROM DB.
Michael Pavone <pavone@retrodev.com>
parents:
914
diff
changeset
|
267 int render_fullscreen() |
9e882eca717e
Initial support for relative mouse mode and skeleton of support for capture mode. Avoid mouse position overflow in absolute mode. Allow absolute mode to be set by ROM DB.
Michael Pavone <pavone@retrodev.com>
parents:
914
diff
changeset
|
268 { |
9e882eca717e
Initial support for relative mouse mode and skeleton of support for capture mode. Avoid mouse position overflow in absolute mode. Allow absolute mode to be set by ROM DB.
Michael Pavone <pavone@retrodev.com>
parents:
914
diff
changeset
|
269 return is_fullscreen; |
9e882eca717e
Initial support for relative mouse mode and skeleton of support for capture mode. Avoid mouse position overflow in absolute mode. Allow absolute mode to be set by ROM DB.
Michael Pavone <pavone@retrodev.com>
parents:
914
diff
changeset
|
270 } |
9e882eca717e
Initial support for relative mouse mode and skeleton of support for capture mode. Avoid mouse position overflow in absolute mode. Allow absolute mode to be set by ROM DB.
Michael Pavone <pavone@retrodev.com>
parents:
914
diff
changeset
|
271 |
426
add9e2f5c0e3
Make VDP render in native pixel format of the renderer for a modest performance gain and to make it easier to use OpenGL for rendering
Mike Pavone <pavone@retrodev.com>
parents:
421
diff
changeset
|
272 uint32_t render_map_color(uint8_t r, uint8_t g, uint8_t b) |
add9e2f5c0e3
Make VDP render in native pixel format of the renderer for a modest performance gain and to make it easier to use OpenGL for rendering
Mike Pavone <pavone@retrodev.com>
parents:
421
diff
changeset
|
273 { |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
274 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
275 return 255 << 24 | b << 16 | g << 8 | r; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
276 #else |
719
019d27995e32
Upgrade to SDL 2.0 and drop support for the non-OpenGL render path
Michael Pavone <pavone@retrodev.com>
parents:
655
diff
changeset
|
277 return 255 << 24 | r << 16 | g << 8 | b; |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
278 #endif |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
279 } |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
280 |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
281 static uint8_t external_sync; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
282 void render_set_external_sync(uint8_t ext_sync_on) |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
283 { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
284 if (ext_sync_on != external_sync) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
285 external_sync = ext_sync_on; |
1975
3701517d852c
Avoid expensive re-init from switching to external sync after render_init has been called
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
286 if (windowed_width) { |
3701517d852c
Avoid expensive re-init from switching to external sync after render_init has been called
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
287 //only do this if render_init has already been called |
3701517d852c
Avoid expensive re-init from switching to external sync after render_init has been called
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
288 render_config_updated(); |
3701517d852c
Avoid expensive re-init from switching to external sync after render_init has been called
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
289 } |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
290 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
291 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
292 |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
293 #ifndef DISABLE_OPENGL |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
294 static GLuint textures[3], buffers[2], vshader, fshader, program, un_textures[2], un_width, un_height, un_texsize, at_pos; |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
295 static int tex_width, tex_height; |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
296 |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
297 static GLfloat vertex_data_default[] = { |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
298 -1.0f, -1.0f, |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
299 1.0f, -1.0f, |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
300 -1.0f, 1.0f, |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
301 1.0f, 1.0f |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
302 }; |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
303 |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
304 static GLfloat vertex_data[8]; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
305 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
306 static const GLushort element_data[] = {0, 1, 2, 3}; |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
307 |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
308 static const GLchar shader_prefix[] = |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
309 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
310 "#version 100\n"; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
311 #else |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
312 "#version 110\n" |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
313 "#define lowp\n" |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
314 "#define mediump\n" |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
315 "#define highp\n"; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
316 #endif |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
317 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
318 static GLuint load_shader(char * fname, GLenum shader_type) |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
319 { |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
320 char * shader_path; |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
321 FILE *f; |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
322 GLchar *text; |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
323 long fsize; |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
324 #ifndef __ANDROID__ |
884
252dfd29831d
Selecting a second game from the menu now works
Michael Pavone <pavone@retrodev.com>
parents:
874
diff
changeset
|
325 char const * parts[] = {get_home_dir(), "/.config/blastem/shaders/", fname}; |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
326 shader_path = alloc_concat_m(3, parts); |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
327 f = fopen(shader_path, "rb"); |
497
0820a71b80f3
Move shader files to their own directory. Read shaders from /.config/blastem/shaders or from path_to_exe/shaders instead of the current working directory.
Mike Pavone <pavone@retrodev.com>
parents:
495
diff
changeset
|
328 free(shader_path); |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
329 if (f) { |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
330 fsize = file_size(f); |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
331 text = malloc(fsize); |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
332 if (fread(text, 1, fsize, f) != fsize) { |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
333 warning("Error reading from shader file %s\n", fname); |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
334 free(text); |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
335 return 0; |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
336 } |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
337 } else { |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
338 #endif |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
339 shader_path = path_append("shaders", fname); |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
340 uint32_t fsize32; |
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
341 text = read_bundled_file(shader_path, &fsize32); |
497
0820a71b80f3
Move shader files to their own directory. Read shaders from /.config/blastem/shaders or from path_to_exe/shaders instead of the current working directory.
Mike Pavone <pavone@retrodev.com>
parents:
495
diff
changeset
|
342 free(shader_path); |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
343 if (!text) { |
800 | 344 warning("Failed to open shader file %s for reading\n", fname); |
497
0820a71b80f3
Move shader files to their own directory. Read shaders from /.config/blastem/shaders or from path_to_exe/shaders instead of the current working directory.
Mike Pavone <pavone@retrodev.com>
parents:
495
diff
changeset
|
345 return 0; |
0820a71b80f3
Move shader files to their own directory. Read shaders from /.config/blastem/shaders or from path_to_exe/shaders instead of the current working directory.
Mike Pavone <pavone@retrodev.com>
parents:
495
diff
changeset
|
346 } |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
347 fsize = fsize32; |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
348 #ifndef __ANDROID__ |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
349 } |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
350 #endif |
1797
5ff8f0d28188
Make sure there are no races between main thread and audio thread around mix_buf. Fix lack of proper termination in shader loading code
Mike Pavone <pavone@retrodev.com>
parents:
1796
diff
changeset
|
351 text[fsize] = 0; |
1693
ba3fb7a3be6b
Added some Makefile options to build a packaging friendly executable
Michael Pavone <pavone@retrodev.com>
parents:
1686
diff
changeset
|
352 |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
353 if (strncmp(text, "#version", strlen("#version"))) { |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
354 GLchar *tmp = text; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
355 text = alloc_concat(shader_prefix, tmp); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
356 free(tmp); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
357 fsize += strlen(shader_prefix); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
358 } |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
359 GLuint ret = glCreateShader(shader_type); |
1820
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
360 if (!ret) { |
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
361 warning("glCreateShader failed with error %d\n", glGetError()); |
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
362 return 0; |
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
363 } |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
364 glShaderSource(ret, 1, (const GLchar **)&text, (const GLint *)&fsize); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
365 free(text); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
366 glCompileShader(ret); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
367 GLint compile_status, loglen; |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
368 glGetShaderiv(ret, GL_COMPILE_STATUS, &compile_status); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
369 if (!compile_status) { |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
370 glGetShaderiv(ret, GL_INFO_LOG_LENGTH, &loglen); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
371 text = malloc(loglen); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
372 glGetShaderInfoLog(ret, loglen, NULL, text); |
800 | 373 warning("Shader %s failed to compile:\n%s\n", fname, text); |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
374 free(text); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
375 glDeleteShader(ret); |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
376 return 0; |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
377 } |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
378 return ret; |
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
379 } |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
380 #endif |
488
32f053ad9b02
Basic OpenGL rendering is working
Mike Pavone <pavone@retrodev.com>
parents:
487
diff
changeset
|
381 |
1167
e758ddbf0624
Initial work on emulating top and bottom border area
Michael Pavone <pavone@retrodev.com>
parents:
1117
diff
changeset
|
382 static uint32_t texture_buf[512 * 513]; |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
383 #ifdef DISABLE_OPENGL |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
384 #define RENDER_FORMAT SDL_PIXELFORMAT_ARGB8888 |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
385 #else |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
386 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
387 #define INTERNAL_FORMAT GL_RGBA |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
388 #define SRC_FORMAT GL_RGBA |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
389 #define RENDER_FORMAT SDL_PIXELFORMAT_ABGR8888 |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
390 #else |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
391 #define INTERNAL_FORMAT GL_RGBA8 |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
392 #define SRC_FORMAT GL_BGRA |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
393 #define RENDER_FORMAT SDL_PIXELFORMAT_ARGB8888 |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
394 #endif |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
395 static void gl_setup() |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
396 { |
1403
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
397 tern_val def = {.ptrval = "linear"}; |
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
398 char *scaling = tern_find_path_default(config, "video\0scaling\0", def, TVAL_PTR).ptrval; |
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
399 GLint filter = strcmp(scaling, "linear") ? GL_NEAREST : GL_LINEAR; |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
400 glGenTextures(3, textures); |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
401 def.ptrval = "off"; |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
402 char *npot_textures = tern_find_path_default(config, "video\0npot_textures\0", def, TVAL_PTR).ptrval; |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
403 if (!strcmp(npot_textures, "on")) { |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
404 tex_width = LINEBUF_SIZE; |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
405 tex_height = 294; //PAL height with full borders |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
406 } else { |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
407 tex_width = tex_height = 512; |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
408 } |
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
409 printf("Using %dx%d textures\n", tex_width, tex_height); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
410 for (int i = 0; i < 3; i++) |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
411 { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
412 glBindTexture(GL_TEXTURE_2D, textures[i]); |
1403
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
413 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); |
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
414 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
415 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
416 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
417 if (i < 2) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
418 //TODO: Fixme for PAL + invalid display mode |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
419 glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL_FORMAT, tex_width, tex_height, 0, SRC_FORMAT, GL_UNSIGNED_BYTE, texture_buf); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
420 } else { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
421 uint32_t blank = 255 << 24; |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
422 glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL_FORMAT, 1, 1, 0, SRC_FORMAT, GL_UNSIGNED_BYTE, &blank); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
423 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
424 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
425 glGenBuffers(2, buffers); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
426 glBindBuffer(GL_ARRAY_BUFFER, buffers[0]); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
427 glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_data), vertex_data, GL_STATIC_DRAW); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
428 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
429 glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(element_data), element_data, GL_STATIC_DRAW); |
1403
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
430 def.ptrval = "default.v.glsl"; |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
431 vshader = load_shader(tern_find_path_default(config, "video\0vertex_shader\0", def, TVAL_PTR).ptrval, GL_VERTEX_SHADER); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
432 def.ptrval = "default.f.glsl"; |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
433 fshader = load_shader(tern_find_path_default(config, "video\0fragment_shader\0", def, TVAL_PTR).ptrval, GL_FRAGMENT_SHADER); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
434 program = glCreateProgram(); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
435 glAttachShader(program, vshader); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
436 glAttachShader(program, fshader); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
437 glLinkProgram(program); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
438 GLint link_status; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
439 glGetProgramiv(program, GL_LINK_STATUS, &link_status); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
440 if (!link_status) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
441 fputs("Failed to link shader program\n", stderr); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
442 exit(1); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
443 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
444 un_textures[0] = glGetUniformLocation(program, "textures[0]"); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
445 un_textures[1] = glGetUniformLocation(program, "textures[1]"); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
446 un_width = glGetUniformLocation(program, "width"); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
447 un_height = glGetUniformLocation(program, "height"); |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
448 un_texsize = glGetUniformLocation(program, "texsize"); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
449 at_pos = glGetAttribLocation(program, "pos"); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
450 } |
1593
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
451 |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
452 static void gl_teardown() |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
453 { |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
454 glDeleteProgram(program); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
455 glDeleteShader(vshader); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
456 glDeleteShader(fshader); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
457 glDeleteBuffers(2, buffers); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
458 glDeleteTextures(3, textures); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
459 } |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
460 #endif |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
461 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
462 static uint8_t texture_init; |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
463 static void render_alloc_surfaces() |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
464 { |
884
252dfd29831d
Selecting a second game from the menu now works
Michael Pavone <pavone@retrodev.com>
parents:
874
diff
changeset
|
465 if (texture_init) { |
252dfd29831d
Selecting a second game from the menu now works
Michael Pavone <pavone@retrodev.com>
parents:
874
diff
changeset
|
466 return; |
252dfd29831d
Selecting a second game from the menu now works
Michael Pavone <pavone@retrodev.com>
parents:
874
diff
changeset
|
467 } |
1895
33c0c4579c1f
Fix debug view window stuff that got broken when FRAMEBUFFER_UI got added
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
468 sdl_textures= calloc(sizeof(SDL_Texture *), 3); |
33c0c4579c1f
Fix debug view window stuff that got broken when FRAMEBUFFER_UI got added
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
469 num_textures = 3; |
884
252dfd29831d
Selecting a second game from the menu now works
Michael Pavone <pavone@retrodev.com>
parents:
874
diff
changeset
|
470 texture_init = 1; |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
471 #ifndef DISABLE_OPENGL |
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
472 if (render_gl) { |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
473 gl_setup(); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
474 } else { |
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
475 #endif |
1403
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
476 tern_val def = {.ptrval = "linear"}; |
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
477 char *scaling = tern_find_path_default(config, "video\0scaling\0", def, TVAL_PTR).ptrval; |
87493f585c7f
Allow selecting linear or nearet neighbor scaling for both the Open GL and SDL 2 renderers
Michael Pavone <pavone@retrodev.com>
parents:
1402
diff
changeset
|
478 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, scaling); |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
479 //TODO: Fixme for invalid display mode |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
480 sdl_textures[0] = sdl_textures[1] = SDL_CreateTexture(main_renderer, RENDER_FORMAT, SDL_TEXTUREACCESS_STREAMING, LINEBUF_SIZE, 588); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
481 #ifndef DISABLE_OPENGL |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
482 } |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
483 #endif |
426
add9e2f5c0e3
Make VDP render in native pixel format of the renderer for a modest performance gain and to make it easier to use OpenGL for rendering
Mike Pavone <pavone@retrodev.com>
parents:
421
diff
changeset
|
484 } |
add9e2f5c0e3
Make VDP render in native pixel format of the renderer for a modest performance gain and to make it easier to use OpenGL for rendering
Mike Pavone <pavone@retrodev.com>
parents:
421
diff
changeset
|
485 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
486 static void free_surfaces(void) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
487 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
488 for (int i = 0; i < num_textures; i++) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
489 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
490 if (sdl_textures[i]) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
491 SDL_DestroyTexture(sdl_textures[i]); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
492 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
493 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
494 free(sdl_textures); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
495 sdl_textures = NULL; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
496 texture_init = 0; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
497 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
498 |
1102
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
499 static char * caption = NULL; |
c15896605bf2
Clean up symbol visiblity and delete a ltitle bit of dead code
Michael Pavone <pavone@retrodev.com>
parents:
1077
diff
changeset
|
500 static char * fps_caption = NULL; |
486
db5880d8ea03
Add an FPS counter to the title bar
Mike Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
501 |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
502 static void render_quit() |
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
503 { |
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
504 render_close_audio(); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
505 free_surfaces(); |
1593
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
506 #ifndef DISABLE_OPENGL |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
507 if (render_gl) { |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
508 gl_teardown(); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
509 SDL_GL_DeleteContext(main_context); |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
510 } |
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
511 #endif |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
512 } |
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
513 |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
514 static float config_aspect() |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
515 { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
516 static float aspect = 0.0f; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
517 if (aspect == 0.0f) { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
518 char *config_aspect = tern_find_path_default(config, "video\0aspect\0", (tern_val){.ptrval = "4:3"}, TVAL_PTR).ptrval; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
519 if (strcmp("stretch", config_aspect)) { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
520 aspect = 4.0f/3.0f; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
521 char *end; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
522 float aspect_numerator = strtof(config_aspect, &end); |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
523 if (aspect_numerator > 0.0f && *end == ':') { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
524 float aspect_denominator = strtof(end+1, &end); |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
525 if (aspect_denominator > 0.0f && !*end) { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
526 aspect = aspect_numerator / aspect_denominator; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
527 } |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
528 } |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
529 } else { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
530 aspect = -1.0f; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
531 } |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
532 } |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
533 return aspect; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
534 } |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
535 |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
536 static void update_aspect() |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
537 { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
538 //reset default values |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
539 #ifndef DISABLE_OPENGL |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
540 memcpy(vertex_data, vertex_data_default, sizeof(vertex_data)); |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
541 #endif |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
542 main_clip.w = main_width; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
543 main_clip.h = main_height; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
544 main_clip.x = main_clip.y = 0; |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
545 if (config_aspect() > 0.0f) { |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
546 float aspect = (float)main_width / main_height; |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
547 if (fabs(aspect - config_aspect()) < 0.01f) { |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
548 //close enough for government work |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
549 return; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
550 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
551 #ifndef DISABLE_OPENGL |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
552 if (render_gl) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
553 for (int i = 0; i < 4; i++) |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
554 { |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
555 if (aspect > config_aspect()) { |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
556 vertex_data[i*2] *= config_aspect()/aspect; |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
557 } else { |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
558 vertex_data[i*2+1] *= aspect/config_aspect(); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
559 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
560 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
561 } else { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
562 #endif |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
563 main_clip.w = aspect > config_aspect() ? config_aspect() * (float)main_height : main_width; |
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
564 main_clip.h = aspect > config_aspect() ? main_height : main_width / config_aspect(); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
565 main_clip.x = (main_width - main_clip.w) / 2; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
566 main_clip.y = (main_height - main_clip.h) / 2; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
567 #ifndef DISABLE_OPENGL |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
568 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
569 #endif |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
570 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
571 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
572 |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
573 static ui_render_fun on_context_destroyed, on_context_created, on_ui_fb_resized; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
574 void render_set_gl_context_handlers(ui_render_fun destroy, ui_render_fun create) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
575 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
576 on_context_destroyed = destroy; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
577 on_context_created = create; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
578 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
579 |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
580 void render_set_ui_fb_resize_handler(ui_render_fun resize) |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
581 { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
582 on_ui_fb_resized = resize; |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
583 } |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
584 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
585 static uint8_t scancode_map[SDL_NUM_SCANCODES] = { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
586 [SDL_SCANCODE_A] = 0x1C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
587 [SDL_SCANCODE_B] = 0x32, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
588 [SDL_SCANCODE_C] = 0x21, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
589 [SDL_SCANCODE_D] = 0x23, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
590 [SDL_SCANCODE_E] = 0x24, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
591 [SDL_SCANCODE_F] = 0x2B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
592 [SDL_SCANCODE_G] = 0x34, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
593 [SDL_SCANCODE_H] = 0x33, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
594 [SDL_SCANCODE_I] = 0x43, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
595 [SDL_SCANCODE_J] = 0x3B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
596 [SDL_SCANCODE_K] = 0x42, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
597 [SDL_SCANCODE_L] = 0x4B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
598 [SDL_SCANCODE_M] = 0x3A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
599 [SDL_SCANCODE_N] = 0x31, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
600 [SDL_SCANCODE_O] = 0x44, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
601 [SDL_SCANCODE_P] = 0x4D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
602 [SDL_SCANCODE_Q] = 0x15, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
603 [SDL_SCANCODE_R] = 0x2D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
604 [SDL_SCANCODE_S] = 0x1B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
605 [SDL_SCANCODE_T] = 0x2C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
606 [SDL_SCANCODE_U] = 0x3C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
607 [SDL_SCANCODE_V] = 0x2A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
608 [SDL_SCANCODE_W] = 0x1D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
609 [SDL_SCANCODE_X] = 0x22, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
610 [SDL_SCANCODE_Y] = 0x35, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
611 [SDL_SCANCODE_Z] = 0x1A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
612 [SDL_SCANCODE_1] = 0x16, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
613 [SDL_SCANCODE_2] = 0x1E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
614 [SDL_SCANCODE_3] = 0x26, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
615 [SDL_SCANCODE_4] = 0x25, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
616 [SDL_SCANCODE_5] = 0x2E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
617 [SDL_SCANCODE_6] = 0x36, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
618 [SDL_SCANCODE_7] = 0x3D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
619 [SDL_SCANCODE_8] = 0x3E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
620 [SDL_SCANCODE_9] = 0x46, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
621 [SDL_SCANCODE_0] = 0x45, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
622 [SDL_SCANCODE_RETURN] = 0x5A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
623 [SDL_SCANCODE_ESCAPE] = 0x76, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
624 [SDL_SCANCODE_SPACE] = 0x29, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
625 [SDL_SCANCODE_TAB] = 0x0D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
626 [SDL_SCANCODE_BACKSPACE] = 0x66, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
627 [SDL_SCANCODE_MINUS] = 0x4E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
628 [SDL_SCANCODE_EQUALS] = 0x55, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
629 [SDL_SCANCODE_LEFTBRACKET] = 0x54, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
630 [SDL_SCANCODE_RIGHTBRACKET] = 0x5B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
631 [SDL_SCANCODE_BACKSLASH] = 0x5D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
632 [SDL_SCANCODE_SEMICOLON] = 0x4C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
633 [SDL_SCANCODE_APOSTROPHE] = 0x52, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
634 [SDL_SCANCODE_GRAVE] = 0x0E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
635 [SDL_SCANCODE_COMMA] = 0x41, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
636 [SDL_SCANCODE_PERIOD] = 0x49, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
637 [SDL_SCANCODE_SLASH] = 0x4A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
638 [SDL_SCANCODE_CAPSLOCK] = 0x58, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
639 [SDL_SCANCODE_F1] = 0x05, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
640 [SDL_SCANCODE_F2] = 0x06, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
641 [SDL_SCANCODE_F3] = 0x04, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
642 [SDL_SCANCODE_F4] = 0x0C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
643 [SDL_SCANCODE_F5] = 0x03, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
644 [SDL_SCANCODE_F6] = 0x0B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
645 [SDL_SCANCODE_F7] = 0x83, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
646 [SDL_SCANCODE_F8] = 0x0A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
647 [SDL_SCANCODE_F9] = 0x01, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
648 [SDL_SCANCODE_F10] = 0x09, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
649 [SDL_SCANCODE_F11] = 0x78, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
650 [SDL_SCANCODE_F12] = 0x07, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
651 [SDL_SCANCODE_LCTRL] = 0x14, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
652 [SDL_SCANCODE_LSHIFT] = 0x12, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
653 [SDL_SCANCODE_LALT] = 0x11, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
654 [SDL_SCANCODE_RCTRL] = 0x18, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
655 [SDL_SCANCODE_RSHIFT] = 0x59, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
656 [SDL_SCANCODE_RALT] = 0x17, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
657 [SDL_SCANCODE_INSERT] = 0x81, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
658 [SDL_SCANCODE_PAUSE] = 0x82, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
659 [SDL_SCANCODE_PRINTSCREEN] = 0x84, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
660 [SDL_SCANCODE_SCROLLLOCK] = 0x7E, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
661 [SDL_SCANCODE_DELETE] = 0x85, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
662 [SDL_SCANCODE_LEFT] = 0x86, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
663 [SDL_SCANCODE_HOME] = 0x87, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
664 [SDL_SCANCODE_END] = 0x88, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
665 [SDL_SCANCODE_UP] = 0x89, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
666 [SDL_SCANCODE_DOWN] = 0x8A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
667 [SDL_SCANCODE_PAGEUP] = 0x8B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
668 [SDL_SCANCODE_PAGEDOWN] = 0x8C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
669 [SDL_SCANCODE_RIGHT] = 0x8D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
670 [SDL_SCANCODE_NUMLOCKCLEAR] = 0x77, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
671 [SDL_SCANCODE_KP_DIVIDE] = 0x80, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
672 [SDL_SCANCODE_KP_MULTIPLY] = 0x7C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
673 [SDL_SCANCODE_KP_MINUS] = 0x7B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
674 [SDL_SCANCODE_KP_PLUS] = 0x79, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
675 [SDL_SCANCODE_KP_ENTER] = 0x19, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
676 [SDL_SCANCODE_KP_1] = 0x69, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
677 [SDL_SCANCODE_KP_2] = 0x72, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
678 [SDL_SCANCODE_KP_3] = 0x7A, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
679 [SDL_SCANCODE_KP_4] = 0x6B, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
680 [SDL_SCANCODE_KP_5] = 0x73, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
681 [SDL_SCANCODE_KP_6] = 0x74, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
682 [SDL_SCANCODE_KP_7] = 0x6C, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
683 [SDL_SCANCODE_KP_8] = 0x75, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
684 [SDL_SCANCODE_KP_9] = 0x7D, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
685 [SDL_SCANCODE_KP_0] = 0x70, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
686 [SDL_SCANCODE_KP_PERIOD] = 0x71, |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
687 }; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
688 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
689 static drop_handler drag_drop_handler; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
690 void render_set_drag_drop_handler(drop_handler handler) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
691 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
692 drag_drop_handler = handler; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
693 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
694 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
695 static event_handler custom_event_handler; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
696 void render_set_event_handler(event_handler handler) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
697 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
698 custom_event_handler = handler; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
699 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
700 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
701 static int find_joystick_index(SDL_JoystickID instanceID) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
702 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
703 for (int i = 0; i < MAX_JOYSTICKS; i++) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
704 if (joysticks[i] && SDL_JoystickInstanceID(joysticks[i]) == instanceID) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
705 return i; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
706 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
707 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
708 return -1; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
709 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
710 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
711 static int lowest_unused_joystick_index() |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
712 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
713 for (int i = 0; i < MAX_JOYSTICKS; i++) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
714 if (!joysticks[i]) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
715 return i; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
716 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
717 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
718 return -1; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
719 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
720 |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
721 static int lowest_unlocked_joystick_index(void) |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
722 { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
723 for (int i = 0; i < MAX_JOYSTICKS; i++) { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
724 if (!joystick_index_locked[i]) { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
725 return i; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
726 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
727 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
728 return -1; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
729 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
730 |
1596
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
731 SDL_Joystick *render_get_joystick(int index) |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
732 { |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
733 if (index >= MAX_JOYSTICKS) { |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
734 return NULL; |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
735 } |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
736 return joysticks[index]; |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
737 } |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
738 |
1608
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
739 char* render_joystick_type_id(int index) |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
740 { |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
741 SDL_Joystick *stick = render_get_joystick(index); |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
742 if (!stick) { |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
743 return NULL; |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
744 } |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
745 char *guid_string = malloc(33); |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
746 SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(stick), guid_string, 33); |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
747 return guid_string; |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
748 } |
419a0a133b5c
Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents:
1603
diff
changeset
|
749 |
1596
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
750 SDL_GameController *render_get_controller(int index) |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
751 { |
1862
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
752 if (index >= MAX_JOYSTICKS || !joysticks[index]) { |
1596
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
753 return NULL; |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
754 } |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
755 return SDL_GameControllerOpen(joystick_sdl_index[index]); |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
756 } |
437e80a700aa
Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
1593
diff
changeset
|
757 |
1862
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
758 static uint8_t gc_events_enabled; |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
759 static SDL_GameController *controllers[MAX_JOYSTICKS]; |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
760 void render_enable_gamepad_events(uint8_t enabled) |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
761 { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
762 if (enabled != gc_events_enabled) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
763 gc_events_enabled = enabled; |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
764 for (int i = 0; i < MAX_JOYSTICKS; i++) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
765 if (enabled) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
766 controllers[i] = render_get_controller(i); |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
767 } else if (controllers[i]) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
768 SDL_GameControllerClose(controllers[i]); |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
769 controllers[i] = NULL; |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
770 } |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
771 } |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
772 } |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
773 } |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
774 |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
775 static uint32_t overscan_top[NUM_VID_STD] = {2, 21}; |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
776 static uint32_t overscan_bot[NUM_VID_STD] = {1, 17}; |
1267
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
777 static uint32_t overscan_left[NUM_VID_STD] = {13, 13}; |
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
778 static uint32_t overscan_right[NUM_VID_STD] = {14, 14}; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
779 static vid_std video_standard = VID_NTSC; |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
780 static uint8_t need_ui_fb_resize; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
781 |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
782 int lock_joystick_index(int joystick, int desired_index) |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
783 { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
784 if (desired_index < 0) { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
785 desired_index = lowest_unlocked_joystick_index(); |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
786 if (desired_index < 0 || desired_index >= joystick) { |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
787 return joystick; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
788 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
789 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
790 SDL_Joystick *tmp_joy = joysticks[joystick]; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
791 int tmp_index = joystick_sdl_index[joystick]; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
792 joysticks[joystick] = joysticks[desired_index]; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
793 joystick_sdl_index[joystick] = joystick_sdl_index[desired_index]; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
794 joystick_index_locked[joystick] = joystick_sdl_index[desired_index]; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
795 joysticks[desired_index] = tmp_joy; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
796 joystick_sdl_index[desired_index] = tmp_index; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
797 joystick_index_locked[desired_index] = 1; |
1861
fc05f49075c2
Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents:
1860
diff
changeset
|
798 //update bindings as the controllers being swapped may have different mappings |
fc05f49075c2
Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents:
1860
diff
changeset
|
799 handle_joy_added(desired_index); |
fc05f49075c2
Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents:
1860
diff
changeset
|
800 if (joysticks[joystick]) { |
fc05f49075c2
Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents:
1860
diff
changeset
|
801 handle_joy_added(joystick); |
fc05f49075c2
Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents:
1860
diff
changeset
|
802 } |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
803 return desired_index; |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
804 } |
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
805 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
806 static int32_t handle_event(SDL_Event *event) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
807 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
808 if (custom_event_handler) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
809 custom_event_handler(event); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
810 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
811 switch (event->type) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
812 case SDL_KEYDOWN: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
813 handle_keydown(event->key.keysym.sym, scancode_map[event->key.keysym.scancode]); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
814 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
815 case SDL_KEYUP: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
816 handle_keyup(event->key.keysym.sym, scancode_map[event->key.keysym.scancode]); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
817 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
818 case SDL_JOYBUTTONDOWN: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
819 handle_joydown(find_joystick_index(event->jbutton.which), event->jbutton.button); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
820 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
821 case SDL_JOYBUTTONUP: |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
822 handle_joyup(lock_joystick_index(find_joystick_index(event->jbutton.which), -1), event->jbutton.button); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
823 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
824 case SDL_JOYHATMOTION: |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
825 handle_joy_dpad(lock_joystick_index(find_joystick_index(event->jhat.which), -1), event->jhat.hat, event->jhat.value); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
826 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
827 case SDL_JOYAXISMOTION: |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
828 handle_joy_axis(lock_joystick_index(find_joystick_index(event->jaxis.which), -1), event->jaxis.axis, event->jaxis.value); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
829 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
830 case SDL_JOYDEVICEADDED: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
831 if (event->jdevice.which < MAX_JOYSTICKS) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
832 int index = lowest_unused_joystick_index(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
833 if (index >= 0) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
834 SDL_Joystick * joy = joysticks[index] = SDL_JoystickOpen(event->jdevice.which); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
835 joystick_sdl_index[index] = event->jdevice.which; |
1860
bdca98187c9f
Reorder controllers based on which one receives player input first
Michael Pavone <pavone@retrodev.com>
parents:
1851
diff
changeset
|
836 joystick_index_locked[index] = 0; |
1862
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
837 if (gc_events_enabled) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
838 controllers[index] = SDL_GameControllerOpen(event->jdevice.which); |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
839 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
840 if (joy) { |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
841 debug_message("Joystick %d added: %s\n", index, SDL_JoystickName(joy)); |
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
842 debug_message("\tNum Axes: %d\n\tNum Buttons: %d\n\tNum Hats: %d\n", SDL_JoystickNumAxes(joy), SDL_JoystickNumButtons(joy), SDL_JoystickNumHats(joy)); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
843 handle_joy_added(index); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
844 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
845 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
846 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
847 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
848 case SDL_JOYDEVICEREMOVED: { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
849 int index = find_joystick_index(event->jdevice.which); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
850 if (index >= 0) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
851 SDL_JoystickClose(joysticks[index]); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
852 joysticks[index] = NULL; |
1862
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
853 if (controllers[index]) { |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
854 SDL_GameControllerClose(controllers[index]); |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
855 controllers[index] = NULL; |
e07fc3d473b2
Basic UI navigation with controller
Michael Pavone <pavone@retrodev.com>
parents:
1861
diff
changeset
|
856 } |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
857 debug_message("Joystick %d removed\n", index); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
858 } else { |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
859 debug_message("Failed to find removed joystick with instance ID: %d\n", index); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
860 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
861 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
862 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
863 case SDL_MOUSEMOTION: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
864 handle_mouse_moved(event->motion.which, event->motion.x, event->motion.y + overscan_top[video_standard], event->motion.xrel, event->motion.yrel); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
865 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
866 case SDL_MOUSEBUTTONDOWN: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
867 handle_mousedown(event->button.which, event->button.button); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
868 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
869 case SDL_MOUSEBUTTONUP: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
870 handle_mouseup(event->button.which, event->button.button); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
871 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
872 case SDL_WINDOWEVENT: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
873 switch (event->window.event) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
874 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
875 case SDL_WINDOWEVENT_SIZE_CHANGED: |
1820
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
876 if (!main_window) { |
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
877 break; |
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
878 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
879 main_width = event->window.data1; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
880 main_height = event->window.data2; |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
881 need_ui_fb_resize = 1; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
882 update_aspect(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
883 #ifndef DISABLE_OPENGL |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
884 if (render_gl) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
885 if (on_context_destroyed) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
886 on_context_destroyed(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
887 } |
1593
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
888 gl_teardown(); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
889 SDL_GL_DeleteContext(main_context); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
890 main_context = SDL_GL_CreateContext(main_window); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
891 gl_setup(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
892 if (on_context_created) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
893 on_context_created(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
894 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
895 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
896 #endif |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
897 break; |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
898 case SDL_WINDOWEVENT_CLOSE: |
1820
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
899 if (main_window && SDL_GetWindowID(main_window) == event->window.windowID) { |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
900 exit(0); |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
901 } else { |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
902 for (int i = 0; i < num_textures - FRAMEBUFFER_USER_START; i++) |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
903 { |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
904 if (SDL_GetWindowID(extra_windows[i]) == event->window.windowID) { |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
905 if (close_handlers[i]) { |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
906 close_handlers[i](i + FRAMEBUFFER_USER_START); |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
907 } |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
908 break; |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
909 } |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
910 } |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
911 } |
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
912 break; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
913 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
914 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
915 case SDL_DROPFILE: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
916 if (drag_drop_handler) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
917 drag_drop_handler(event->drop.file); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
918 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
919 SDL_free(event->drop.file); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
920 break; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
921 case SDL_QUIT: |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
922 puts(""); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
923 exit(0); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
924 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
925 return 0; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
926 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
927 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
928 static void drain_events() |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
929 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
930 SDL_Event event; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
931 while(SDL_PollEvent(&event)) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
932 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
933 handle_event(&event); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
934 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
935 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
936 |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
937 static char *vid_std_names[NUM_VID_STD] = {"ntsc", "pal"}; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
938 static int display_hz; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
939 static int source_hz; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
940 static int source_frame; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
941 static int source_frame_count; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
942 static int frame_repeat[60]; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
943 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
944 static uint32_t sample_rate; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
945 static void init_audio() |
354
15dd6418fe67
Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents:
342
diff
changeset
|
946 { |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
947 SDL_AudioSpec desired, actual; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
948 char * rate_str = tern_find_path(config, "audio\0rate\0", TVAL_PTR).ptrval; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
949 int rate = rate_str ? atoi(rate_str) : 0; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
950 if (!rate) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
951 rate = 48000; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
952 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
953 desired.freq = rate; |
1933
16a795cababd
Make requested sample format configurable
Michael Pavone <pavone@retrodev.com>
parents:
1932
diff
changeset
|
954 char *config_format = tern_find_path_default(config, "audio\0format\0", (tern_val){.ptrval="f32"}, TVAL_PTR).ptrval; |
16a795cababd
Make requested sample format configurable
Michael Pavone <pavone@retrodev.com>
parents:
1932
diff
changeset
|
955 desired.format = !strcmp(config_format, "s16") ? AUDIO_S16SYS : AUDIO_F32SYS; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
956 desired.channels = 2; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
957 char * samples_str = tern_find_path(config, "audio\0buffer\0", TVAL_PTR).ptrval; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
958 int samples = samples_str ? atoi(samples_str) : 0; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
959 if (!samples) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
960 samples = 512; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
961 } |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
962 debug_message("config says: %d\n", samples); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
963 desired.samples = samples*2; |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
964 switch (sync_src) |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
965 { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
966 case SYNC_AUDIO: |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
967 desired.callback = audio_callback; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
968 break; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
969 case SYNC_AUDIO_THREAD: |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
970 desired.callback = audio_callback_run_on_audio; |
1978
33d5b9b77aef
Fix regression in run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1977
diff
changeset
|
971 break; |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
972 default: |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
973 desired.callback = audio_callback_drc; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
974 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
975 desired.userdata = NULL; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
976 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
977 if (SDL_OpenAudio(&desired, &actual) < 0) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
978 fatal_error("Unable to open SDL audio: %s\n", SDL_GetError()); |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
979 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
980 sample_rate = actual.freq; |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
981 debug_message("Initialized audio at frequency %d with a %d sample buffer, ", actual.freq, actual.samples); |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
982 render_audio_format format = RENDER_AUDIO_UNKNOWN; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
983 if (actual.format == AUDIO_S16SYS) { |
1810
73a9d06413bc
Restore some newlines in debug output that got lost when fixing GDB remote debugging issue
Michael Pavone <pavone@retrodev.com>
parents:
1809
diff
changeset
|
984 debug_message("signed 16-bit int format\n"); |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
985 format = RENDER_AUDIO_S16; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
986 } else if (actual.format == AUDIO_F32SYS) { |
1810
73a9d06413bc
Restore some newlines in debug output that got lost when fixing GDB remote debugging issue
Michael Pavone <pavone@retrodev.com>
parents:
1809
diff
changeset
|
987 debug_message("32-bit float format\n"); |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
988 format = RENDER_AUDIO_FLOAT; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
989 } else { |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
990 debug_message("unsupported format %X\n", actual.format); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
991 warning("Unsupported audio sample format: %X\n", actual.format); |
1402
458df351af06
Allow height to be specified in the config file and properly calculate from the aspect setting if it is not specified
Michael Pavone <pavone@retrodev.com>
parents:
1398
diff
changeset
|
992 } |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
993 render_audio_initialized(format, actual.freq, actual.channels, actual.samples, SDL_AUDIO_BITSIZE(actual.format) / 8); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
994 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
995 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
996 void window_setup(void) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
997 { |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
998 uint32_t flags = SDL_WINDOW_RESIZABLE; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
999 if (is_fullscreen) { |
719
019d27995e32
Upgrade to SDL 2.0 and drop support for the non-OpenGL render path
Michael Pavone <pavone@retrodev.com>
parents:
655
diff
changeset
|
1000 flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1001 } |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1002 |
1659
19331a21da3a
Switched default sync source back to audio as the video option is not ready for prime timeop
Mike Pavone <pavone@retrodev.com>
parents:
1658
diff
changeset
|
1003 tern_val def = {.ptrval = "audio"}; |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1004 if (external_sync) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1005 sync_src = SYNC_EXTERNAL; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1006 } else { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1007 char *sync_src_str = tern_find_path_default(config, "system\0sync_source\0", def, TVAL_PTR).ptrval; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1008 if (!strcmp(sync_src_str, "audio")) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1009 sync_src = SYNC_AUDIO; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1010 } else if (!strcmp(sync_src_str, "audio_thread")) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1011 sync_src = SYNC_AUDIO_THREAD; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1012 } else { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1013 sync_src = SYNC_VIDEO; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1014 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1015 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1016 |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1017 if (!num_buffers && (sync_src == SYNC_AUDIO_THREAD || sync_src == SYNC_EXTERNAL)) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1018 frame_mutex = SDL_CreateMutex(); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1019 free_buffer_mutex = SDL_CreateMutex(); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1020 frame_ready = SDL_CreateCond(); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1021 buffer_storage = 4; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1022 frame_buffers = calloc(buffer_storage, sizeof(uint32_t*)); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1023 frame_buffers[0] = texture_buf; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1024 num_buffers = 1; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1025 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1026 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1027 const char *vsync; |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1028 if (sync_src == SYNC_AUDIO) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1029 def.ptrval = "off"; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1030 vsync = tern_find_path_default(config, "video\0vsync\0", def, TVAL_PTR).ptrval; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1031 } else { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1032 vsync = "on"; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1033 } |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1034 |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1035 tern_node *video = tern_find_node(config, "video"); |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1036 if (video) |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1037 { |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1038 for (int i = 0; i < NUM_VID_STD; i++) |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1039 { |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1040 tern_node *std_settings = tern_find_node(video, vid_std_names[i]); |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1041 if (std_settings) { |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1042 char *val = tern_find_path_default(std_settings, "overscan\0top\0", (tern_val){.ptrval = NULL}, TVAL_PTR).ptrval; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1043 if (val) { |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1044 overscan_top[i] = atoi(val); |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1045 } |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1046 val = tern_find_path_default(std_settings, "overscan\0bottom\0", (tern_val){.ptrval = NULL}, TVAL_PTR).ptrval; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1047 if (val) { |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1048 overscan_bot[i] = atoi(val); |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1049 } |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1050 val = tern_find_path_default(std_settings, "overscan\0left\0", (tern_val){.ptrval = NULL}, TVAL_PTR).ptrval; |
1267
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1051 if (val) { |
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1052 overscan_left[i] = atoi(val); |
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1053 } |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1054 val = tern_find_path_default(std_settings, "overscan\0right\0", (tern_val){.ptrval = NULL}, TVAL_PTR).ptrval; |
1267
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1055 if (val) { |
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1056 overscan_right[i] = atoi(val); |
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1057 } |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1058 } |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1059 } |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1060 } |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1061 render_gl = 0; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1062 |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1063 #ifndef DISABLE_OPENGL |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1064 char *gl_enabled_str = tern_find_path_default(config, "video\0gl\0", def, TVAL_PTR).ptrval; |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1065 uint8_t gl_enabled = strcmp(gl_enabled_str, "off") != 0; |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1066 if (gl_enabled) |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1067 { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1068 flags |= SDL_WINDOW_OPENGL; |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1069 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1070 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1071 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1072 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1073 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1074 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1075 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1076 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1077 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1078 #endif |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1079 } |
1074
3a0f684891ae
Fix NOGL compile option
Michael Pavone <pavone@retrodev.com>
parents:
1068
diff
changeset
|
1080 #endif |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1081 main_window = SDL_CreateWindow(caption, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, main_width, main_height, flags); |
719
019d27995e32
Upgrade to SDL 2.0 and drop support for the non-OpenGL render path
Michael Pavone <pavone@retrodev.com>
parents:
655
diff
changeset
|
1082 if (!main_window) { |
792
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
1083 fatal_error("Unable to create SDL window: %s\n", SDL_GetError()); |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1084 } |
1074
3a0f684891ae
Fix NOGL compile option
Michael Pavone <pavone@retrodev.com>
parents:
1068
diff
changeset
|
1085 #ifndef DISABLE_OPENGL |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1086 if (gl_enabled) |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1087 { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1088 main_context = SDL_GL_CreateContext(main_window); |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1089 #ifdef USE_GLES |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1090 int major_version; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1091 if (SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major_version) == 0 && major_version >= 2) { |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1092 #else |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1093 GLenum res = glewInit(); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1094 if (res != GLEW_OK) { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1095 warning("Initialization of GLEW failed with code %d\n", res); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1096 } |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1097 |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1098 if (res == GLEW_OK && GLEW_VERSION_2_0) { |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1099 #endif |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1100 render_gl = 1; |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1101 SDL_GL_MakeCurrent(main_window, main_context); |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1102 if (!strcmp("tear", vsync)) { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1103 if (SDL_GL_SetSwapInterval(-1) < 0) { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1104 warning("late tear is not available (%s), using normal vsync\n", SDL_GetError()); |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1105 vsync = "on"; |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1106 } else { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1107 vsync = NULL; |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1108 } |
1004
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1109 } |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1110 if (vsync) { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1111 if (SDL_GL_SetSwapInterval(!strcmp("on", vsync)) < 0) { |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
1112 #ifdef __ANDROID__ |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
1113 debug_message("Failed to set vsync to %s: %s\n", vsync, SDL_GetError()); |
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
1114 #else |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1115 warning("Failed to set vsync to %s: %s\n", vsync, SDL_GetError()); |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
1116 #endif |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1117 } |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1118 } |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1119 } else { |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1120 warning("OpenGL 2.0 is unavailable, falling back to SDL2 renderer\n"); |
1004
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1121 } |
1328
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1122 } |
70faad89d491
Add config file option to disable Open GL rendering
Michael Pavone <pavone@retrodev.com>
parents:
1326
diff
changeset
|
1123 if (!render_gl) { |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1124 #endif |
1004
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1125 flags = SDL_RENDERER_ACCELERATED; |
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1126 if (!strcmp("on", vsync) || !strcmp("tear", vsync)) { |
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1127 flags |= SDL_RENDERER_PRESENTVSYNC; |
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1128 } |
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1129 main_renderer = SDL_CreateRenderer(main_window, -1, flags); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1130 |
1074
3a0f684891ae
Fix NOGL compile option
Michael Pavone <pavone@retrodev.com>
parents:
1068
diff
changeset
|
1131 if (!main_renderer) { |
3a0f684891ae
Fix NOGL compile option
Michael Pavone <pavone@retrodev.com>
parents:
1068
diff
changeset
|
1132 fatal_error("unable to create SDL renderer: %s\n", SDL_GetError()); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1133 } |
1658
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1134 SDL_RendererInfo rinfo; |
fa9ae059e4d3
Added support for GLES in addition to desktop GL
Mike Pavone <pavone@retrodev.com>
parents:
1649
diff
changeset
|
1135 SDL_GetRendererInfo(main_renderer, &rinfo); |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
1136 debug_message("SDL2 Render Driver: %s\n", rinfo.name); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1137 main_clip.x = main_clip.y = 0; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1138 main_clip.w = main_width; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1139 main_clip.h = main_height; |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1140 #ifndef DISABLE_OPENGL |
719
019d27995e32
Upgrade to SDL 2.0 and drop support for the non-OpenGL render path
Michael Pavone <pavone@retrodev.com>
parents:
655
diff
changeset
|
1141 } |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
1142 #endif |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1143 |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1144 SDL_GetWindowSize(main_window, &main_width, &main_height); |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
1145 debug_message("Window created with size: %d x %d\n", main_width, main_height); |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1146 update_aspect(); |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1147 render_alloc_surfaces(); |
1004
fc000f245cc8
Set vsync state based on config file rather than just using whatever the system decides for us.
Michael Pavone <pavone@retrodev.com>
parents:
1003
diff
changeset
|
1148 def.ptrval = "off"; |
1326
071e761bcdcf
Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
Michael Pavone <pavone@retrodev.com>
parents:
1268
diff
changeset
|
1149 scanlines = !strcmp(tern_find_path_default(config, "video\0scanlines\0", def, TVAL_PTR).ptrval, "on"); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1150 } |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1151 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1152 void render_init(int width, int height, char * title, uint8_t fullscreen) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1153 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1154 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1155 fatal_error("Unable to init SDL: %s\n", SDL_GetError()); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1156 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1157 atexit(SDL_Quit); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1158 if (height <= 0) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1159 float aspect = config_aspect() > 0.0f ? config_aspect() : 4.0f/3.0f; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1160 height = ((float)width / aspect) + 0.5f; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1161 } |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
1162 debug_message("width: %d, height: %d\n", width, height); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1163 windowed_width = width; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1164 windowed_height = height; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1165 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1166 SDL_DisplayMode mode; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1167 //TODO: Explicit multiple monitor support |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1168 SDL_GetCurrentDisplayMode(0, &mode); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1169 display_hz = mode.refresh_rate; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1170 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1171 if (fullscreen) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1172 //the SDL2 migration guide suggests setting width and height to 0 when using SDL_WINDOW_FULLSCREEN_DESKTOP |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1173 //but that doesn't seem to work right when using OpenGL, at least on Linux anyway |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1174 width = mode.w; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1175 height = mode.h; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1176 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1177 main_width = width; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1178 main_height = height; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1179 is_fullscreen = fullscreen; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1180 |
486
db5880d8ea03
Add an FPS counter to the title bar
Mike Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
1181 caption = title; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1182 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1183 window_setup(); |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1184 |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1185 audio_mutex = SDL_CreateMutex(); |
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1186 audio_ready = SDL_CreateCond(); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1187 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1188 init_audio(); |
1355
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1189 |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1190 uint32_t db_size; |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1191 char *db_data = read_bundled_file("gamecontrollerdb.txt", &db_size); |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1192 if (db_data) { |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1193 int added = SDL_GameControllerAddMappingsFromRW(SDL_RWFromMem(db_data, db_size), 1); |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1194 free(db_data); |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
1195 debug_message("Added %d game controller mappings from gamecontrollerdb.txt\n", added); |
1355
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1196 } |
03cb4dd2499f
Load extra controller mappings from gamecontrollerdb.txt
Michael Pavone <pavone@retrodev.com>
parents:
1336
diff
changeset
|
1197 |
1603
c0727712d529
Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents:
1600
diff
changeset
|
1198 controller_add_mappings(); |
c0727712d529
Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents:
1600
diff
changeset
|
1199 |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1200 SDL_JoystickEventState(SDL_ENABLE); |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1201 |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1202 render_set_video_standard(VID_NTSC); |
874
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1203 |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
1204 atexit(render_quit); |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1205 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1206 static int in_toggle; |
1590
220ede292e97
Initial attempt at handling switches between sync modes at runtime. Needs work
Michael Pavone <pavone@retrodev.com>
parents:
1589
diff
changeset
|
1207 |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1208 void render_config_updated(void) |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1209 { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1210 free_surfaces(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1211 #ifndef DISABLE_OPENGL |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1212 if (render_gl) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1213 if (on_context_destroyed) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1214 on_context_destroyed(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1215 } |
1593
24508cb54f87
Fix a number of other memory errors (mostly leaks again) identified by valgrind
Michael Pavone <pavone@retrodev.com>
parents:
1591
diff
changeset
|
1216 gl_teardown(); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1217 SDL_GL_DeleteContext(main_context); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1218 } else { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1219 #endif |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1220 SDL_DestroyRenderer(main_renderer); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1221 #ifndef DISABLE_OPENGL |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1222 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1223 #endif |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1224 in_toggle = 1; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1225 SDL_DestroyWindow(main_window); |
1820
70a1304b432b
Fix crash that occurs when changing video screen settings if the emulator window is currently fullscreen. Add a little more error handling to Open GL code
Mike Pavone <pavone@retrodev.com>
parents:
1810
diff
changeset
|
1226 main_window = NULL; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1227 drain_events(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1228 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1229 char *config_width = tern_find_path(config, "video\0width\0", TVAL_PTR).ptrval; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1230 if (config_width) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1231 windowed_width = atoi(config_width); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1232 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1233 char *config_height = tern_find_path(config, "video\0height\0", TVAL_PTR).ptrval; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1234 if (config_height) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1235 windowed_height = atoi(config_height); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1236 } else { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1237 float aspect = config_aspect() > 0.0f ? config_aspect() : 4.0f/3.0f; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1238 windowed_height = ((float)windowed_width / aspect) + 0.5f; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1239 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1240 char *config_fullscreen = tern_find_path(config, "video\0fullscreen\0", TVAL_PTR).ptrval; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1241 is_fullscreen = config_fullscreen && !strcmp("on", config_fullscreen); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1242 if (is_fullscreen) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1243 SDL_DisplayMode mode; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1244 //TODO: Multiple monitor support |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1245 SDL_GetCurrentDisplayMode(0, &mode); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1246 main_width = mode.w; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1247 main_height = mode.h; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1248 } else { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1249 main_width = windowed_width; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1250 main_height = windowed_height; |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1251 } |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1252 if (on_ui_fb_resized) { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1253 on_ui_fb_resized(); |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1254 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1255 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1256 window_setup(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1257 update_aspect(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1258 #ifndef DISABLE_OPENGL |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1259 //need to check render_gl again after window_setup as render option could have changed |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1260 if (render_gl && on_context_created) { |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1261 on_context_created(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1262 } |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1263 #endif |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1264 |
1580
ea7d5ced2415
Fix deadlock when changing settings before loading first ROM
Michael Pavone <pavone@retrodev.com>
parents:
1574
diff
changeset
|
1265 uint8_t was_paused = SDL_GetAudioStatus() == SDL_AUDIO_PAUSED; |
ea7d5ced2415
Fix deadlock when changing settings before loading first ROM
Michael Pavone <pavone@retrodev.com>
parents:
1574
diff
changeset
|
1266 render_close_audio(); |
ea7d5ced2415
Fix deadlock when changing settings before loading first ROM
Michael Pavone <pavone@retrodev.com>
parents:
1574
diff
changeset
|
1267 quitting = 0; |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1268 init_audio(); |
1590
220ede292e97
Initial attempt at handling switches between sync modes at runtime. Needs work
Michael Pavone <pavone@retrodev.com>
parents:
1589
diff
changeset
|
1269 render_set_video_standard(video_standard); |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1270 |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1271 drain_events(); |
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1272 in_toggle = 0; |
1590
220ede292e97
Initial attempt at handling switches between sync modes at runtime. Needs work
Michael Pavone <pavone@retrodev.com>
parents:
1589
diff
changeset
|
1273 if (!was_paused) { |
220ede292e97
Initial attempt at handling switches between sync modes at runtime. Needs work
Michael Pavone <pavone@retrodev.com>
parents:
1589
diff
changeset
|
1274 SDL_PauseAudio(0); |
220ede292e97
Initial attempt at handling switches between sync modes at runtime. Needs work
Michael Pavone <pavone@retrodev.com>
parents:
1589
diff
changeset
|
1275 } |
1573
a051d8ee4528
Only save config file if something has changed. Re-initialize audio and video with new settings if config has changed
Michael Pavone <pavone@retrodev.com>
parents:
1567
diff
changeset
|
1276 } |
719
019d27995e32
Upgrade to SDL 2.0 and drop support for the non-OpenGL render path
Michael Pavone <pavone@retrodev.com>
parents:
655
diff
changeset
|
1277 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1278 SDL_Window *render_get_window(void) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1279 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1280 return main_window; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1281 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1282 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1283 uint32_t render_audio_syncs_per_sec(void) |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1284 { |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1285 //sync samples with audio thread approximately every 8 lines when doing sync to video |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1286 return render_is_audio_sync() ? 0 : source_hz * (video_standard == VID_PAL ? 313 : 262) / 8; |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1287 } |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1288 |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1289 void render_set_video_standard(vid_std std) |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1290 { |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1291 video_standard = std; |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1292 if (render_is_audio_sync()) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1293 return; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1294 } |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1295 source_hz = std == VID_PAL ? 50 : 60; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1296 uint32_t max_repeat = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1297 if (abs(source_hz - display_hz) < 2) { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1298 memset(frame_repeat, 0, sizeof(int)*display_hz); |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1299 } else { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1300 int inc = display_hz * 100000 / source_hz; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1301 int accum = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1302 int dst_frames = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1303 for (int src_frame = 0; src_frame < source_hz; src_frame++) |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1304 { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1305 frame_repeat[src_frame] = -1; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1306 accum += inc; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1307 while (accum > 100000) |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1308 { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1309 accum -= 100000; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1310 frame_repeat[src_frame]++; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1311 max_repeat = frame_repeat[src_frame] > max_repeat ? frame_repeat[src_frame] : max_repeat; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1312 dst_frames++; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1313 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1314 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1315 if (dst_frames != display_hz) { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1316 frame_repeat[source_hz-1] += display_hz - dst_frames; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1317 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1318 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1319 source_frame = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1320 source_frame_count = frame_repeat[0]; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1321 max_repeat++; |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1322 min_buffered = (((float)max_repeat * (float)sample_rate/(float)source_hz)/* / (float)buffer_samples*/);// + 0.9999; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1323 //min_buffered *= buffer_samples; |
1792
52a47611a273
Avoid printing a bunch of junk to stdout when GDB remote debugging is enabled as this can confuse GDB
Michael Pavone <pavone@retrodev.com>
parents:
1693
diff
changeset
|
1324 debug_message("Min samples buffered before audio start: %d\n", min_buffered); |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1325 max_adjust = BASE_MAX_ADJUST / source_hz; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1326 } |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1327 |
874
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1328 void render_update_caption(char *title) |
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1329 { |
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1330 caption = title; |
1068
624696318b5b
Fix a memory corruption bug from failing to grow the buffer for the window caption when switching games
Michael Pavone <pavone@retrodev.com>
parents:
1033
diff
changeset
|
1331 free(fps_caption); |
624696318b5b
Fix a memory corruption bug from failing to grow the buffer for the window caption when switching games
Michael Pavone <pavone@retrodev.com>
parents:
1033
diff
changeset
|
1332 fps_caption = NULL; |
874
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1333 } |
b6842dfb8edf
ROM is now run after being selected in menu. Initial path for menu is read from config file.
Michael Pavone <pavone@retrodev.com>
parents:
816
diff
changeset
|
1334 |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1335 static char *screenshot_path; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1336 void render_save_screenshot(char *path) |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1337 { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1338 if (screenshot_path) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1339 free(screenshot_path); |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1340 } |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1341 screenshot_path = path; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1342 } |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1343 |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
1344 uint8_t render_create_window(char *caption, uint32_t width, uint32_t height, window_close_handler close_handler) |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1345 { |
1642
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1346 uint8_t win_idx = 0xFF; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1347 for (int i = 0; i < num_textures - FRAMEBUFFER_USER_START; i++) |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1348 { |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1349 if (!extra_windows[i]) { |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1350 win_idx = i; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1351 break; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1352 } |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1353 } |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1354 |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1355 if (win_idx == 0xFF) { |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1356 num_textures++; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1357 sdl_textures = realloc(sdl_textures, num_textures * sizeof(*sdl_textures)); |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1358 extra_windows = realloc(extra_windows, (num_textures - FRAMEBUFFER_USER_START) * sizeof(*extra_windows)); |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1359 extra_renderers = realloc(extra_renderers, (num_textures - FRAMEBUFFER_USER_START) * sizeof(*extra_renderers)); |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
1360 close_handlers = realloc(close_handlers, (num_textures - FRAMEBUFFER_USER_START) * sizeof(*close_handlers)); |
1642
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1361 win_idx = num_textures - FRAMEBUFFER_USER_START - 1; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1362 } |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1363 extra_windows[win_idx] = SDL_CreateWindow(caption, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, 0); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1364 if (!extra_windows[win_idx]) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1365 goto fail_window; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1366 } |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1367 extra_renderers[win_idx] = SDL_CreateRenderer(extra_windows[win_idx], -1, SDL_RENDERER_ACCELERATED); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1368 if (!extra_renderers[win_idx]) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1369 goto fail_renderer; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1370 } |
1642
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1371 uint8_t texture_idx = win_idx + FRAMEBUFFER_USER_START; |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1372 sdl_textures[texture_idx] = SDL_CreateTexture(extra_renderers[win_idx], SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, width, height); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1373 if (!sdl_textures[texture_idx]) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1374 goto fail_texture; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1375 } |
1649
b500e971da75
Allow closing VDP debug windows with the close button in the window title bar
Michael Pavone <pavone@retrodev.com>
parents:
1642
diff
changeset
|
1376 close_handlers[win_idx] = close_handler; |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1377 return texture_idx; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1378 |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1379 fail_texture: |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1380 SDL_DestroyRenderer(extra_renderers[win_idx]); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1381 fail_renderer: |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1382 SDL_DestroyWindow(extra_windows[win_idx]); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1383 fail_window: |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1384 num_textures--; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1385 return 0; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1386 } |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1387 |
1642
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1388 void render_destroy_window(uint8_t which) |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1389 { |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1390 uint8_t win_idx = which - FRAMEBUFFER_USER_START; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1391 //Destroying the renderers also frees the textures |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1392 SDL_DestroyRenderer(extra_renderers[win_idx]); |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1393 SDL_DestroyWindow(extra_windows[win_idx]); |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1394 |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1395 extra_renderers[win_idx] = NULL; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1396 extra_windows[win_idx] = NULL; |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1397 } |
c6b2c0f8cc61
Implemented support for toggling off a debug view
Michael Pavone <pavone@retrodev.com>
parents:
1635
diff
changeset
|
1398 |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1399 uint32_t *locked_pixels; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1400 uint32_t locked_pitch; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1401 uint32_t *render_get_framebuffer(uint8_t which, int *pitch) |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1402 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1403 if (sync_src == SYNC_AUDIO_THREAD || sync_src == SYNC_EXTERNAL) { |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1404 *pitch = LINEBUF_SIZE * sizeof(uint32_t); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1405 uint32_t *buffer; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1406 SDL_LockMutex(free_buffer_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1407 if (num_buffers) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1408 buffer = frame_buffers[--num_buffers]; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1409 } else { |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
1410 buffer = calloc(tex_width*(tex_height + 1), sizeof(uint32_t)); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1411 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1412 SDL_UnlockMutex(free_buffer_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1413 locked_pixels = buffer; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1414 return buffer; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1415 } |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1416 #ifndef DISABLE_OPENGL |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1417 if (render_gl && which <= FRAMEBUFFER_EVEN) { |
1267
3772bb926be5
Initial stab at horizontal border emulation. Only works for H40 and still has a few minor holes to fill
Michael Pavone <pavone@retrodev.com>
parents:
1263
diff
changeset
|
1418 *pitch = LINEBUF_SIZE * sizeof(uint32_t); |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1419 return texture_buf; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1420 } else { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1421 #endif |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1422 if (which == FRAMEBUFFER_UI && !sdl_textures[which]) { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1423 sdl_textures[which] = SDL_CreateTexture(main_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, main_width, main_height); |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1424 } |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1425 if (which >= num_textures) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1426 warning("Request for invalid framebuffer number %d\n", which); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1427 return NULL; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1428 } |
1952
42c12d141f6e
Remove usage of GCC pointer arithmetic on void * extension
Michael Pavone <pavone@retrodev.com>
parents:
1949
diff
changeset
|
1429 uint8_t *pixels; |
42c12d141f6e
Remove usage of GCC pointer arithmetic on void * extension
Michael Pavone <pavone@retrodev.com>
parents:
1949
diff
changeset
|
1430 if (SDL_LockTexture(sdl_textures[which], NULL, (void **)&pixels, pitch) < 0) { |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1431 warning("Failed to lock texture: %s\n", SDL_GetError()); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1432 return NULL; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1433 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1434 static uint8_t last; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1435 if (which <= FRAMEBUFFER_EVEN) { |
1952
42c12d141f6e
Remove usage of GCC pointer arithmetic on void * extension
Michael Pavone <pavone@retrodev.com>
parents:
1949
diff
changeset
|
1436 locked_pixels = (uint32_t *)pixels; |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1437 if (which == FRAMEBUFFER_EVEN) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1438 pixels += *pitch; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1439 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1440 locked_pitch = *pitch; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1441 if (which != last) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1442 *pitch *= 2; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1443 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1444 last = which; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1445 } |
1952
42c12d141f6e
Remove usage of GCC pointer arithmetic on void * extension
Michael Pavone <pavone@retrodev.com>
parents:
1949
diff
changeset
|
1446 return (uint32_t *)pixels; |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1447 #ifndef DISABLE_OPENGL |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1448 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1449 #endif |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1450 } |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
1451 |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1452 static void release_buffer(uint32_t *buffer) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1453 { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1454 SDL_LockMutex(free_buffer_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1455 if (num_buffers == buffer_storage) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1456 buffer_storage *= 2; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1457 frame_buffers = realloc(frame_buffers, sizeof(uint32_t*)*buffer_storage); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1458 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1459 frame_buffers[num_buffers++] = buffer; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1460 SDL_UnlockMutex(free_buffer_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1461 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1462 |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1463 uint8_t events_processed; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1464 #ifdef __ANDROID__ |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1465 #define FPS_INTERVAL 10000 |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1466 #else |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1467 #define FPS_INTERVAL 1000 |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1468 #endif |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1469 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1470 static uint32_t last_width, last_height; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1471 static uint8_t interlaced; |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1472 static void process_framebuffer(uint32_t *buffer, uint8_t which, int width) |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1473 { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1474 static uint8_t last; |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1475 if (sync_src == SYNC_VIDEO && which <= FRAMEBUFFER_EVEN && source_frame_count < 0) { |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1476 source_frame++; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1477 if (source_frame >= source_hz) { |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1478 source_frame = 0; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1479 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1480 source_frame_count = frame_repeat[source_frame]; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1481 //TODO: Figure out what to do about SDL Render API texture locking |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1482 return; |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1483 } |
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1484 |
1398
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1485 last_width = width; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1486 uint32_t height = which <= FRAMEBUFFER_EVEN |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1487 ? (video_standard == VID_NTSC ? 243 : 294) - (overscan_top[video_standard] + overscan_bot[video_standard]) |
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1488 : 240; |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1489 FILE *screenshot_file = NULL; |
1336
baaf05fd64c4
Make internal screenshot functionality completely ignore overscan settings rather than only doing it for the height
Michael Pavone <pavone@retrodev.com>
parents:
1328
diff
changeset
|
1490 uint32_t shot_height, shot_width; |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1491 char *ext; |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1492 if (screenshot_path && which == FRAMEBUFFER_ODD) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1493 screenshot_file = fopen(screenshot_path, "wb"); |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1494 if (screenshot_file) { |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1495 #ifndef DISABLE_ZLIB |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1496 ext = path_extension(screenshot_path); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1497 #endif |
1851
419b458f93cd
Demote screenshot message to debug level so that a popup is not spawned when saving a screenshot
Michael Pavone <pavone@retrodev.com>
parents:
1839
diff
changeset
|
1498 debug_message("Saving screenshot to %s\n", screenshot_path); |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1499 } else { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1500 warning("Failed to open screenshot file %s for writing\n", screenshot_path); |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1501 } |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1502 free(screenshot_path); |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1503 screenshot_path = NULL; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1504 shot_height = video_standard == VID_NTSC ? 243 : 294; |
1336
baaf05fd64c4
Make internal screenshot functionality completely ignore overscan settings rather than only doing it for the height
Michael Pavone <pavone@retrodev.com>
parents:
1328
diff
changeset
|
1505 shot_width = width; |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1506 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1507 interlaced = last != which; |
1336
baaf05fd64c4
Make internal screenshot functionality completely ignore overscan settings rather than only doing it for the height
Michael Pavone <pavone@retrodev.com>
parents:
1328
diff
changeset
|
1508 width -= overscan_left[video_standard] + overscan_right[video_standard]; |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1509 #ifndef DISABLE_OPENGL |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1510 if (render_gl && which <= FRAMEBUFFER_EVEN) { |
1633
9b7cba9ba541
Use SDL_GL_MakeCurrent to make the SDL renderer API windows play nice with GL windows
Michael Pavone <pavone@retrodev.com>
parents:
1631
diff
changeset
|
1511 SDL_GL_MakeCurrent(main_window, main_context); |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1512 glBindTexture(GL_TEXTURE_2D, textures[which]); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1513 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, LINEBUF_SIZE, height, SRC_FORMAT, GL_UNSIGNED_BYTE, buffer + overscan_left[video_standard] + LINEBUF_SIZE * overscan_top[video_standard]); |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1514 |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1515 if (screenshot_file) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1516 //properly supporting interlaced modes here is non-trivial, so only save the odd field for now |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1517 #ifndef DISABLE_ZLIB |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1518 if (!strcasecmp(ext, "png")) { |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1519 free(ext); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1520 save_png(screenshot_file, buffer, shot_width, shot_height, LINEBUF_SIZE*sizeof(uint32_t)); |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1521 } else { |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1522 free(ext); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1523 #endif |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1524 save_ppm(screenshot_file, buffer, shot_width, shot_height, LINEBUF_SIZE*sizeof(uint32_t)); |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1525 #ifndef DISABLE_ZLIB |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1526 } |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1527 #endif |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1528 } |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1529 } else { |
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1530 #endif |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1531 //TODO: Support SYNC_AUDIO_THREAD/SYNC_EXTERNAL for render API framebuffers |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1532 if (which <= FRAMEBUFFER_EVEN && last != which) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1533 uint8_t *cur_dst = (uint8_t *)locked_pixels; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1534 uint8_t *cur_saved = (uint8_t *)texture_buf; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1535 uint32_t dst_off = which == FRAMEBUFFER_EVEN ? 0 : locked_pitch; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1536 uint32_t src_off = which == FRAMEBUFFER_EVEN ? locked_pitch : 0; |
1184
b1147418254a
Overscan is now configurable
Michael Pavone <pavone@retrodev.com>
parents:
1167
diff
changeset
|
1537 for (int i = 0; i < height; ++i) |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1538 { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1539 //copy saved line from other field |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1540 memcpy(cur_dst + dst_off, cur_saved, locked_pitch); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1541 //save line from this field to buffer for next frame |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1542 memcpy(cur_saved, cur_dst + src_off, locked_pitch); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1543 cur_dst += locked_pitch * 2; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1544 cur_saved += locked_pitch; |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1545 } |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1546 height = 480; |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1547 } |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1548 if (screenshot_file) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1549 uint32_t shot_pitch = locked_pitch; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1550 if (which == FRAMEBUFFER_EVEN) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1551 shot_height *= 2; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1552 } else { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1553 shot_pitch *= 2; |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1554 } |
1532
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1555 #ifndef DISABLE_ZLIB |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1556 if (!strcasecmp(ext, "png")) { |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1557 free(ext); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1558 save_png(screenshot_file, locked_pixels, shot_width, shot_height, shot_pitch); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1559 } else { |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1560 free(ext); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1561 #endif |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1562 save_ppm(screenshot_file, locked_pixels, shot_width, shot_height, shot_pitch); |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1563 #ifndef DISABLE_ZLIB |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1564 } |
b505083dcd87
Added png screenshot support
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1565 #endif |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1566 } |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1567 SDL_UnlockTexture(sdl_textures[which]); |
798
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1568 #ifndef DISABLE_OPENGL |
062a2199daf6
Use SDL2 renderer as a fallback
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
797
diff
changeset
|
1569 } |
797
65181c3ee560
Add pure SDL2 renderer
=?UTF-8?q?Higor=20Eur=C3=ADpedes?= <heuripedes@gmail.com>
parents:
766
diff
changeset
|
1570 #endif |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1571 last_height = height; |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1572 if (which <= FRAMEBUFFER_EVEN) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1573 render_update_display(); |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1574 } else if (which == FRAMEBUFFER_UI) { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1575 SDL_RenderCopy(main_renderer, sdl_textures[which], NULL, NULL); |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1576 if (need_ui_fb_resize) { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1577 SDL_DestroyTexture(sdl_textures[which]); |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1578 sdl_textures[which] = NULL; |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1579 if (on_ui_fb_resized) { |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1580 on_ui_fb_resized(); |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1581 } |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1582 need_ui_fb_resize = 0; |
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
1583 } |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1584 } else { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1585 SDL_RenderCopy(extra_renderers[which - FRAMEBUFFER_USER_START], sdl_textures[which], NULL, NULL); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1586 SDL_RenderPresent(extra_renderers[which - FRAMEBUFFER_USER_START]); |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
1587 } |
1263
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1588 if (screenshot_file) { |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1589 fclose(screenshot_file); |
5f65a16c23ff
Implement raw screenshot functionality requested in ticket:10
Michael Pavone <pavone@retrodev.com>
parents:
1258
diff
changeset
|
1590 } |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1591 if (which <= FRAMEBUFFER_EVEN) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1592 last = which; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1593 static uint32_t frame_counter, start; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1594 frame_counter++; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1595 last_frame= SDL_GetTicks(); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1596 if ((last_frame - start) > FPS_INTERVAL) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1597 if (start && (last_frame-start)) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1598 #ifdef __ANDROID__ |
1839
78abbabfd58d
Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
1825
diff
changeset
|
1599 debug_message("%s - %.1f fps", caption, ((float)frame_counter) / (((float)(last_frame-start)) / 1000.0)); |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1600 #else |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1601 if (!fps_caption) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1602 fps_caption = malloc(strlen(caption) + strlen(" - 100000000.1 fps") + 1); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1603 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1604 sprintf(fps_caption, "%s - %.1f fps", caption, ((float)frame_counter) / (((float)(last_frame-start)) / 1000.0)); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1605 SDL_SetWindowTitle(main_window, fps_caption); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1606 #endif |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1607 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1608 start = last_frame; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1609 frame_counter = 0; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1610 } |
449
7696d824489d
Started work on OpenGL support in new branch
Mike Pavone <pavone@retrodev.com>
parents:
426
diff
changeset
|
1611 } |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1612 if (!render_is_audio_sync()) { |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1613 int32_t local_cur_min, local_min_remaining; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1614 SDL_LockAudio(); |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1615 if (last_buffered > NO_LAST_BUFFERED) { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1616 average_change *= 0.9f; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1617 average_change += (cur_min_buffered - last_buffered) * 0.1f; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1618 } |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1619 local_cur_min = cur_min_buffered; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1620 local_min_remaining = min_remaining_buffer; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1621 last_buffered = cur_min_buffered; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1622 SDL_UnlockAudio(); |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1623 float frames_to_problem; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1624 if (average_change < 0) { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1625 frames_to_problem = (float)local_cur_min / -average_change; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1626 } else { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1627 frames_to_problem = (float)local_min_remaining / average_change; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1628 } |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1629 float adjust_ratio = 0.0f; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1630 if ( |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1631 frames_to_problem < BUFFER_FRAMES_THRESHOLD |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1632 || (average_change < 0 && local_cur_min < 3*min_buffered / 4) |
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1633 || (average_change >0 && local_cur_min > 5 * min_buffered / 4) |
1635
022d01b64496
Fix edge case in DRC audio path
Michael Pavone <pavone@retrodev.com>
parents:
1633
diff
changeset
|
1634 || cur_min_buffered < 0 |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1635 ) { |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1636 |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1637 if (cur_min_buffered < 0) { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1638 adjust_ratio = max_adjust; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1639 SDL_PauseAudio(1); |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1640 last_buffered = NO_LAST_BUFFERED; |
1589
780604a036e4
Limit underflow warning spam
Michael Pavone <pavone@retrodev.com>
parents:
1588
diff
changeset
|
1641 cur_min_buffered = 0; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1642 } else { |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1643 adjust_ratio = -1.0 * average_change / ((float)sample_rate / (float)source_hz); |
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1644 adjust_ratio /= 2.5 * source_hz; |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1645 if (fabsf(adjust_ratio) > max_adjust) { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1646 adjust_ratio = adjust_ratio > 0 ? max_adjust : -max_adjust; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1647 } |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1648 } |
1567
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1649 } else if (local_cur_min < min_buffered / 2) { |
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1650 adjust_ratio = max_adjust; |
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1651 } |
66387b1645e4
Audio DRC seems to be working pretty well now. Removed debug printfs
Michael Pavone <pavone@retrodev.com>
parents:
1566
diff
changeset
|
1652 if (adjust_ratio != 0.0f) { |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1653 average_change = 0; |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1654 render_audio_adjust_speed(adjust_ratio); |
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1655 |
1566
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1656 } |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1657 while (source_frame_count > 0) |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1658 { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1659 render_update_display(); |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1660 source_frame_count--; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1661 } |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1662 source_frame++; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1663 if (source_frame >= source_hz) { |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1664 source_frame = 0; |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1665 } |
cbb40af77a94
Moved resample rate adjustment to after frame flip rather than in audio callback as it makes more sense there. Needs adjustment to avoid audible pitch changes
Michael Pavone <pavone@retrodev.com>
parents:
1565
diff
changeset
|
1666 source_frame_count = frame_repeat[source_frame]; |
1563
6a62434d6bb1
WIP dynamic rate control
Michael Pavone <pavone@retrodev.com>
parents:
1562
diff
changeset
|
1667 } |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1668 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1669 |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1670 typedef struct { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1671 uint32_t *buffer; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1672 int width; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1673 uint8_t which; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1674 } frame; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1675 frame frame_queue[4]; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1676 int frame_queue_len, frame_queue_read, frame_queue_write; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1677 |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1678 void render_framebuffer_updated(uint8_t which, int width) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1679 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1680 if (sync_src == SYNC_AUDIO_THREAD || sync_src == SYNC_EXTERNAL) { |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1681 SDL_LockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1682 while (frame_queue_len == 4) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1683 SDL_CondSignal(frame_ready); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1684 SDL_UnlockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1685 SDL_Delay(1); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1686 SDL_LockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1687 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1688 for (int cur = frame_queue_read, i = 0; i < frame_queue_len; i++) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1689 if (frame_queue[cur].which == which) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1690 int last = (frame_queue_write - 1) & 3; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1691 frame_queue_len--; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1692 release_buffer(frame_queue[cur].buffer); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1693 if (last != cur) { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1694 frame_queue[cur] = frame_queue[last]; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1695 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1696 frame_queue_write = last; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1697 break; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1698 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1699 cur = (cur + 1) & 3; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1700 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1701 frame_queue[frame_queue_write++] = (frame){ |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1702 .buffer = locked_pixels, |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1703 .width = width, |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1704 .which = which |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1705 }; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1706 frame_queue_write &= 0x3; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1707 frame_queue_len++; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1708 SDL_CondSignal(frame_ready); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1709 SDL_UnlockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1710 return; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1711 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1712 //TODO: Maybe fixme for render API |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1713 process_framebuffer(texture_buf, which, width); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1714 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1715 |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1716 void render_video_loop(void) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1717 { |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
1718 if (sync_src != SYNC_AUDIO_THREAD && sync_src != SYNC_EXTERNAL) { |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1719 return; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1720 } |
1981
3537514ea206
Go back to unpausing audio in render_video_loop to ensure the core is no longer running on the main thread when audio callbacks start when using run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1980
diff
changeset
|
1721 SDL_PauseAudio(0); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1722 SDL_LockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1723 for(;;) |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1724 { |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
1725 while (!frame_queue_len && SDL_GetAudioStatus() == SDL_AUDIO_PLAYING) |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1726 { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1727 SDL_CondWait(frame_ready, frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1728 } |
1979
06c25babe464
Don't hold frame queue mutex while rendering
Michael Pavone <pavone@retrodev.com>
parents:
1978
diff
changeset
|
1729 while (frame_queue_len) |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1730 { |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1731 frame f = frame_queue[frame_queue_read++]; |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1732 frame_queue_read &= 0x3; |
1979
06c25babe464
Don't hold frame queue mutex while rendering
Michael Pavone <pavone@retrodev.com>
parents:
1978
diff
changeset
|
1733 frame_queue_len--; |
06c25babe464
Don't hold frame queue mutex while rendering
Michael Pavone <pavone@retrodev.com>
parents:
1978
diff
changeset
|
1734 SDL_UnlockMutex(frame_mutex); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1735 process_framebuffer(f.buffer, f.which, f.width); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1736 release_buffer(f.buffer); |
1979
06c25babe464
Don't hold frame queue mutex while rendering
Michael Pavone <pavone@retrodev.com>
parents:
1978
diff
changeset
|
1737 SDL_LockMutex(frame_mutex); |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1738 } |
1980
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
1739 if (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING) { |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
1740 break; |
81df9aa2de9b
Less hacky run on audio thread mode
Michael Pavone <pavone@retrodev.com>
parents:
1979
diff
changeset
|
1741 } |
1932
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1742 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1743 |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1744 SDL_UnlockMutex(frame_mutex); |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1745 } |
b387f1c5a1d0
WIP new sync mode that runs emulation on audio thread
Michael Pavone <pavone@retrodev.com>
parents:
1895
diff
changeset
|
1746 |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1747 static ui_render_fun render_ui; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1748 void render_set_ui_render_fun(ui_render_fun fun) |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1749 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1750 render_ui = fun; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1751 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1752 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1753 void render_update_display() |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1754 { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1755 #ifndef DISABLE_OPENGL |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1756 if (render_gl) { |
1528
855210dca5b9
Set glClearColor back to black
Michael Pavone <pavone@retrodev.com>
parents:
1483
diff
changeset
|
1757 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1758 glClear(GL_COLOR_BUFFER_BIT); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1759 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1760 glUseProgram(program); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1761 glActiveTexture(GL_TEXTURE0); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1762 glBindTexture(GL_TEXTURE_2D, textures[0]); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1763 glUniform1i(un_textures[0], 0); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1764 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1765 glActiveTexture(GL_TEXTURE1); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1766 glBindTexture(GL_TEXTURE_2D, textures[interlaced ? 1 : scanlines ? 2 : 0]); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1767 glUniform1i(un_textures[1], 1); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1768 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1769 glUniform1f(un_width, render_emulated_width()); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1770 glUniform1f(un_height, last_height); |
1977
f3cca4b3f17a
Allow use of NPOT textures as a config option. Useful for some mobile GPUs
Michael Pavone <pavone@retrodev.com>
parents:
1975
diff
changeset
|
1771 glUniform2f(un_texsize, tex_width, tex_height); |
1474
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1772 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1773 glBindBuffer(GL_ARRAY_BUFFER, buffers[0]); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1774 glVertexAttribPointer(at_pos, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat[2]), (void *)0); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1775 glEnableVertexAttribArray(at_pos); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1776 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1777 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1778 glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, (void *)0); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1779 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1780 glDisableVertexAttribArray(at_pos); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1781 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1782 if (render_ui) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1783 render_ui(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1784 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1785 |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1786 SDL_GL_SwapWindow(main_window); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1787 } else { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1788 #endif |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1789 SDL_Rect src_clip = { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1790 .x = overscan_left[video_standard], |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1791 .y = overscan_top[video_standard], |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1792 .w = render_emulated_width(), |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1793 .h = last_height |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1794 }; |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1795 SDL_SetRenderDrawColor(main_renderer, 0, 0, 0, 255); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1796 SDL_RenderClear(main_renderer); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1797 SDL_RenderCopy(main_renderer, sdl_textures[FRAMEBUFFER_ODD], &src_clip, &main_clip); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1798 if (render_ui) { |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1799 render_ui(); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1800 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1801 SDL_RenderPresent(main_renderer); |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1802 #ifndef DISABLE_OPENGL |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1803 } |
c5c022c7aa54
Initial work on Nuklear-based UI
Michael Pavone <pavone@retrodev.com>
parents:
1441
diff
changeset
|
1804 #endif |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1805 if (!events_processed) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1806 process_events(); |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1807 } |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1808 events_processed = 0; |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1809 } |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1810 |
1398
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1811 uint32_t render_emulated_width() |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1812 { |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1813 return last_width - overscan_left[video_standard] - overscan_right[video_standard]; |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1814 } |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1815 |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1816 uint32_t render_emulated_height() |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1817 { |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1818 return (video_standard == VID_NTSC ? 243 : 294) - overscan_top[video_standard] - overscan_bot[video_standard]; |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1819 } |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1820 |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1821 uint32_t render_overscan_left() |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1822 { |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1823 return overscan_left[video_standard]; |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1824 } |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1825 |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1826 uint32_t render_overscan_top() |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1827 { |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1828 return overscan_top[video_standard]; |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1829 } |
08116cb5ffaa
Fix absolute mouse mode when non-default overscan settings are used
Michael Pavone <pavone@retrodev.com>
parents:
1397
diff
changeset
|
1830 |
1881
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1865
diff
changeset
|
1831 uint32_t render_overscan_bot() |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1865
diff
changeset
|
1832 { |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1865
diff
changeset
|
1833 return overscan_bot[video_standard]; |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1865
diff
changeset
|
1834 } |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1865
diff
changeset
|
1835 |
1865
4c322abd9fa5
Split generic part of audio code into a separate file so it can be used in other targets besides SDL
Michael Pavone <pavone@retrodev.com>
parents:
1862
diff
changeset
|
1836 void render_wait_quit(void) |
20
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1837 { |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1838 SDL_Event event; |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1839 while(SDL_WaitEvent(&event)) { |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1840 switch (event.type) { |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1841 case SDL_QUIT: |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1842 return; |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1843 } |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1844 } |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1845 } |
f664eeb55cb4
Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1846 |
1623
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1847 int render_lookup_button(char *name) |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1848 { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1849 static tern_node *button_lookup; |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1850 if (!button_lookup) { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1851 for (int i = SDL_CONTROLLER_BUTTON_A; i < SDL_CONTROLLER_BUTTON_MAX; i++) |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1852 { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1853 button_lookup = tern_insert_int(button_lookup, SDL_GameControllerGetStringForButton(i), i); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1854 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1855 //alternative Playstation-style names |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1856 button_lookup = tern_insert_int(button_lookup, "cross", SDL_CONTROLLER_BUTTON_A); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1857 button_lookup = tern_insert_int(button_lookup, "circle", SDL_CONTROLLER_BUTTON_B); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1858 button_lookup = tern_insert_int(button_lookup, "square", SDL_CONTROLLER_BUTTON_X); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1859 button_lookup = tern_insert_int(button_lookup, "triangle", SDL_CONTROLLER_BUTTON_Y); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1860 button_lookup = tern_insert_int(button_lookup, "share", SDL_CONTROLLER_BUTTON_BACK); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1861 button_lookup = tern_insert_int(button_lookup, "select", SDL_CONTROLLER_BUTTON_BACK); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1862 button_lookup = tern_insert_int(button_lookup, "options", SDL_CONTROLLER_BUTTON_START); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1863 button_lookup = tern_insert_int(button_lookup, "l1", SDL_CONTROLLER_BUTTON_LEFTSHOULDER); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1864 button_lookup = tern_insert_int(button_lookup, "r1", SDL_CONTROLLER_BUTTON_RIGHTSHOULDER); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1865 button_lookup = tern_insert_int(button_lookup, "l3", SDL_CONTROLLER_BUTTON_LEFTSTICK); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1866 button_lookup = tern_insert_int(button_lookup, "r3", SDL_CONTROLLER_BUTTON_RIGHTSTICK); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1867 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1868 return (int)tern_find_int(button_lookup, name, SDL_CONTROLLER_BUTTON_INVALID); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1869 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1870 |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1871 int render_lookup_axis(char *name) |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1872 { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1873 static tern_node *axis_lookup; |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1874 if (!axis_lookup) { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1875 for (int i = SDL_CONTROLLER_AXIS_LEFTX; i < SDL_CONTROLLER_AXIS_MAX; i++) |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1876 { |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1877 axis_lookup = tern_insert_int(axis_lookup, SDL_GameControllerGetStringForAxis(i), i); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1878 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1879 //alternative Playstation-style names |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1880 axis_lookup = tern_insert_int(axis_lookup, "l2", SDL_CONTROLLER_AXIS_TRIGGERLEFT); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1881 axis_lookup = tern_insert_int(axis_lookup, "r2", SDL_CONTROLLER_AXIS_TRIGGERRIGHT); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1882 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1883 return (int)tern_find_int(axis_lookup, name, SDL_CONTROLLER_AXIS_INVALID); |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1884 } |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1885 |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1886 int32_t render_translate_input_name(int32_t controller, char *name, uint8_t is_axis) |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1887 { |
1623
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1888 tern_node *button_lookup, *axis_lookup; |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1889 if (controller > MAX_JOYSTICKS || !joysticks[controller]) { |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1890 return RENDER_NOT_PLUGGED_IN; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1891 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1892 |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1893 if (!SDL_IsGameController(joystick_sdl_index[controller])) { |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1894 return RENDER_NOT_MAPPED; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1895 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1896 SDL_GameController *control = SDL_GameControllerOpen(joystick_sdl_index[controller]); |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1897 if (!control) { |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1898 warning("Failed to open game controller %d: %s\n", controller, SDL_GetError()); |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1899 return RENDER_NOT_PLUGGED_IN; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1900 } |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1901 |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1902 SDL_GameControllerButtonBind cbind; |
1804
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1903 int32_t is_positive = RENDER_AXIS_POS; |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1904 if (is_axis) { |
1623
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1905 |
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1906 int sdl_axis = render_lookup_axis(name); |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1907 if (sdl_axis == SDL_CONTROLLER_AXIS_INVALID) { |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1908 SDL_GameControllerClose(control); |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1909 return RENDER_INVALID_NAME; |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1910 } |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1911 cbind = SDL_GameControllerGetBindForAxis(control, sdl_axis); |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1912 } else { |
1623
18a946ec74c8
Pull current controller config in binding UI from whatever the actual binding code would end up using
Michael Pavone <pavone@retrodev.com>
parents:
1608
diff
changeset
|
1913 int sdl_button = render_lookup_button(name); |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1914 if (sdl_button == SDL_CONTROLLER_BUTTON_INVALID) { |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1915 SDL_GameControllerClose(control); |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1916 return RENDER_INVALID_NAME; |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1917 } |
1804
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1918 if (sdl_button == SDL_CONTROLLER_BUTTON_DPAD_UP || sdl_button == SDL_CONTROLLER_BUTTON_DPAD_LEFT) { |
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1919 //assume these will be negative if they are an axis |
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1920 is_positive = 0; |
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1921 } |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1922 cbind = SDL_GameControllerGetBindForButton(control, sdl_button); |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1923 } |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1924 SDL_GameControllerClose(control); |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1925 switch (cbind.bindType) |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1926 { |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1927 case SDL_CONTROLLER_BINDTYPE_BUTTON: |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1928 return cbind.value.button; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1929 case SDL_CONTROLLER_BINDTYPE_AXIS: |
1804
34370330eaf3
Support controllers that have their dpad mapped to an axis
Michael Pavone <pavone@retrodev.com>
parents:
1799
diff
changeset
|
1930 return RENDER_AXIS_BIT | cbind.value.axis | is_positive; |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1931 case SDL_CONTROLLER_BINDTYPE_HAT: |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1932 return RENDER_DPAD_BIT | (cbind.value.hat.hat << 4) | cbind.value.hat.hat_mask; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1933 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1934 return RENDER_NOT_MAPPED; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1935 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1936 |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1937 int32_t render_dpad_part(int32_t input) |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1938 { |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1939 return input >> 4 & 0xFFFFFF; |
1187
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1940 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1941 |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1942 uint8_t render_direction_part(int32_t input) |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1943 { |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1944 return input & 0xF; |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1945 } |
6a4503fad67e
Initial support for using SDL2 game controller mapping functionality
Michael Pavone <pavone@retrodev.com>
parents:
1184
diff
changeset
|
1946 |
1207
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1947 int32_t render_axis_part(int32_t input) |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1948 { |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1949 return input & 0xFFFFFFF; |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1950 } |
9d6f155732ed
Basic support for mapping an analog axis to functionality
Michael Pavone <pavone@retrodev.com>
parents:
1205
diff
changeset
|
1951 |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
398
diff
changeset
|
1952 void process_events() |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
398
diff
changeset
|
1953 { |
1077
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1954 if (events_processed > MAX_EVENT_POLL_PER_FRAME) { |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1955 return; |
1a66d5165ea7
Cleanup the separation of render backend and VDP code in preparation for having extra debug windows. Make determination of H40/H32 based on number of lines in each mode.
Michael Pavone <pavone@retrodev.com>
parents:
1074
diff
changeset
|
1956 } |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1957 drain_events(); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1958 events_processed++; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1959 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1960 |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1961 #define TOGGLE_MIN_DELAY 250 |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1962 void render_toggle_fullscreen() |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1963 { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1964 //protect against event processing causing us to attempt to toggle while still toggling |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1965 if (in_toggle) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1966 return; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1967 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1968 in_toggle = 1; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1969 |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1970 //toggling too fast seems to cause a deadlock |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1971 static uint32_t last_toggle; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1972 uint32_t cur = SDL_GetTicks(); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1973 if (last_toggle && cur - last_toggle < TOGGLE_MIN_DELAY) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1974 in_toggle = 0; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1975 return; |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
398
diff
changeset
|
1976 } |
1202
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1977 last_toggle = cur; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1978 |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1979 drain_events(); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1980 is_fullscreen = !is_fullscreen; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1981 if (is_fullscreen) { |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1982 SDL_DisplayMode mode; |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1983 //TODO: Multiple monitor support |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1984 SDL_GetCurrentDisplayMode(0, &mode); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1985 //In theory, the SDL2 docs suggest this is unnecessary |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1986 //but without it the OpenGL context remains the original size |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1987 //This needs to happen before the fullscreen transition to have any effect |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1988 //because SDL does not apply window size changes in fullscreen |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1989 SDL_SetWindowSize(main_window, mode.w, mode.h); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1990 } |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1991 SDL_SetWindowFullscreen(main_window, is_fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1992 //Since we change the window size on transition to full screen |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1993 //we need to set it back to normal so we can also go back to windowed mode |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1994 //normally you would think that this should only be done when actually transitioning |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1995 //but something is screwy in the guts of SDL (at least on Linux) and setting it each time |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1996 //is the only thing that seems to work reliably |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1997 //when we've just switched to fullscreen mode this should be harmless though |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1998 SDL_SetWindowSize(main_window, windowed_width, windowed_height); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
1999 drain_events(); |
a6ae693974e0
Allow toggling full screen mode at runtime. Allow resizing the window in windowed mode. Allow specifying the aspect ratio in the config file.
Michael Pavone <pavone@retrodev.com>
parents:
1198
diff
changeset
|
2000 in_toggle = 0; |
1825
56a1171e29b9
Allow Nuklear UI to be used when OpenGL is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1820
diff
changeset
|
2001 need_ui_fb_resize = 1; |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
398
diff
changeset
|
2002 } |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
398
diff
changeset
|
2003 |
792
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2004 void render_errorbox(char *title, char *message) |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2005 { |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2006 SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, message, NULL); |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2007 } |
354
15dd6418fe67
Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents:
342
diff
changeset
|
2008 |
792
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2009 void render_warnbox(char *title, char *message) |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2010 { |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2011 SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING, title, message, NULL); |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2012 } |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2013 |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2014 void render_infobox(char *title, char *message) |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2015 { |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2016 SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, title, message, NULL); |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2017 } |
724bbec47f86
Use a new fatal_error function instead of calling fprintf and exit for fatal errors. This new function more gracefully handles the case in which BlastEm was not started from a terminal or disconnected from ther terminal (Windows).
Michael Pavone <pavone@retrodev.com>
parents:
766
diff
changeset
|
2018 |
1482
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2019 uint32_t render_elapsed_ms(void) |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2020 { |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2021 return SDL_GetTicks(); |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2022 } |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2023 |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2024 void render_sleep_ms(uint32_t delay) |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2025 { |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2026 return SDL_Delay(delay); |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2027 } |
2d203bf73dbd
Avoid burning a huge amount of CPU in the menu when emulation is not running and vsync is disabled
Michael Pavone <pavone@retrodev.com>
parents:
1476
diff
changeset
|
2028 |
1483
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
2029 uint8_t render_has_gl(void) |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
2030 { |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
2031 return render_gl; |
001120e91fed
Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
Michael Pavone <pavone@retrodev.com>
parents:
1482
diff
changeset
|
2032 } |
1631
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2033 |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2034 uint8_t render_get_active_framebuffer(void) |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2035 { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2036 if (SDL_GetWindowFlags(main_window) & SDL_WINDOW_INPUT_FOCUS) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2037 return FRAMEBUFFER_ODD; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2038 } |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2039 for (int i = 0; i < num_textures - 2; i++) |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2040 { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2041 if (extra_windows[i] && (SDL_GetWindowFlags(extra_windows[i]) & SDL_WINDOW_INPUT_FOCUS)) { |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2042 return FRAMEBUFFER_USER_START + i; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2043 } |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2044 } |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2045 return 0xFF; |
c4ba3177b72d
WIP new VDP plane debug view and support for detached VDP debug views generally
Michael Pavone <pavone@retrodev.com>
parents:
1623
diff
changeset
|
2046 } |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2047 |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2048 uint8_t render_create_thread(render_thread *thread, const char *name, render_thread_fun fun, void *data) |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2049 { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2050 *thread = SDL_CreateThread(fun, name, data); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2051 return *thread != 0; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1952
diff
changeset
|
2052 } |