aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
authorWaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com>2021-01-03 15:53:23 +0000
committerGitHub <noreply@github.com>2021-01-03 15:53:23 +0000
commit83648f2d3109bf16ac6f2317ab772803af11f482 (patch)
treee8207c55c4ae052ba07713892e998ab9050e9301 /src/frontend
parentf070eafce473c49979cfe8ec1d2dd65de9084884 (diff)
parentcb58a422ac59f40825f7a7c2e9b75237eb04637d (diff)
Merge branch 'master' into feature/zip-support
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/qt_sdl/LAN_PCap.h5
-rw-r--r--src/frontend/qt_sdl/LAN_Socket.cpp22
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.cpp13
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.h2
-rw-r--r--src/frontend/qt_sdl/VideoSettingsDialog.cpp8
-rw-r--r--src/frontend/qt_sdl/main.cpp129
-rw-r--r--src/frontend/qt_sdl/main.h7
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);