early-access version 1752

This commit is contained in:
pineappleEA 2021-06-05 06:18:39 +02:00
parent af925f1c1f
commit 3e0a265d01
6 changed files with 60 additions and 17 deletions

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 1751. This is the source code for early-access 1752.
## Legal Notice ## Legal Notice

View file

@ -64,11 +64,11 @@ void Swizzle(std::span<u8> output, std::span<const u8> input, u32 bytes_per_pixe
slice * pitch * height + line * pitch + column * bytes_per_pixel; slice * pitch * height + line * pitch + column * bytes_per_pixel;
if (const auto offset = (TO_LINEAR ? unswizzled_offset : swizzled_offset); if (const auto offset = (TO_LINEAR ? unswizzled_offset : swizzled_offset);
offset > input.size()) { offset >= input.size()) {
// TODO(Rodrigo): This is an out of bounds access that should never happen. To // TODO(Rodrigo): This is an out of bounds access that should never happen. To
// avoid crashing the emulator, continue. // avoid crashing the emulator, break.
ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size()); ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size());
continue; break;
} }
u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset]; u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset];

View file

@ -317,6 +317,43 @@ void Config::ReadValues() {
sdl2_config->GetInteger("ControlsGeneral", "touch_diameter_x", 15); sdl2_config->GetInteger("ControlsGeneral", "touch_diameter_x", 15);
Settings::values.touchscreen.diameter_y = Settings::values.touchscreen.diameter_y =
sdl2_config->GetInteger("ControlsGeneral", "touch_diameter_y", 15); sdl2_config->GetInteger("ControlsGeneral", "touch_diameter_y", 15);
int num_touch_from_button_maps =
sdl2_config->GetInteger("ControlsGeneral", "touch_from_button_map", 0);
if (num_touch_from_button_maps > 0) {
for (int i = 0; i < num_touch_from_button_maps; ++i) {
Settings::TouchFromButtonMap map;
map.name = sdl2_config->Get("ControlsGeneral",
std::string("touch_from_button_maps_") + std::to_string(i) +
std::string("_name"),
"default");
const int num_touch_maps = sdl2_config->GetInteger(
"ControlsGeneral",
std::string("touch_from_button_maps_") + std::to_string(i) + std::string("_count"),
0);
map.buttons.reserve(num_touch_maps);
for (int j = 0; j < num_touch_maps; ++j) {
std::string touch_mapping =
sdl2_config->Get("ControlsGeneral",
std::string("touch_from_button_maps_") + std::to_string(i) +
std::string("_bind_") + std::to_string(j),
"");
map.buttons.emplace_back(std::move(touch_mapping));
}
Settings::values.touch_from_button_maps.emplace_back(std::move(map));
}
} else {
Settings::values.touch_from_button_maps.emplace_back(
Settings::TouchFromButtonMap{"default", {}});
num_touch_from_button_maps = 1;
}
Settings::values.use_touch_from_button =
sdl2_config->GetBoolean("ControlsGeneral", "use_touch_from_button", false);
Settings::values.touch_from_button_map_index =
std::clamp(Settings::values.touch_from_button_map_index, 0, num_touch_from_button_maps - 1);
Settings::values.udp_input_servers = Settings::values.udp_input_servers =
sdl2_config->Get("Controls", "udp_input_address", InputCommon::CemuhookUDP::DEFAULT_SRV); sdl2_config->Get("Controls", "udp_input_address", InputCommon::CemuhookUDP::DEFAULT_SRV);

View file

@ -7,7 +7,7 @@
namespace DefaultINI { namespace DefaultINI {
const char* sdl2_config_file = R"( const char* sdl2_config_file = R"(
[Controls] [ControlsGeneral]
# The input devices and parameters for each Switch native input # The input devices and parameters for each Switch native input
# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." # It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..."
# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values # Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values
@ -86,6 +86,18 @@ motion_device=
# - "min_x", "min_y", "max_x", "max_y": defines the udp device's touch screen coordinate system # - "min_x", "min_y", "max_x", "max_y": defines the udp device's touch screen coordinate system
touch_device= touch_device=
# Whether to enable or disable touch input from button
# 0 (default): Disabled, 1: Enabled
use_touch_from_button=
# for mapping buttons to touch inputs.
#touch_from_button_map=1
#touch_from_button_maps_0_name=default
#touch_from_button_maps_0_count=2
#touch_from_button_maps_0_bind_0=foo
#touch_from_button_maps_0_bind_1=bar
# etc.
# Most desktop operating systems do not expose a way to poll the motion state of the controllers # Most desktop operating systems do not expose a way to poll the motion state of the controllers
# so as a way around it, cemuhook created a udp client/server protocol to broadcast the data directly # so as a way around it, cemuhook created a udp client/server protocol to broadcast the data directly
# from a controller device to the client program. Citra has a client that can connect and read # from a controller device to the client program. Citra has a client that can connect and read

View file

@ -32,17 +32,17 @@
class SDLGLContext : public Core::Frontend::GraphicsContext { class SDLGLContext : public Core::Frontend::GraphicsContext {
public: public:
explicit SDLGLContext() { explicit SDLGLContext(SDL_Window* window) : window(window) {
// create a hidden window to make the shared context against
window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0,
SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL);
context = SDL_GL_CreateContext(window); context = SDL_GL_CreateContext(window);
} }
~SDLGLContext() { ~SDLGLContext() {
DoneCurrent(); DoneCurrent();
SDL_GL_DeleteContext(context); SDL_GL_DeleteContext(context);
SDL_DestroyWindow(window); }
void SwapBuffers() override {
SDL_GL_SwapWindow(window);
} }
void MakeCurrent() override { void MakeCurrent() override {
@ -114,9 +114,6 @@ EmuWindow_SDL2_GL::EmuWindow_SDL2_GL(InputCommon::InputSubsystem* input_subsyste
exit(1); exit(1);
} }
dummy_window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0,
SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL);
SetWindowIcon(); SetWindowIcon();
if (fullscreen) { if (fullscreen) {
@ -159,5 +156,5 @@ EmuWindow_SDL2_GL::~EmuWindow_SDL2_GL() {
} }
std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_GL::CreateSharedContext() const { std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_GL::CreateSharedContext() const {
return std::make_unique<SDLGLContext>(); return std::make_unique<SDLGLContext>(render_window);
} }

View file

@ -20,9 +20,6 @@ public:
std::unique_ptr<Core::Frontend::GraphicsContext> CreateSharedContext() const override; std::unique_ptr<Core::Frontend::GraphicsContext> CreateSharedContext() const override;
private: private:
/// Fake hidden window for the core context
SDL_Window* dummy_window{};
/// Whether the GPU and driver supports the OpenGL extension required /// Whether the GPU and driver supports the OpenGL extension required
bool SupportsRequiredGLExtensions(); bool SupportsRequiredGLExtensions();