Merge remote-tracking branch 'origin/master' into cdrom_changes

This commit is contained in:
OBattler
2025-03-16 17:26:51 +01:00
11 changed files with 867 additions and 552 deletions

View File

@@ -105,6 +105,8 @@ static fdc_cards_t fdc_cards[] = {
// clang-format off
{ &device_none },
{ &device_internal },
{ &fdc_xt_device },
{ &fdc_at_device },
{ &fdc_b215_device },
{ &fdc_pii151b_device },
{ &fdc_pii158b_device },

View File

@@ -37,7 +37,7 @@ msgid "&Hide status bar"
msgstr "&Masquer la barre de status"
msgid "Hide &toolbar"
msgstr "Hide &toolbar"
msgstr "Masquer la &barre d'outils"
msgid "&Resizeable window"
msgstr "Fenètre &Retaillable"

View File

@@ -54,8 +54,6 @@ plat_vidapi(const char *api)
return 4;
} else if (!strcasecmp(api, "vnc")) {
return 5;
} else if (!strcasecmp(api, "qt_opengl3_pcem")) {
return 6;
}
return 0;
@@ -85,9 +83,6 @@ plat_vidapi_name(int api)
case 5:
name = "vnc";
break;
case 6:
name = "qt_opengl3_pcem";
break;
default:
fatal("Unknown renderer: %i\n", api);
break;

View File

@@ -21,6 +21,8 @@ extern "C"
extern void startblit();
extern void endblit();
extern ssize_t local_getline(char **buf, size_t *bufsiz, FILE *fp);
extern char* trim(char* str);
}
#define safe_strncpy(a, b, n) \
@@ -156,7 +158,8 @@ static int get_parameters(glslp_t *glsl) {
int i;
struct parameter p;
for (i = 0; i < glsl->num_shaders; ++i) {
char line[1024];
size_t size = 0;
char* line = NULL;
struct shader *shader = &glsl->shaders[i];
int bom = glsl_detect_bom(shader->shader_fn);
FILE *f = plat_fopen(shader->shader_fn, "rb");
@@ -165,7 +168,9 @@ static int get_parameters(glslp_t *glsl) {
if (bom) {
fseek(f, 3, SEEK_SET);
}
while (fgets(line, sizeof(line) - 1, f) && glsl->num_parameters < MAX_PARAMETERS) {
while (local_getline(&line, &size, f) != -1 && glsl->num_parameters < MAX_PARAMETERS) {
line[strcspn(line, "\r\n")] = '\0';
trim(line);
int num = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", p.id, p.description,
&p.default_value, &p.min, &p.max, &p.step);
if (num < 5)

View File

@@ -181,6 +181,7 @@ MainWindow::MainWindow(QWidget *parent)
main_window = this;
ui->setupUi(this);
status->setSoundGainAction(ui->actionSound_gain);
ui->menuEGA_S_VGA_settings->menuAction()->setMenuRole(QAction::NoRole);
ui->stackedWidget->setMouseTracking(true);
statusBar()->setVisible(!hide_status_bar);
#ifdef Q_OS_WINDOWS
@@ -454,9 +455,6 @@ MainWindow::MainWindow(QWidget *parent)
endblit();
}
#endif
case 6:
newVidApi = RendererStack::Renderer::OpenGL3PCem;
break;
}
ui->stackedWidget->switchRenderer(newVidApi);
if (!show_second_monitors)
@@ -468,7 +466,7 @@ MainWindow::MainWindow(QWidget *parent)
});
connect(ui->stackedWidget, &RendererStack::rendererChanged, [this]() {
ui->actionRenderer_options->setVisible(ui->stackedWidget->hasOptions());
ui->actionRenderer_options->setEnabled(ui->stackedWidget->hasOptions());
});
/* Trigger initial renderer switch */
@@ -1754,7 +1752,7 @@ MainWindow::on_actionAbout_86Box_triggered()
versioninfo.append(QString(" [%1, %2]").arg(QSysInfo::buildCpuArchitecture(), tr(DYNAREC_STR)));
msgBox.setText(QString("<b>%3%1%2</b>").arg(EMU_VERSION_FULL, versioninfo, tr("86Box v")));
msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."));
msgBox.setWindowTitle("About 86Box");
msgBox.setWindowTitle(tr("About 86Box"));
const auto closeButton = msgBox.addButton("OK", QMessageBox::ButtonRole::AcceptRole);
msgBox.setEscapeButton(closeButton);
const auto webSiteButton = msgBox.addButton(EMU_SITE, QMessageBox::ButtonRole::HelpRole);
@@ -2028,8 +2026,8 @@ MainWindow::on_actionRenderer_options_triggered()
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
if (show_second_monitors) {
for (int i = 1; i < MONITORS_NUM; i++) {
if (renderers[i] && renderers[i]->reloadRendererOption() && renderers[i]->hasOptions()) {
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
if (renderers[i]) {
renderers[i]->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
}
}
}

View File

@@ -353,6 +353,9 @@
<property name="text">
<string>Exit</string>
</property>
<property name="menuRole">
<enum>QAction::QuitRole</enum>
</property>
</action>
<action name="actionSettings">
<property name="icon">
@@ -815,6 +818,9 @@
<property name="text">
<string>Renderer options...</string>
</property>
<property name="menuRole">
<enum>QAction::NoRole</enum>
</property>
</action>
<action name="actionVulkan">
<property name="checkable">

View File

@@ -1393,6 +1393,10 @@ OpenGLRenderer::render()
glw.glBindTexture(GL_TEXTURE_2D, scene_texture.id);
scene_texture.min_filter = scene_texture.mag_filter = video_filter_method ? GL_LINEAR : GL_NEAREST;
active_shader->scene.fbo.texture.min_filter = active_shader->scene.fbo.texture.mag_filter = video_filter_method ? GL_LINEAR : GL_NEAREST;
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, video_filter_method ? GL_LINEAR : GL_NEAREST);
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, video_filter_method ? GL_LINEAR : GL_NEAREST);
glw.glBindTexture(GL_TEXTURE_2D, active_shader->scene.fbo.texture.id);
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, video_filter_method ? GL_LINEAR : GL_NEAREST);
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, video_filter_method ? GL_LINEAR : GL_NEAREST);
glw.glBindTexture(GL_TEXTURE_2D, 0);

