Merge remote-tracking branch 'origin/master' into cdrom_changes
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user