Reduce memory leaks maybe?
This commit is contained in:
4
external/parallel-rdp/ParallelRDPWrapper.cpp
vendored
4
external/parallel-rdp/ParallelRDPWrapper.cpp
vendored
@@ -21,7 +21,7 @@ void ParallelRDP::SetFramerateUnlocked(bool unlocked) {
|
|||||||
Program* fullscreen_quad_program;
|
Program* fullscreen_quad_program;
|
||||||
|
|
||||||
void ParallelRDP::LoadWSIPlatform(Vulkan::InstanceFactory* instanceFactory, std::unique_ptr<Vulkan::WSIPlatform>&& wsi_platform, std::unique_ptr<ParallelRDP::WindowInfo>&& newWindowInfo) {
|
void ParallelRDP::LoadWSIPlatform(Vulkan::InstanceFactory* instanceFactory, std::unique_ptr<Vulkan::WSIPlatform>&& wsi_platform, std::unique_ptr<ParallelRDP::WindowInfo>&& newWindowInfo) {
|
||||||
wsi = new WSI();
|
wsi = std::make_unique<WSI>();
|
||||||
wsi->set_backbuffer_srgb(false);
|
wsi->set_backbuffer_srgb(false);
|
||||||
wsi->set_platform(wsi_platform.get());
|
wsi->set_platform(wsi_platform.get());
|
||||||
wsi->set_present_mode(PresentMode::SyncToVBlank);
|
wsi->set_present_mode(PresentMode::SyncToVBlank);
|
||||||
@@ -72,7 +72,7 @@ void ParallelRDP::Init(Vulkan::InstanceFactory* factory, std::unique_ptr<Vulkan:
|
|||||||
|
|
||||||
CommandProcessorFlags flags = 0;
|
CommandProcessorFlags flags = 0;
|
||||||
|
|
||||||
command_processor = new CommandProcessor(wsi->get_device(), reinterpret_cast<void*>(aligned_rdram),
|
command_processor = std::make_unique<CommandProcessor>(wsi->get_device(), reinterpret_cast<void*>(aligned_rdram),
|
||||||
offset, 8 * 1024 * 1024, 4 * 1024 * 1024, flags);
|
offset, 8 * 1024 * 1024, 4 * 1024 * 1024, flags);
|
||||||
|
|
||||||
if (!command_processor->device_is_supported()) {
|
if (!command_processor->device_is_supported()) {
|
||||||
|
|||||||
8
external/parallel-rdp/ParallelRDPWrapper.hpp
vendored
8
external/parallel-rdp/ParallelRDPWrapper.hpp
vendored
@@ -17,10 +17,6 @@ public:
|
|||||||
|
|
||||||
void Init(Vulkan::InstanceFactory*, std::unique_ptr<Vulkan::WSIPlatform>&&, std::unique_ptr<WindowInfo>&&, const u8*);
|
void Init(Vulkan::InstanceFactory*, std::unique_ptr<Vulkan::WSIPlatform>&&, std::unique_ptr<WindowInfo>&&, const u8*);
|
||||||
ParallelRDP() = default;
|
ParallelRDP() = default;
|
||||||
~ParallelRDP() {
|
|
||||||
delete wsi;
|
|
||||||
delete command_processor;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateScreen(n64::VI&, bool = false);
|
void UpdateScreen(n64::VI&, bool = false);
|
||||||
void EnqueueCommand(int, u32*);
|
void EnqueueCommand(int, u32*);
|
||||||
@@ -32,7 +28,7 @@ private:
|
|||||||
void DrawFullscreenTexturedQuad(Util::IntrusivePtr<Vulkan::Image>, Util::IntrusivePtr<Vulkan::CommandBuffer>);
|
void DrawFullscreenTexturedQuad(Util::IntrusivePtr<Vulkan::Image>, Util::IntrusivePtr<Vulkan::CommandBuffer>);
|
||||||
void UpdateScreen(Util::IntrusivePtr<Vulkan::Image>);
|
void UpdateScreen(Util::IntrusivePtr<Vulkan::Image>);
|
||||||
|
|
||||||
Vulkan::WSI* wsi = nullptr;
|
std::unique_ptr<Vulkan::WSI> wsi;
|
||||||
RDP::CommandProcessor* command_processor;
|
std::unique_ptr<RDP::CommandProcessor> command_processor;
|
||||||
std::unique_ptr<WindowInfo> windowInfo;
|
std::unique_ptr<WindowInfo> windowInfo;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,21 +37,14 @@ void PIF::MaybeLoadMempak() {
|
|||||||
if (error) { Util::panic("Could not sync {}", mempakPath); }
|
if (error) { Util::panic("Could not sync {}", mempakPath); }
|
||||||
mempak.unmap();
|
mempak.unmap();
|
||||||
}
|
}
|
||||||
FILE *f = fopen(mempakPath.c_str(), "rb");
|
|
||||||
if (!f) {
|
|
||||||
f = fopen(mempakPath.c_str(), "wb");
|
|
||||||
u8 *dummy = (u8 *) calloc(MEMPAK_SIZE, 1);
|
|
||||||
fwrite(dummy, 1, MEMPAK_SIZE, f);
|
|
||||||
free(dummy);
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(f, 0, SEEK_END);
|
auto mempakVec = Util::ReadFileBinary(mempakPath);
|
||||||
size_t actualSize = ftell(f);
|
if(mempak.empty())
|
||||||
fseek(f, 0, SEEK_SET);
|
Util::WriteFileBinary(std::array<u8, MEMPAK_SIZE>{}, mempakPath);
|
||||||
if (actualSize != MEMPAK_SIZE) {
|
|
||||||
|
if (mempakVec.size() != MEMPAK_SIZE) {
|
||||||
Util::panic("Corrupt mempak!");
|
Util::panic("Corrupt mempak!");
|
||||||
}
|
}
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
mempak = mio::make_mmap_sink(
|
mempak = mio::make_mmap_sink(
|
||||||
mempakPath, 0, mio::map_entire_file, error);
|
mempakPath, 0, mio::map_entire_file, error);
|
||||||
@@ -88,20 +81,14 @@ void PIF::LoadEeprom(SaveType saveType, const std::string& path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
eepromSize = GetSaveSize(saveType);
|
eepromSize = GetSaveSize(saveType);
|
||||||
FILE *f = fopen(eepromPath.c_str(), "rb");
|
|
||||||
if (!f) {
|
|
||||||
f = fopen(eepromPath.c_str(), "wb");
|
|
||||||
u8* dummy = (u8*)calloc(eepromSize, 1);
|
|
||||||
fwrite(dummy, 1, eepromSize, f);
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(f, 0, SEEK_END);
|
auto eepromVec = Util::ReadFileBinary(eepromPath);
|
||||||
size_t actualSize = ftell(f);
|
if(eepromVec.empty())
|
||||||
fseek(f, 0, SEEK_SET);
|
Util::WriteFileBinary(std::array<u8, MEMPAK_SIZE>{}, eepromPath);
|
||||||
if (actualSize != eepromSize) {
|
|
||||||
|
if (eepromVec.size() != eepromSize) {
|
||||||
Util::panic("Corrupt eeprom!");
|
Util::panic("Corrupt eeprom!");
|
||||||
}
|
}
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
eeprom = mio::make_mmap_sink(
|
eeprom = mio::make_mmap_sink(
|
||||||
eepromPath, 0, mio::map_entire_file, error);
|
eepromPath, 0, mio::map_entire_file, error);
|
||||||
|
|||||||
@@ -3,21 +3,21 @@
|
|||||||
#include <ParallelRDPWrapper.hpp>
|
#include <ParallelRDPWrapper.hpp>
|
||||||
#include "Audio.hpp"
|
#include "Audio.hpp"
|
||||||
|
|
||||||
EmuThread::EmuThread(std::unique_ptr<QtInstanceFactory>&& instance_, std::unique_ptr<Vulkan::WSIPlatform>&& wsiPlatform_, std::unique_ptr<ParallelRDP::WindowInfo>&& windowInfo_, QObject* parent_object) noexcept
|
EmuThread::EmuThread(std::unique_ptr<QtInstanceFactory>&& instance_, std::unique_ptr<Vulkan::WSIPlatform>&& wsiPlatform_, std::unique_ptr<ParallelRDP::WindowInfo>&& windowInfo_, SettingsWindow& settings) noexcept
|
||||||
: QThread(parent_object), instance(std::move(instance_)), wsiPlatform(std::move(wsiPlatform_)), windowInfo(std::move(windowInfo_)) {}
|
: instance(std::move(instance_)), wsiPlatform(std::move(wsiPlatform_)), windowInfo(std::move(windowInfo_)), core(parallel), settings(settings) {}
|
||||||
|
|
||||||
[[noreturn]] void EmuThread::run() noexcept {
|
[[noreturn]] void EmuThread::run() noexcept {
|
||||||
parallel.Init(instance.get(), std::move(wsiPlatform), std::move(windowInfo), core->cpu->GetMem().GetRDRAMPtr());
|
parallel.Init(instance.get(), std::move(wsiPlatform), std::move(windowInfo), core.cpu->GetMem().GetRDRAMPtr());
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (!core->pause) {
|
if (!core.pause) {
|
||||||
core->Run(settings->getVolumeL(), settings->getVolumeR());
|
core.Run(settings.getVolumeL(), settings.getVolumeR());
|
||||||
if(core->render) {
|
if(core.render) {
|
||||||
parallel.UpdateScreen(core->cpu->GetMem().mmio.vi);
|
parallel.UpdateScreen(core.cpu->GetMem().mmio.vi);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(core->render) {
|
if(core.render) {
|
||||||
parallel.UpdateScreen(core->cpu->GetMem().mmio.vi, true);
|
parallel.UpdateScreen(core.cpu->GetMem().mmio.vi, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,23 +15,15 @@ class EmuThread : public QThread
|
|||||||
std::unique_ptr<Vulkan::WSIPlatform> wsiPlatform;
|
std::unique_ptr<Vulkan::WSIPlatform> wsiPlatform;
|
||||||
std::unique_ptr<ParallelRDP::WindowInfo> windowInfo;
|
std::unique_ptr<ParallelRDP::WindowInfo> windowInfo;
|
||||||
public:
|
public:
|
||||||
explicit EmuThread(std::unique_ptr<QtInstanceFactory>&& instance, std::unique_ptr<Vulkan::WSIPlatform>&& wsiPlatform, std::unique_ptr<ParallelRDP::WindowInfo>&& windowInfo, QObject* parent_object) noexcept;
|
explicit EmuThread(std::unique_ptr<QtInstanceFactory>&& instance, std::unique_ptr<Vulkan::WSIPlatform>&& wsiPlatform, std::unique_ptr<ParallelRDP::WindowInfo>&& windowInfo, SettingsWindow&) noexcept;
|
||||||
~EmuThread() {
|
|
||||||
delete core;
|
|
||||||
delete settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[noreturn]] void run() noexcept override;
|
[[noreturn]] void run() noexcept override;
|
||||||
|
|
||||||
ParallelRDP parallel;
|
ParallelRDP parallel;
|
||||||
n64::Core* core;
|
n64::Core core;
|
||||||
SettingsWindow* settings;
|
SettingsWindow& settings;
|
||||||
bool running = false;
|
bool running = false;
|
||||||
|
|
||||||
bool LoadTAS(const fs::path& path) {
|
|
||||||
return core->LoadTAS(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TogglePause()
|
void TogglePause()
|
||||||
{
|
{
|
||||||
running = !running;
|
running = !running;
|
||||||
@@ -40,15 +32,15 @@ public:
|
|||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
running = false;
|
running = false;
|
||||||
core->Stop();
|
core.Stop();
|
||||||
core->LoadROM(core->rom);
|
core.LoadROM(core.rom);
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stop()
|
void Stop()
|
||||||
{
|
{
|
||||||
core->rom = {};
|
core.rom = {};
|
||||||
running = false;
|
running = false;
|
||||||
core->Stop();
|
core.Stop();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -8,13 +8,12 @@
|
|||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
||||||
mainWindow = new MainWindowController();
|
mainWindow = std::make_unique<MainWindowController>();
|
||||||
emuThread = new EmuThread(
|
emuThread = std::make_unique<EmuThread>(
|
||||||
std::move(mainWindow->view.vulkanWidget->instance),
|
std::move(mainWindow->view.vulkanWidget->instance),
|
||||||
std::move(mainWindow->view.vulkanWidget->wsiPlatform),
|
std::move(mainWindow->view.vulkanWidget->wsiPlatform),
|
||||||
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
||||||
mainWindow);
|
*settingsWindow);
|
||||||
emuThread->core = new n64::Core(emuThread->parallel);
|
|
||||||
|
|
||||||
ConnectMainWindowSignalsToSlots();
|
ConnectMainWindowSignalsToSlots();
|
||||||
|
|
||||||
@@ -23,25 +22,23 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
|||||||
setFocus();
|
setFocus();
|
||||||
grabKeyboard();
|
grabKeyboard();
|
||||||
mainWindow->show();
|
mainWindow->show();
|
||||||
settingsWindow = new SettingsWindow;
|
settingsWindow = std::make_unique<SettingsWindow>();
|
||||||
settingsWindow->hide();
|
settingsWindow->hide();
|
||||||
connect(settingsWindow, &SettingsWindow::regrabKeyboard, this, [&]() {
|
connect(settingsWindow.get(), &SettingsWindow::regrabKeyboard, this, [&]() {
|
||||||
grabKeyboard();
|
grabKeyboard();
|
||||||
}),
|
});
|
||||||
emuThread->settings = settingsWindow;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KaizenQt::ConnectMainWindowSignalsToSlots() noexcept {
|
void KaizenQt::ConnectMainWindowSignalsToSlots() noexcept {
|
||||||
connect(mainWindow, &MainWindowController::OpenSettings, this, [this]() {
|
connect(mainWindow.get(), &MainWindowController::OpenSettings, this, [this]() {
|
||||||
settingsWindow->show();
|
settingsWindow->show();
|
||||||
});
|
});
|
||||||
connect(mainWindow, &MainWindowController::OpenROM, this, &KaizenQt::LoadROM);
|
connect(mainWindow.get(), &MainWindowController::OpenROM, this, &KaizenQt::LoadROM);
|
||||||
connect(mainWindow, &MainWindowController::Exit, this, []() {
|
connect(mainWindow.get(), &MainWindowController::Exit, this, []() {
|
||||||
QApplication::quit();
|
QApplication::quit();
|
||||||
});
|
});
|
||||||
connect(mainWindow, &MainWindowController::Reset, emuThread, &EmuThread::Reset);
|
connect(mainWindow.get(), &MainWindowController::Reset, emuThread.get(), &EmuThread::Reset);
|
||||||
connect(mainWindow, &MainWindowController::Stop, emuThread, &EmuThread::Stop);
|
connect(mainWindow.get(), &MainWindowController::Stop, emuThread.get(), &EmuThread::Stop);
|
||||||
connect(mainWindow, &MainWindowController::Pause, emuThread, &EmuThread::TogglePause);
|
connect(mainWindow.get(), &MainWindowController::Pause, emuThread.get(), &EmuThread::TogglePause);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KaizenQt::dragEnterEvent(QDragEnterEvent* event) {
|
void KaizenQt::dragEnterEvent(QDragEnterEvent* event) {
|
||||||
@@ -57,59 +54,59 @@ void KaizenQt::dropEvent(QDropEvent* event) {
|
|||||||
|
|
||||||
void KaizenQt::LoadROM(const QString& fileName) noexcept {
|
void KaizenQt::LoadROM(const QString& fileName) noexcept {
|
||||||
emuThread->start();
|
emuThread->start();
|
||||||
emuThread->core->LoadROM(fileName.toStdString());
|
emuThread->core.LoadROM(fileName.toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void KaizenQt::LoadTAS(const QString& fileName) noexcept {
|
void KaizenQt::LoadTAS(const QString& fileName) noexcept {
|
||||||
emuThread->core->LoadTAS(fileName.toStdString());
|
emuThread->core.LoadTAS(fileName.toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void KaizenQt::keyPressEvent(QKeyEvent *e) {
|
void KaizenQt::keyPressEvent(QKeyEvent *e) {
|
||||||
emuThread->core->pause = true;
|
emuThread->core.pause = true;
|
||||||
auto k = static_cast<Qt::Key>(e->key());
|
auto k = static_cast<Qt::Key>(e->key());
|
||||||
if(k == settingsWindow->keyMap[0]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, true);
|
if(k == settingsWindow->keyMap[0]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, true);
|
||||||
if(k == settingsWindow->keyMap[1]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, true);
|
if(k == settingsWindow->keyMap[1]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, true);
|
||||||
if(k == settingsWindow->keyMap[2]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, true);
|
if(k == settingsWindow->keyMap[2]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, true);
|
||||||
if(k == settingsWindow->keyMap[3]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, true);
|
if(k == settingsWindow->keyMap[3]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, true);
|
||||||
if(k == settingsWindow->keyMap[4]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, true);
|
if(k == settingsWindow->keyMap[4]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, true);
|
||||||
if(k == settingsWindow->keyMap[5]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, true);
|
if(k == settingsWindow->keyMap[5]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, true);
|
||||||
if(k == settingsWindow->keyMap[6]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, true);
|
if(k == settingsWindow->keyMap[6]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, true);
|
||||||
if(k == settingsWindow->keyMap[7]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, true);
|
if(k == settingsWindow->keyMap[7]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, true);
|
||||||
if(k == settingsWindow->keyMap[8]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, true);
|
if(k == settingsWindow->keyMap[8]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, true);
|
||||||
if(k == settingsWindow->keyMap[9]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, true);
|
if(k == settingsWindow->keyMap[9]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, true);
|
||||||
if(k == settingsWindow->keyMap[10]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, true);
|
if(k == settingsWindow->keyMap[10]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, true);
|
||||||
if(k == settingsWindow->keyMap[11]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, true);
|
if(k == settingsWindow->keyMap[11]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, true);
|
||||||
if(k == settingsWindow->keyMap[12]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, true);
|
if(k == settingsWindow->keyMap[12]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, true);
|
||||||
if(k == settingsWindow->keyMap[13]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, true);
|
if(k == settingsWindow->keyMap[13]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, true);
|
||||||
if(k == settingsWindow->keyMap[14]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 86);
|
if(k == settingsWindow->keyMap[14]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 86);
|
||||||
if(k == settingsWindow->keyMap[15]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, -86);
|
if(k == settingsWindow->keyMap[15]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, -86);
|
||||||
if(k == settingsWindow->keyMap[16]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, -86);
|
if(k == settingsWindow->keyMap[16]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, -86);
|
||||||
if(k == settingsWindow->keyMap[17]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 86);
|
if(k == settingsWindow->keyMap[17]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 86);
|
||||||
emuThread->core->pause = false;
|
emuThread->core.pause = false;
|
||||||
QWidget::keyPressEvent(e);
|
QWidget::keyPressEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KaizenQt::keyReleaseEvent(QKeyEvent *e) {
|
void KaizenQt::keyReleaseEvent(QKeyEvent *e) {
|
||||||
emuThread->core->pause = true;
|
emuThread->core.pause = true;
|
||||||
auto k = static_cast<Qt::Key>(e->key());
|
auto k = static_cast<Qt::Key>(e->key());
|
||||||
if (k == settingsWindow->keyMap[0]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, false);
|
if (k == settingsWindow->keyMap[0]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::A, false);
|
||||||
if (k == settingsWindow->keyMap[1]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, false);
|
if (k == settingsWindow->keyMap[1]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::B, false);
|
||||||
if (k == settingsWindow->keyMap[2]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, false);
|
if (k == settingsWindow->keyMap[2]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Z, false);
|
||||||
if (k == settingsWindow->keyMap[3]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, false);
|
if (k == settingsWindow->keyMap[3]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::Start, false);
|
||||||
if (k == settingsWindow->keyMap[4]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, false);
|
if (k == settingsWindow->keyMap[4]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::LT, false);
|
||||||
if (k == settingsWindow->keyMap[5]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, false);
|
if (k == settingsWindow->keyMap[5]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::RT, false);
|
||||||
if (k == settingsWindow->keyMap[6]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, false);
|
if (k == settingsWindow->keyMap[6]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DUp, false);
|
||||||
if (k == settingsWindow->keyMap[7]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, false);
|
if (k == settingsWindow->keyMap[7]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DDown, false);
|
||||||
if (k == settingsWindow->keyMap[8]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, false);
|
if (k == settingsWindow->keyMap[8]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DLeft, false);
|
||||||
if (k == settingsWindow->keyMap[9]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, false);
|
if (k == settingsWindow->keyMap[9]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::DRight, false);
|
||||||
if (k == settingsWindow->keyMap[10]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, false);
|
if (k == settingsWindow->keyMap[10]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CUp, false);
|
||||||
if (k == settingsWindow->keyMap[11]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, false);
|
if (k == settingsWindow->keyMap[11]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CDown, false);
|
||||||
if (k == settingsWindow->keyMap[12]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, false);
|
if (k == settingsWindow->keyMap[12]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CLeft, false);
|
||||||
if (k == settingsWindow->keyMap[13]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, false);
|
if (k == settingsWindow->keyMap[13]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateButton(n64::Controller::Key::CRight, false);
|
||||||
if (k == settingsWindow->keyMap[14]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0);
|
if (k == settingsWindow->keyMap[14]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0);
|
||||||
if (k == settingsWindow->keyMap[15]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0);
|
if (k == settingsWindow->keyMap[15]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::Y, 0);
|
||||||
if (k == settingsWindow->keyMap[16]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0);
|
if (k == settingsWindow->keyMap[16]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0);
|
||||||
if (k == settingsWindow->keyMap[17]) emuThread->core->cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0);
|
if (k == settingsWindow->keyMap[17]) emuThread->core.cpu->GetMem().mmio.si.pif.joybusDevices[0].controller.UpdateAxis(n64::Controller::Axis::X, 0);
|
||||||
emuThread->core->pause = false;
|
emuThread->core.pause = false;
|
||||||
QWidget::keyPressEvent(e);
|
QWidget::keyPressEvent(e);
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
void keyReleaseEvent(QKeyEvent*) override;
|
void keyReleaseEvent(QKeyEvent*) override;
|
||||||
private:
|
private:
|
||||||
void ConnectMainWindowSignalsToSlots() noexcept;
|
void ConnectMainWindowSignalsToSlots() noexcept;
|
||||||
MainWindowController* mainWindow;
|
std::unique_ptr<MainWindowController> mainWindow;
|
||||||
SettingsWindow* settingsWindow;
|
std::unique_ptr<SettingsWindow> settingsWindow;
|
||||||
EmuThread* emuThread;
|
std::unique_ptr<EmuThread> emuThread;
|
||||||
};
|
};
|
||||||
@@ -115,13 +115,11 @@ FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, size_t len) {
|
|||||||
static int have_table = 0;
|
static int have_table = 0;
|
||||||
u32 rem;
|
u32 rem;
|
||||||
u8 octet;
|
u8 octet;
|
||||||
int i, j;
|
|
||||||
const u8 *p, *q;
|
|
||||||
|
|
||||||
if (have_table == 0) {
|
if (have_table == 0) {
|
||||||
for (i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
rem = i;
|
rem = i;
|
||||||
for (j = 0; j < 8; j++) {
|
for (int j = 0; j < 8; j++) {
|
||||||
if (rem & 1) {
|
if (rem & 1) {
|
||||||
rem >>= 1;
|
rem >>= 1;
|
||||||
rem ^= 0xedb88320;
|
rem ^= 0xedb88320;
|
||||||
@@ -134,9 +132,8 @@ FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, size_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
crc = ~crc;
|
crc = ~crc;
|
||||||
q = buf + len;
|
for (int i = 0; i < len; i++) {
|
||||||
for (p = buf; p < q; p++) {
|
octet = buf[i]; /* Cast to unsigned octet. */
|
||||||
octet = *p; /* Cast to unsigned octet. */
|
|
||||||
crc = (crc >> 8) ^ table[(crc & 0xff) ^ octet];
|
crc = (crc >> 8) ^ table[(crc & 0xff) ^ octet];
|
||||||
}
|
}
|
||||||
return ~crc;
|
return ~crc;
|
||||||
|
|||||||
Reference in New Issue
Block a user