View File

@@ -288,7 +288,8 @@ RendererStack::leaveEvent(QEvent *event)
void
RendererStack::switchRenderer(Renderer renderer)
{
startblit();
//startblit();
switchInProgress = true;
if (current) {
rendererWindow->finalize();
removeWidget(current.get());
@@ -339,26 +340,6 @@ RendererStack::createRenderer(Renderer renderer)
current.reset(this->createWindowContainer(hw, this));
break;
}
case Renderer::OpenGL3PCem:
{
this->createWinId();
auto hw = new OpenGLRenderer(this);
rendererWindow = hw;
connect(this, &RendererStack::blitToRenderer, hw, &OpenGLRenderer::onBlit, Qt::QueuedConnection);
connect(hw, &OpenGLRenderer::initialized, [=]() {
/* Buffers are available only after initialization. */
imagebufs = rendererWindow->getBuffers();
endblit();
emit rendererChanged();
});
connect(hw, &OpenGLRenderer::errorInitializing, [=]() {
/* Renderer not could initialize, fallback to software. */
imagebufs = {};
QTimer::singleShot(0, this, [this]() { switchRenderer(Renderer::Software); });
});
current.reset(this->createWindowContainer(hw, this));
break;
}
case Renderer::OpenGL3:
{
this->createWinId();
@@ -369,7 +350,7 @@ RendererStack::createRenderer(Renderer renderer)
connect(hw, &OpenGLRenderer::initialized, [=]() {
/* Buffers are available only after initialization. */
imagebufs = rendererWindow->getBuffers();
endblit();
switchInProgress = false;
emit rendererChanged();
});
connect(hw, &OpenGLRenderer::errorInitializing, [=]() {
@@ -401,7 +382,7 @@ RendererStack::createRenderer(Renderer renderer)
connect(hw, &VulkanWindowRenderer::rendererInitialized, [=]() {
/* Buffers are available only after initialization. */
imagebufs = rendererWindow->getBuffers();
endblit();
switchInProgress = false;
emit rendererChanged();
});
connect(hw, &VulkanWindowRenderer::errorInitializing, [=]() {
@@ -431,9 +412,9 @@ RendererStack::createRenderer(Renderer renderer)
currentBuf = 0;
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan && renderer != Renderer::OpenGL3PCem) {
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan) {
imagebufs = rendererWindow->getBuffers();
endblit();
switchInProgress = false;
emit rendererChanged();
}
}
@@ -443,7 +424,7 @@ void
RendererStack::blit(int x, int y, int w, int h)
{
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) ||
(w > 2048) || (h > 2048) ||
(w > 2048) || (h > 2048) || (switchInProgress) ||
(monitors[m_monitor_index].target_buffer == NULL) || imagebufs.empty() ||
std::get<std::atomic_flag *>(imagebufs[currentBuf])->test_and_set()) {
video_blit_complete_monitor(m_monitor_index);

View File

@@ -61,7 +61,6 @@ public:
OpenGLES,
OpenGL3,
Vulkan,
OpenGL3PCem = 6,
None = -1
};
void switchRenderer(Renderer renderer);
@@ -114,6 +113,7 @@ private:
std::unique_ptr<QWidget> current;
std::atomic_bool rendererTakesScreenshots;
std::atomic_bool switchInProgress{false};
};
#endif // QT_RENDERERCONTAINER_HPP

View File

@@ -2742,7 +2742,7 @@ static const device_config_t es1370_config[] = {
// clang-format off
{
.name = "receive_input",
.description = "Receive input (MIDI)",
.description = "Receive MIDI input",
.type = CONFIG_BINARY,
.default_string = NULL,
.default_int = 1,

File diff suppressed because it is too large Load Diff