mirror of
https://github.com/gopher64/gopher64.git
synced 2026-07-11 01:25:20 +02:00
Add option for high-res graphics (#111)
This commit is contained in:
@@ -132,7 +132,7 @@ static const unsigned cmd_len_lut[64] = {
|
||||
1,
|
||||
};
|
||||
|
||||
void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen)
|
||||
void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen, bool _upscale)
|
||||
{
|
||||
window = (SDL_Window *)_window;
|
||||
SDL_SetEventFilter(sdl_event_filter, nullptr);
|
||||
@@ -156,6 +156,11 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, bool _fullscreen)
|
||||
rdp_close();
|
||||
}
|
||||
RDP::CommandProcessorFlags flags = 0;
|
||||
if (_upscale)
|
||||
{
|
||||
flags |= RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT;
|
||||
flags |= RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT;
|
||||
}
|
||||
processor = new RDP::CommandProcessor(wsi->get_device(), gfx_info.RDRAM, 0, gfx_info.RDRAM_SIZE, gfx_info.RDRAM_SIZE / 2, flags);
|
||||
|
||||
if (!processor->device_is_supported())
|
||||
|
||||
@@ -23,7 +23,7 @@ extern "C"
|
||||
uint32_t *VI_WIDTH_REG;
|
||||
} GFX_INFO;
|
||||
|
||||
void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen);
|
||||
void rdp_init(void *_window, GFX_INFO _gfx_info, bool fullscreen, bool _upscale);
|
||||
void rdp_close();
|
||||
void rdp_set_vi_register(uint32_t reg, uint32_t value);
|
||||
bool rdp_update_screen();
|
||||
|
||||
@@ -18,8 +18,13 @@ pub struct Input {
|
||||
pub controller_enabled: [bool; 4],
|
||||
}
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
pub struct Video {
|
||||
pub upscale: bool,
|
||||
}
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
pub struct Config {
|
||||
pub input: Input,
|
||||
pub video: Video,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
@@ -38,6 +43,7 @@ impl Config {
|
||||
input_profiles,
|
||||
controller_enabled: [true, false, false, false],
|
||||
},
|
||||
video: Video { upscale: false },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ pub struct GopherEguiApp {
|
||||
selected_profile: [String; 4],
|
||||
input_profiles: Vec<String>,
|
||||
controller_enabled: [bool; 4],
|
||||
upscale: bool,
|
||||
}
|
||||
|
||||
fn get_input_profiles(game_ui: &ui::Ui) -> Vec<String> {
|
||||
@@ -65,6 +66,7 @@ impl GopherEguiApp {
|
||||
controllers: get_controllers(&game_ui),
|
||||
input_profiles: get_input_profiles(&game_ui),
|
||||
controller_enabled: game_ui.config.input.controller_enabled,
|
||||
upscale: game_ui.config.video.upscale,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,6 +76,7 @@ fn save_config(
|
||||
selected_controller: [i32; 4],
|
||||
selected_profile: [String; 4],
|
||||
controller_enabled: [bool; 4],
|
||||
upscale: bool,
|
||||
) {
|
||||
let joystick_subsystem = game_ui.joystick_subsystem.as_ref().unwrap();
|
||||
for (pos, item) in selected_controller.iter().enumerate() {
|
||||
@@ -91,6 +94,8 @@ fn save_config(
|
||||
|
||||
game_ui.config.input.input_profile_binding = selected_profile;
|
||||
game_ui.config.input.controller_enabled = controller_enabled;
|
||||
|
||||
game_ui.config.video.upscale = upscale;
|
||||
}
|
||||
|
||||
impl Drop for GopherEguiApp {
|
||||
@@ -101,6 +106,7 @@ impl Drop for GopherEguiApp {
|
||||
self.selected_controller,
|
||||
self.selected_profile.clone(),
|
||||
self.controller_enabled,
|
||||
self.upscale,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -148,6 +154,7 @@ impl eframe::App for GopherEguiApp {
|
||||
let selected_controller = self.selected_controller;
|
||||
let selected_profile = self.selected_profile.clone();
|
||||
let controller_enabled = self.controller_enabled;
|
||||
let upscale = self.upscale;
|
||||
execute(async move {
|
||||
let file = task.await;
|
||||
|
||||
@@ -166,6 +173,7 @@ impl eframe::App for GopherEguiApp {
|
||||
selected_controller,
|
||||
selected_profile,
|
||||
controller_enabled,
|
||||
upscale,
|
||||
);
|
||||
device::run_game(std::path::Path::new(file.path()), &mut device, false);
|
||||
let _ = std::fs::remove_file(running_file.clone());
|
||||
@@ -233,6 +241,8 @@ impl eframe::App for GopherEguiApp {
|
||||
}
|
||||
});
|
||||
ui.add_space(32.0);
|
||||
ui.checkbox(&mut self.upscale, "High-Res Graphics");
|
||||
ui.add_space(32.0);
|
||||
ui.label(format!("Version: {}", env!("CARGO_PKG_VERSION")));
|
||||
});
|
||||
}
|
||||
|
||||
+2
-1
@@ -17,7 +17,7 @@ pub struct GfxInfo {
|
||||
}
|
||||
|
||||
unsafe extern "C" {
|
||||
pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool);
|
||||
pub fn rdp_init(window: usize, gfx_info: GfxInfo, fullscreen: bool, upscale: bool);
|
||||
pub fn rdp_close();
|
||||
pub fn rdp_update_screen() -> bool;
|
||||
pub fn rdp_set_vi_register(reg: u32, value: u32);
|
||||
@@ -62,6 +62,7 @@ pub fn init(device: &mut device::Device, fullscreen: bool) {
|
||||
device.ui.window.as_mut().unwrap().raw() as usize,
|
||||
gfx_info,
|
||||
fullscreen,
|
||||
device.ui.config.video.upscale,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user