Merge pull request #5320 from Cacodemon345/qt-openglrenderer-pcem
Port OpenGL 3.x renderer from PCem
This commit is contained in:
@@ -62,6 +62,8 @@ extern int qt_nvr_save(void);
|
||||
#ifdef MTR_ENABLED
|
||||
# include <minitrace/minitrace.h>
|
||||
#endif
|
||||
|
||||
extern bool cpu_thread_running;
|
||||
};
|
||||
|
||||
#include <QGuiApplication>
|
||||
@@ -452,6 +454,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
endblit();
|
||||
}
|
||||
#endif
|
||||
case 6:
|
||||
newVidApi = RendererStack::Renderer::OpenGL3PCem;
|
||||
break;
|
||||
}
|
||||
ui->stackedWidget->switchRenderer(newVidApi);
|
||||
if (!show_second_monitors)
|
||||
@@ -779,6 +784,14 @@ MainWindow::closeEvent(QCloseEvent *event)
|
||||
ui->stackedWidget->mouse_exit_func();
|
||||
|
||||
ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software);
|
||||
for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
if (renderers[i] && renderers[i]->isHidden()) {
|
||||
renderers[i]->show();
|
||||
QApplication::processEvents();
|
||||
renderers[i]->switchRenderer(RendererStack::Renderer::Software);
|
||||
QApplication::processEvents();
|
||||
}
|
||||
}
|
||||
|
||||
qt_nvr_save();
|
||||
config_save();
|
||||
@@ -1253,7 +1266,7 @@ MainWindow::eventFilter(QObject *receiver, QEvent *event)
|
||||
static auto curdopause = dopause;
|
||||
if (event->type() == QEvent::WindowBlocked) {
|
||||
curdopause = dopause;
|
||||
plat_pause(1);
|
||||
plat_pause(isShowMessage ? 2 : 1);
|
||||
emit setMouseCapture(false);
|
||||
} else if (event->type() == QEvent::WindowUnblocked) {
|
||||
plat_pause(curdopause);
|
||||
@@ -1277,7 +1290,11 @@ void
|
||||
MainWindow::showMessage(int flags, const QString &header, const QString &message)
|
||||
{
|
||||
if (QThread::currentThread() == this->thread()) {
|
||||
showMessage_(flags, header, message);
|
||||
if (!cpu_thread_running) {
|
||||
showMessageForNonQtThread(flags, header, message, nullptr);
|
||||
}
|
||||
else
|
||||
showMessage_(flags, header, message);
|
||||
} else {
|
||||
std::atomic_bool done = false;
|
||||
emit showMessageForNonQtThread(flags, header, message, &done);
|
||||
@@ -1293,6 +1310,7 @@ MainWindow::showMessage_(int flags, const QString &header, const QString &messag
|
||||
if (done) {
|
||||
*done = false;
|
||||
}
|
||||
isShowMessage = true;
|
||||
QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this);
|
||||
if (flags & (MBX_FATAL)) {
|
||||
box.setIcon(QMessageBox::Critical);
|
||||
@@ -1304,6 +1322,7 @@ MainWindow::showMessage_(int flags, const QString &header, const QString &messag
|
||||
if (done) {
|
||||
*done = true;
|
||||
}
|
||||
isShowMessage = false;
|
||||
if (cpu_thread_run == 0)
|
||||
QApplication::exit(-1);
|
||||
}
|
||||
@@ -1980,15 +1999,40 @@ MainWindow::changeEvent(QEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::reloadAllRenderers()
|
||||
{
|
||||
reload_renderers = true;
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::on_actionRenderer_options_triggered()
|
||||
{
|
||||
if (const auto dlg = ui->stackedWidget->getOptions(this)) {
|
||||
if (dlg->exec() == QDialog::Accepted) {
|
||||
for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
if (ui->stackedWidget->reloadRendererOption()) {
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
if (renderers[i] && renderers[i]->hasOptions())
|
||||
renderers[i]->reloadOptions();
|
||||
}
|
||||
} else if (reload_renderers && ui->stackedWidget->reloadRendererOption()) {
|
||||
reload_renderers = false;
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user