diff options
author | WaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com> | 2021-01-03 15:53:23 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-03 15:53:23 +0000 |
commit | 83648f2d3109bf16ac6f2317ab772803af11f482 (patch) | |
tree | e8207c55c4ae052ba07713892e998ab9050e9301 /src/frontend | |
parent | f070eafce473c49979cfe8ec1d2dd65de9084884 (diff) | |
parent | cb58a422ac59f40825f7a7c2e9b75237eb04637d (diff) |
Merge branch 'master' into feature/zip-support
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/qt_sdl/LAN_PCap.h | 5 | ||||
-rw-r--r-- | src/frontend/qt_sdl/LAN_Socket.cpp | 22 | ||||
-rw-r--r-- | src/frontend/qt_sdl/PlatformConfig.cpp | 13 | ||||
-rw-r--r-- | src/frontend/qt_sdl/PlatformConfig.h | 2 | ||||
-rw-r--r-- | src/frontend/qt_sdl/VideoSettingsDialog.cpp | 8 | ||||
-rw-r--r-- | src/frontend/qt_sdl/main.cpp | 129 | ||||
-rw-r--r-- | src/frontend/qt_sdl/main.h | 7 |
7 files changed, 142 insertions, 44 deletions
diff --git a/src/frontend/qt_sdl/LAN_PCap.h b/src/frontend/qt_sdl/LAN_PCap.h index 250b8e9..f636e12 100644 --- a/src/frontend/qt_sdl/LAN_PCap.h +++ b/src/frontend/qt_sdl/LAN_PCap.h @@ -24,7 +24,7 @@ namespace LAN_PCap { -typedef struct +struct AdapterData { char DeviceName[128]; char FriendlyName[128]; @@ -34,8 +34,7 @@ typedef struct u8 IP_v4[4]; void* Internal; - -} AdapterData; +}; extern AdapterData* Adapters; diff --git a/src/frontend/qt_sdl/LAN_Socket.cpp b/src/frontend/qt_sdl/LAN_Socket.cpp index 458c931..c147e69 100644 --- a/src/frontend/qt_sdl/LAN_Socket.cpp +++ b/src/frontend/qt_sdl/LAN_Socket.cpp @@ -48,7 +48,7 @@ const u32 kClientIP = kSubnet | 0x10; const u8 kServerMAC[6] = {0x00, 0xAB, 0x33, 0x28, 0x99, 0x44}; -FIFO<u32>* RXBuffer = nullptr; +FIFO<u32, (0x8000 >> 2)> RXBuffer; u32 IPv4ID; @@ -86,16 +86,16 @@ void RXEnqueue(const void* buf, int len) int alignedlen = (len + 3) & ~3; int totallen = alignedlen + 4; - if (!RXBuffer->CanFit(totallen >> 2)) + if (!RXBuffer.CanFit(totallen >> 2)) { printf("slirp: !! NOT ENOUGH SPACE IN RX BUFFER\n"); return; } u32 header = (alignedlen & 0xFFFF) | (len << 16); - RXBuffer->Write(header); + RXBuffer.Write(header); for (int i = 0; i < alignedlen; i += 4) - RXBuffer->Write(((u32*)buf)[i>>2]); + RXBuffer.Write(((u32*)buf)[i>>2]); } ssize_t SlirpCbSendPacket(const void* buf, size_t len, void* opaque) @@ -202,8 +202,6 @@ bool Init() //FDListSize = 0; //memset(FDList, 0, sizeof(FDList)); - RXBuffer = new FIFO<u32>(0x8000 >> 2); - SlirpConfig cfg; memset(&cfg, 0, sizeof(cfg)); cfg.version = 1; @@ -228,12 +226,6 @@ void DeInit() slirp_cleanup(Ctx); Ctx = nullptr; } - - if (RXBuffer) - { - delete RXBuffer; - RXBuffer = nullptr; - } } @@ -530,13 +522,13 @@ int RecvPacket(u8* data) slirp_pollfds_poll(Ctx, res<0, SlirpCbGetREvents, nullptr); } - if (!RXBuffer->IsEmpty()) + if (!RXBuffer.IsEmpty()) { - u32 header = RXBuffer->Read(); + u32 header = RXBuffer.Read(); u32 len = header & 0xFFFF; for (int i = 0; i < len; i += 4) - ((u32*)data)[i>>2] = RXBuffer->Read(); + ((u32*)data)[i>>2] = RXBuffer.Read(); ret = header >> 16; } diff --git a/src/frontend/qt_sdl/PlatformConfig.cpp b/src/frontend/qt_sdl/PlatformConfig.cpp index 9861662..46f8717 100644 --- a/src/frontend/qt_sdl/PlatformConfig.cpp +++ b/src/frontend/qt_sdl/PlatformConfig.cpp @@ -72,6 +72,8 @@ char MicWavPath[1024]; char LastROMFolder[1024]; +char RecentROMList[10][1024]; + int EnableCheats; bool EnableJIT; @@ -166,6 +168,17 @@ ConfigEntry PlatformConfigFile[] = {"LastROMFolder", 1, LastROMFolder, 0, "", 1023}, + {"RecentROM_0", 1, RecentROMList[0], 0, "", 1023}, + {"RecentROM_1", 1, RecentROMList[1], 0, "", 1023}, + {"RecentROM_2", 1, RecentROMList[2], 0, "", 1023}, + {"RecentROM_3", 1, RecentROMList[3], 0, "", 1023}, + {"RecentROM_4", 1, RecentROMList[4], 0, "", 1023}, + {"RecentROM_5", 1, RecentROMList[5], 0, "", 1023}, + {"RecentROM_6", 1, RecentROMList[6], 0, "", 1023}, + {"RecentROM_7", 1, RecentROMList[7], 0, "", 1023}, + {"RecentROM_8", 1, RecentROMList[8], 0, "", 1023}, + {"RecentROM_9", 1, RecentROMList[9], 0, "", 1023}, + {"EnableCheats", 0, &EnableCheats, 0, NULL, 0}, {"", -1, NULL, 0, NULL, 0} diff --git a/src/frontend/qt_sdl/PlatformConfig.h b/src/frontend/qt_sdl/PlatformConfig.h index ca03d80..2d73dea 100644 --- a/src/frontend/qt_sdl/PlatformConfig.h +++ b/src/frontend/qt_sdl/PlatformConfig.h @@ -86,6 +86,8 @@ extern char MicWavPath[1024]; extern char LastROMFolder[1024]; +extern char RecentROMList[10][1024]; + extern int EnableCheats; } diff --git a/src/frontend/qt_sdl/VideoSettingsDialog.cpp b/src/frontend/qt_sdl/VideoSettingsDialog.cpp index 1397ccd..934090d 100644 --- a/src/frontend/qt_sdl/VideoSettingsDialog.cpp +++ b/src/frontend/qt_sdl/VideoSettingsDialog.cpp @@ -84,6 +84,14 @@ VideoSettingsDialog::VideoSettingsDialog(QWidget* parent) : QDialog(parent), ui( ui->cbxGLResolution->setEnabled(true); ui->cbBetterPolygons->setEnabled(true); } + + // sorry + ui->cbVSync->hide(); + ui->cbVSync->setEnabled(false); + ui->sbVSyncInterval->hide(); + ui->sbVSyncInterval->setEnabled(false); + ui->label_2->hide(); + ui->groupBox->layout()->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding)); } VideoSettingsDialog::~VideoSettingsDialog() diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp index a473062..91e56f0 100644 --- a/src/frontend/qt_sdl/main.cpp +++ b/src/frontend/qt_sdl/main.cpp @@ -875,22 +875,26 @@ void ScreenPanelGL::initializeGL() screenShader->setUniformValue("ScreenTex", (GLint)0); screenShader->release(); - - float vertices[] = - { - 0, 0, 0, 0, - 0, 192, 0, 0.5, - 256, 192, 1, 0.5, - 0, 0, 0, 0, - 256, 192, 1, 0.5, - 256, 0, 1, 0, - - 0, 0, 0, 0.5, - 0, 192, 0, 1, - 256, 192, 1, 1, - 0, 0, 0, 0.5, - 256, 192, 1, 1, - 256, 0, 1, 0.5 + // to prevent bleeding between both parts of the screen + // with bilinear filtering enabled + const int paddedHeight = 192*2+2; + const float padPixels = 1.f / paddedHeight; + + const float vertices[] = + { + 0.f, 0.f, 0.f, 0.f, + 0.f, 192.f, 0.f, 0.5f - padPixels, + 256.f, 192.f, 1.f, 0.5f - padPixels, + 0.f, 0.f, 0.f, 0.f, + 256.f, 192.f, 1.f, 0.5f - padPixels, + 256.f, 0.f, 1.f, 0.f, + + 0.f, 0.f, 0.f, 0.5f + padPixels, + 0.f, 192.f, 0.f, 1.f, + 256.f, 192.f, 1.f, 1.f, + 0.f, 0.f, 0.f, 0.5f + padPixels, + 256.f, 192.f, 1.f, 1.f, + 256.f, 0.f, 1.f, 0.5f + padPixels }; glGenBuffers(1, &screenVertexBuffer); @@ -911,7 +915,11 @@ void ScreenPanelGL::initializeGL() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 192*2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, paddedHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + // fill the padding + u8 zeroData[256*4*4]; + memset(zeroData, 0, sizeof(zeroData)); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 192, 256, 2, GL_RGBA, GL_UNSIGNED_BYTE, zeroData); OSD::Init(this); } @@ -949,7 +957,7 @@ void ScreenPanelGL::paintGL() { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 192, GL_RGBA, GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][0]); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 192, 256, 192, GL_RGBA, + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 192+2, 256, 192, GL_RGBA, GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][1]); } } @@ -1021,6 +1029,14 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) actOpenROM = menu->addAction("Open ROM..."); connect(actOpenROM, &QAction::triggered, this, &MainWindow::onOpenFile); + recentMenu = menu->addMenu("Open Recent"); + for(int i = 0; i < 10; ++i) + { + if(strlen(Config::RecentROMList[i]) > 0) + recentFileList.push_back(Config::RecentROMList[i]); + } + updateRecentFilesMenu(); + //actBootFirmware = menu->addAction("Launch DS menu"); actBootFirmware = menu->addAction("Boot firmware"); connect(actBootFirmware, &QAction::triggered, this, &MainWindow::onBootFirmware); @@ -1333,7 +1349,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) if (event->isAutoRepeat()) return; // TODO!! REMOVE ME IN RELEASE BUILDS!! - if (event->key() == Qt::Key_F11) NDS::debug(0); + //if (event->key() == Qt::Key_F11) NDS::debug(0); Input::KeyPress(event); } @@ -1457,7 +1473,20 @@ void MainWindow::onOpenFile() "Open ROM", Config::LastROMFolder, "DS ROMs (*.nds *.dsi *.srl *.zip *.7z);;GBA ROMs (*.gba *.zip *.7z);;Other Compressed ROMs (*.zip *.7z *.rar *.tar *.tar.gz *.tar.xz *tar.bz2);;Any file (*.*)"); + + if (filename.isEmpty()) + { + emuThread->emuUnpause(); + return; + } +void MainWindow::loadROM(QString filename) +{ + recentFileList.removeAll(filename); + recentFileList.prepend(filename); + updateRecentFilesMenu(); + + static const QSet<QString> compressedExts = {"zip", "7z", "rar", "tar", "tar.gz", "tar.xz", "tar.bz2"}; if (compressedExts.contains(QFileInfo(filename).completeSuffix())) { @@ -1502,13 +1531,7 @@ void MainWindow::onOpenFile() } } - - if (filename.isEmpty()) - { - emuThread->emuUnpause(); - return; - } - + // TODO: validate the input file!! // * check that it is a proper ROM // * ensure the binary offsets are sane @@ -1554,6 +1577,60 @@ void MainWindow::onOpenFile() } } +void MainWindow::onOpenFile() +{ + emuThread->emuPause(); + + QString filename = QFileDialog::getOpenFileName(this, + "Open ROM", + Config::LastROMFolder, + "DS ROMs (*.nds *.dsi *.srl);;GBA ROMs (*.gba);;Any file (*.*)"); + if (filename.isEmpty()) + { + emuThread->emuUnpause(); + return; + } + + loadROM(filename); +} + +void MainWindow::onClearRecentFiles() +{ + recentFileList.clear(); + memset(Config::RecentROMList, 0, 10 * 1024); + updateRecentFilesMenu(); +} + +void MainWindow::updateRecentFilesMenu() +{ + recentMenu->clear(); + + for(int i = 0; i < recentFileList.size(); ++i) + { + QAction *actRecentFile_i = recentMenu->addAction(QString("%1. %2").arg(i+1).arg(recentFileList.at(i))); + actRecentFile_i->setData(recentFileList.at(i)); + connect(actRecentFile_i, &QAction::triggered, this, &MainWindow::onClickRecentFile); + + if(i < 10) + strncpy(Config::RecentROMList[i], recentFileList.at(i).toStdString().c_str(), 1024); + } + + QAction *actClearRecentList = recentMenu->addAction("Clear"); + connect(actClearRecentList, &QAction::triggered, this, &MainWindow::onClearRecentFiles); + + if(recentFileList.empty()) + actClearRecentList->setEnabled(false); + + Config::Save(); +} + +void MainWindow::onClickRecentFile() +{ + emuThread->emuPause(); + QAction *act = (QAction *)sender(); + loadROM(act->data().toString()); +} + void MainWindow::onBootFirmware() { // TODO: check the whole GBA cart shito diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h index 978df9e..d31e706 100644 --- a/src/frontend/qt_sdl/main.h +++ b/src/frontend/qt_sdl/main.h @@ -191,6 +191,8 @@ signals: private slots: void onOpenFile(); + void onClickRecentFile(); + void onClearRecentFiles(); void onBootFirmware(); void onSaveState(); void onLoadState(); @@ -236,6 +238,11 @@ private slots: void onFullscreenToggled(); private: + QList<QString> recentFileList; + QMenu *recentMenu; + void updateRecentFilesMenu(); + void loadROM(QString filename); + void createScreenPanel(); QString loadErrorStr(int error); |