@@ -153,6 +153,7 @@ cmake_dependent_option(ISAMEM_RAMPAGE "AST Rampage"
|
||||
cmake_dependent_option(ISAMEM_IAB "Intel Above Board" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_BRAT "BocaRAM/AT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(MGA2 "Matrox Millennium II and Productiva G100" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PAS16 "Pro Audio Spectrum 16" ON "DEV_BRANCH" OFF)
|
||||
|
||||
@@ -139,8 +139,6 @@ load_general(void)
|
||||
rctrl_is_lalt = ini_section_get_int(cat, "rctrl_is_lalt", 0);
|
||||
update_icons = ini_section_get_int(cat, "update_icons", 1);
|
||||
|
||||
status_icons_fullscreen = !!ini_section_get_int(cat, "status_icons_fullscreen", 0);
|
||||
|
||||
window_remember = ini_section_get_int(cat, "window_remember", 0);
|
||||
|
||||
if (!window_remember && !(vid_resize & 2))
|
||||
@@ -1859,11 +1857,6 @@ save_general(void)
|
||||
else
|
||||
ini_section_delete_var(cat, "open_dir_usr_path");
|
||||
|
||||
if (status_icons_fullscreen)
|
||||
ini_section_set_int(cat, "status_icons_fullscreen", status_icons_fullscreen);
|
||||
else
|
||||
ini_section_delete_var(cat, "status_icons_fullscreen");
|
||||
|
||||
if (video_framerate != -1)
|
||||
ini_section_set_int(cat, "video_gl_framerate", video_framerate);
|
||||
else
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
#define IDS_2108 2108 // "%u MB (CHS: %i, %i, %i)"
|
||||
#define IDS_2109 2109 // "Floppy %i (%s): %ls"
|
||||
#define IDS_2110 2110 // "All floppy images (*.0??;*.."
|
||||
#define IDS_2112 2112 // "Unable to initialize SDL..."
|
||||
#define IDS_2113 2113 // "Are you sure you want to..."
|
||||
#define IDS_2114 2114 // "Are you sure you want to..."
|
||||
#define IDS_2115 2115 // "Unable to initialize Ghostscript..."
|
||||
|
||||
@@ -107,7 +107,6 @@ extern int infocus;
|
||||
extern char emu_version[200]; /* version ID string */
|
||||
extern int rctrl_is_lalt;
|
||||
extern int update_icons;
|
||||
extern int status_icons_fullscreen;
|
||||
|
||||
extern int kbd_req_capture;
|
||||
extern int hide_status_bar;
|
||||
|
||||
@@ -439,8 +439,10 @@ extern const device_t pgc_device;
|
||||
extern const device_t millennium_device;
|
||||
extern const device_t mystique_device;
|
||||
extern const device_t mystique_220_device;
|
||||
# if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
extern const device_t millennium_ii_device;
|
||||
extern const device_t productiva_g100_device;
|
||||
# endif
|
||||
|
||||
/* Oak OTI-0x7 */
|
||||
extern const device_t oti037c_device;
|
||||
|
||||
@@ -197,8 +197,7 @@ if(WIN32)
|
||||
else()
|
||||
target_sources(plat PRIVATE win_joystick_rawinput.c)
|
||||
endif()
|
||||
target_sources(ui PRIVATE qt_d3d9renderer.hpp qt_d3d9renderer.cpp)
|
||||
target_link_libraries(86Box hid d3d9)
|
||||
target_link_libraries(86Box hid)
|
||||
|
||||
# CMake 3.22 messed this up for clang/clang++
|
||||
# See https://gitlab.kitware.com/cmake/cmake/-/issues/22611
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Imatges avançates del sector"
|
||||
msgid "Flux images"
|
||||
msgstr "Imatges de flux"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "No has estat possible inicialitzar SDL, és necessari SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Esteu segur que voleu restablir la màquina emulada?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Rozšířené sektorové obrazy"
|
||||
msgid "Flux images"
|
||||
msgstr "Obrazy magnetického toku"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Nastala chyba při inicializaci knihovny SDL, je potřeba SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Opravdu chcete resetovat emulovaný počítač?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Fortgeschrittene Sektorimages"
|
||||
msgid "Flux images"
|
||||
msgstr "Fluximages"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Advanced sector images"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux images"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Unable to initialize SDL, SDL2.dll is required"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Are you sure you want to hard reset the emulated machine?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Advanced sector images"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux images"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Unable to initialize SDL, SDL2.dll is required"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Are you sure you want to hard reset the emulated machine?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Imágenes avanzadas de sector"
|
||||
msgid "Flux images"
|
||||
msgstr "Imágenes de fluxo"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "¿Está seguro de que quieres hacer una reinicialización completa de la máquina emulada?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Kehittyneet sektorilevykuvat"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux-levykuvat"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Haluatko varmasti käynnistää emuloidun tietokoneen uudelleen?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Images du secteur avancés"
|
||||
msgid "Flux images"
|
||||
msgstr "Images du flux"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Impossible d'initialiser SDL, SDL2.dll est nécessaire"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Napredne sektorske slike"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux slike"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Jeste li sigurni da želite hard resetirati emulirani sistem?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Továbbfejlesztett szektor képek"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux képekfájlok"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Az SDL inicializálása nem lehetséges, az SDL2.dll fájl szükséges"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Biztosan szeretné újraindítani az emulált gépet?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Immagini da settori avanzati"
|
||||
msgid "Flux images"
|
||||
msgstr "Immagini flusso"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Impossibile inizializzare SDL, SDL2.dll è necessario"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Sei sicuro di voler riavviare la macchina emulata?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "アドバンスドセクターイメージ"
|
||||
msgid "Flux images"
|
||||
msgstr "Fluxイメージ"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDLが初期化できません。SDL2.dllが必要です"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "使用中のマシンをハード リセットしますか?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "어드밴스드 섹터 이미지"
|
||||
msgid "Flux images"
|
||||
msgstr "플럭스 이미지"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDL을 초기화할 수 없습니다. SDL2.dll이 필요합니다"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "실행중인 머신을 재시작하시겠습니까?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Zaawansowane obrazy sektorów"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux images"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Nie można zainicjować SDL, wymagany SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Jesteś pewien że chcesz wykonać twardy reset emulowanej maszyny?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Imagens de setor avançado"
|
||||
msgid "Flux images"
|
||||
msgstr "Imagens de fluxo"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Não é possível inicializar o SDL, é necessário o SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Tem certeza de que deseja reiniciar completamente a máquina emulada?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Imagens avançadas de sector"
|
||||
msgid "Flux images"
|
||||
msgstr "Imagens de fluxo"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Tem a certeza de que quer um reinício completo da máquina emulada?"
|
||||
|
||||
|
||||
@@ -31,9 +31,6 @@ msgstr "&Скрыть строку состояния"
|
||||
msgid "Hide &toolbar"
|
||||
msgstr "С&крыть панель инструментов"
|
||||
|
||||
msgid "Show status icons in fullscreen"
|
||||
msgstr "Показывать значки состояния в полноэкранном режиме"
|
||||
|
||||
msgid "Show non-primary monitors"
|
||||
msgstr "&Показывать неосновные мониторы"
|
||||
|
||||
@@ -907,9 +904,6 @@ msgstr "Расширенные образы секторов"
|
||||
msgid "Flux images"
|
||||
msgstr "Образы Flux"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Невозможно инициализировать SDL, требуется SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Вы уверены, что хотите выполнить холодную перезагрузку эмулируемой машины?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Rozšírené sektorové obrazy"
|
||||
msgid "Flux images"
|
||||
msgstr "Obrazy magnetického toku"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Nastala chyba pri inicializácii knižnice SDL, je potreba SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Naozaj chcete resetovať emulovaný počítač?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Napredne sektorske slike"
|
||||
msgid "Flux images"
|
||||
msgstr "Tokovne slike"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Ste prepričani, da želite ponovno zagnati emulirani sistem?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Gelişmiş sektör imajları"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux images"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDL başlatılamadı, SDL2.dll gerekmektedir"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Emüle edilen makineyi yeniden başlatmak istediğinizden emin misiniz?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "Розширені образи секторів"
|
||||
msgid "Flux images"
|
||||
msgstr "Образи Flux"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "Неможливо ініціалізувати SDL, потрібно SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Ви впевнені, що хочете виконати холодне перезавантаження емульованої машини?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "高级扇区映像"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux 映像"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "无法初始化 SDL,需要 SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "确定要硬重置模拟器吗?"
|
||||
|
||||
|
||||
@@ -814,9 +814,6 @@ msgstr "進階磁區映像"
|
||||
msgid "Flux images"
|
||||
msgstr "Flux 映像"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "無法初始化 SDL,需要 SDL2.dll"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "確定要硬重設模擬器嗎?"
|
||||
|
||||
|
||||
@@ -52,10 +52,8 @@ plat_vidapi(char *api)
|
||||
return 3;
|
||||
} else if (!strcasecmp(api, "qt_vulkan")) {
|
||||
return 4;
|
||||
} else if (!strcasecmp(api, "qt_d3d9")) {
|
||||
return 5;
|
||||
} else if (!strcasecmp(api, "vnc")) {
|
||||
return 6;
|
||||
return 5;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -83,9 +81,6 @@ plat_vidapi_name(int api)
|
||||
name = "qt_vulkan";
|
||||
break;
|
||||
case 5:
|
||||
name = "qt_d3d9";
|
||||
break;
|
||||
case 6:
|
||||
name = "vnc";
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
#include "qt_mainwindow.hpp"
|
||||
#include "qt_d3d9renderer.hpp"
|
||||
#include <QResizeEvent>
|
||||
#include <QTimer>
|
||||
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/video.h>
|
||||
}
|
||||
|
||||
D3D9Renderer::D3D9Renderer(QWidget *parent, int monitor_index)
|
||||
: QWidget { parent }
|
||||
, RendererCommon()
|
||||
{
|
||||
QPalette pal = palette();
|
||||
pal.setColor(QPalette::Window, Qt::black);
|
||||
setAutoFillBackground(true);
|
||||
setPalette(pal);
|
||||
|
||||
setAttribute(Qt::WA_NativeWindow);
|
||||
setAttribute(Qt::WA_PaintOnScreen);
|
||||
setAttribute(Qt::WA_NoSystemBackground);
|
||||
setAttribute(Qt::WA_OpaquePaintEvent);
|
||||
|
||||
windowHandle = (HWND) winId();
|
||||
surfaceInUse = true;
|
||||
finalized = true;
|
||||
|
||||
RendererCommon::parentWidget = parent;
|
||||
|
||||
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
this->m_monitor_index = monitor_index;
|
||||
|
||||
d3d9surface = nullptr;
|
||||
d3d9dev = nullptr;
|
||||
d3d9 = nullptr;
|
||||
}
|
||||
|
||||
D3D9Renderer::~D3D9Renderer()
|
||||
{
|
||||
finalize();
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::finalize()
|
||||
{
|
||||
if (!finalized) {
|
||||
while (surfaceInUse) { }
|
||||
finalized = true;
|
||||
}
|
||||
surfaceInUse = true;
|
||||
if (d3d9surface) {
|
||||
d3d9surface->Release();
|
||||
d3d9surface = nullptr;
|
||||
}
|
||||
if (d3d9dev) {
|
||||
d3d9dev->Release();
|
||||
d3d9dev = nullptr;
|
||||
}
|
||||
if (d3d9) {
|
||||
d3d9->Release();
|
||||
d3d9 = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::hideEvent(QHideEvent *event)
|
||||
{
|
||||
finalize();
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::showEvent(QShowEvent *event)
|
||||
{
|
||||
if (d3d9) finalize();
|
||||
params = {};
|
||||
|
||||
if (FAILED(Direct3DCreate9Ex(D3D_SDK_VERSION, &d3d9))) {
|
||||
return error("Failed to create Direct3D 9 context");
|
||||
}
|
||||
|
||||
params.Windowed = true;
|
||||
params.SwapEffect = D3DSWAPEFFECT_FLIPEX;
|
||||
params.BackBufferWidth = width() * devicePixelRatioF();
|
||||
params.BackBufferHeight = height() * devicePixelRatioF();
|
||||
params.BackBufferCount = 1;
|
||||
params.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
|
||||
params.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
|
||||
params.hDeviceWindow = (HWND) winId();
|
||||
|
||||
HRESULT result = d3d9->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, windowHandle, D3DCREATE_MULTITHREADED | D3DCREATE_HARDWARE_VERTEXPROCESSING, ¶ms, nullptr, &d3d9dev);
|
||||
if (FAILED(result))
|
||||
result = d3d9->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, windowHandle, D3DCREATE_MULTITHREADED | D3DCREATE_SOFTWARE_VERTEXPROCESSING, ¶ms, nullptr, &d3d9dev);
|
||||
if (FAILED(result)) {
|
||||
return error("Failed to create Direct3D 9 device");
|
||||
}
|
||||
|
||||
result = d3d9dev->CreateOffscreenPlainSurface(2048, 2048, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &d3d9surface, nullptr);
|
||||
if (FAILED(result))
|
||||
result = d3d9dev->CreateOffscreenPlainSurface(1024, 1024, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &d3d9surface, nullptr);
|
||||
if (FAILED(result)) {
|
||||
return error("Failed to create Direct3D 9 surface");
|
||||
}
|
||||
if (!alreadyInitialized) {
|
||||
emit initialized();
|
||||
alreadyInitialized = true;
|
||||
}
|
||||
surfaceInUse = false;
|
||||
finalized = false;
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
IDirect3DSurface9 *backbuffer = nullptr;
|
||||
RECT srcRect;
|
||||
RECT dstRect;
|
||||
HRESULT result = d3d9dev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
|
||||
|
||||
if (FAILED(result)) {
|
||||
return;
|
||||
}
|
||||
|
||||
srcRect.top = source.top();
|
||||
srcRect.bottom = source.bottom();
|
||||
srcRect.left = source.left();
|
||||
srcRect.right = source.right();
|
||||
dstRect.top = destination.top() * devicePixelRatioF();
|
||||
dstRect.bottom = destination.bottom() * devicePixelRatioF();
|
||||
dstRect.left = destination.left() * devicePixelRatioF();
|
||||
dstRect.right = destination.right() * devicePixelRatioF();
|
||||
d3d9dev->BeginScene();
|
||||
d3d9dev->Clear(0, nullptr, D3DCLEAR_TARGET, 0xFF000000, 0, 0);
|
||||
while (surfaceInUse) { }
|
||||
surfaceInUse = true;
|
||||
d3d9dev->StretchRect(d3d9surface, &srcRect, backbuffer, &dstRect, video_filter_method == 0 ? D3DTEXF_POINT : D3DTEXF_LINEAR);
|
||||
result = d3d9dev->EndScene();
|
||||
surfaceInUse = false;
|
||||
if (SUCCEEDED(result)) {
|
||||
if (FAILED(d3d9dev->PresentEx(nullptr, nullptr, 0, nullptr, 0))) {
|
||||
finalize();
|
||||
showEvent(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
D3D9Renderer::event(QEvent *event)
|
||||
{
|
||||
bool res = false;
|
||||
if (!eventDelegate(event, res))
|
||||
return QWidget::event(event);
|
||||
return res;
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
onResize(event->size().width() * devicePixelRatioF(), event->size().height() * devicePixelRatioF());
|
||||
|
||||
params.BackBufferWidth = event->size().width() * devicePixelRatioF();
|
||||
params.BackBufferHeight = event->size().height() * devicePixelRatioF();
|
||||
if (d3d9dev)
|
||||
d3d9dev->Reset(¶ms);
|
||||
QWidget::resizeEvent(event);
|
||||
}
|
||||
|
||||
void
|
||||
D3D9Renderer::blit(int x, int y, int w, int h)
|
||||
{
|
||||
if (blitDummied || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (monitors[m_monitor_index].target_buffer == NULL) || surfaceInUse) {
|
||||
video_blit_complete_monitor(m_monitor_index);
|
||||
return;
|
||||
}
|
||||
surfaceInUse = true;
|
||||
auto origSource = source;
|
||||
source.setRect(x, y, w, h);
|
||||
RECT srcRect;
|
||||
D3DLOCKED_RECT lockRect;
|
||||
srcRect.top = source.top();
|
||||
srcRect.bottom = source.bottom();
|
||||
srcRect.left = source.left();
|
||||
srcRect.right = source.right();
|
||||
|
||||
if (monitors[m_monitor_index].mon_screenshots) {
|
||||
video_screenshot_monitor((uint32_t *) &(monitors[m_monitor_index].target_buffer->line[y][x]), 0, 0, 2048, m_monitor_index);
|
||||
}
|
||||
if (SUCCEEDED(d3d9surface->LockRect(&lockRect, &srcRect, 0))) {
|
||||
for (int y1 = 0; y1 < h; y1++) {
|
||||
video_copy(((uint8_t *) lockRect.pBits) + (y1 * lockRect.Pitch), &(monitors[m_monitor_index].target_buffer->line[y + y1][x]), w * 4);
|
||||
}
|
||||
video_blit_complete_monitor(m_monitor_index);
|
||||
d3d9surface->UnlockRect();
|
||||
} else
|
||||
video_blit_complete_monitor(m_monitor_index);
|
||||
if (origSource != source)
|
||||
onResize(this->width() * devicePixelRatioF(), this->height() * devicePixelRatioF());
|
||||
surfaceInUse = false;
|
||||
QTimer::singleShot(0, this, [this] { this->update(); });
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
#ifndef D3D9RENDERER_HPP
|
||||
#define D3D9RENDERER_HPP
|
||||
|
||||
#include <QWidget>
|
||||
#include "qt_renderercommon.hpp"
|
||||
|
||||
#include <windows.h>
|
||||
#include <d3d9.h>
|
||||
#include <atomic>
|
||||
|
||||
class D3D9Renderer : public QWidget, public RendererCommon {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit D3D9Renderer(QWidget *parent = nullptr, int monitor_index = 0);
|
||||
~D3D9Renderer();
|
||||
bool hasBlitFunc() override { return true; }
|
||||
void blit(int x, int y, int w, int h) override;
|
||||
void finalize() override;
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
void hideEvent(QHideEvent *event) override;
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
bool event(QEvent *event) override;
|
||||
QPaintEngine *paintEngine() const override { return nullptr; }
|
||||
|
||||
signals:
|
||||
void initialized();
|
||||
void error(QString);
|
||||
|
||||
private:
|
||||
HWND windowHandle = 0;
|
||||
D3DPRESENT_PARAMETERS params {};
|
||||
IDirect3D9Ex *d3d9 = nullptr;
|
||||
IDirect3DDevice9Ex *d3d9dev = nullptr;
|
||||
IDirect3DSurface9 *d3d9surface = nullptr;
|
||||
|
||||
std::atomic<bool> surfaceInUse { false };
|
||||
std::atomic<bool> finalized { false };
|
||||
bool alreadyInitialized = false;
|
||||
int m_monitor_index = 0;
|
||||
};
|
||||
|
||||
#endif // D3D9RENDERER_HPP
|
||||
@@ -136,22 +136,6 @@ HardwareRenderer::initializeGL()
|
||||
m_context->swapBuffers(this);
|
||||
}
|
||||
|
||||
void
|
||||
HardwareRenderer::paintOverGL()
|
||||
{
|
||||
/* Context switching is needed to make use of QPainter to draw status bar icons in fullscreen.
|
||||
Especially since it seems to be impossible to use QPainter on externally-created OpenGL contexts. */
|
||||
if (video_fullscreen && status_icons_fullscreen) {
|
||||
m_context->makeCurrent(nullptr);
|
||||
makeCurrent();
|
||||
QPainter painter(this);
|
||||
drawStatusBarIcons(&painter);
|
||||
painter.end();
|
||||
doneCurrent();
|
||||
m_context->makeCurrent(this);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
HardwareRenderer::paintGL()
|
||||
{
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
{
|
||||
onResize(size().width(), size().height());
|
||||
}
|
||||
void paintOverGL() override;
|
||||
|
||||
std::vector<std::tuple<uint8_t *, std::atomic_flag *>> getBuffers() override;
|
||||
HardwareRenderer(QWidget *parent = nullptr, RenderType rtype = RenderType::OpenGL)
|
||||
: QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent->windowHandle())
|
||||
|
||||
@@ -342,7 +342,7 @@ main(int argc, char *argv[])
|
||||
|
||||
/* Set the PAUSE mode depending on the renderer. */
|
||||
#ifdef USE_VNC
|
||||
if (vnc_enabled && vid_api != 6)
|
||||
if (vnc_enabled && vid_api != 5)
|
||||
plat_pause(1);
|
||||
else
|
||||
#endif
|
||||
|
||||
@@ -157,8 +157,6 @@ keyb_filter(BMessage *message, BHandler **target, BMessageFilter *filter)
|
||||
static BMessageFilter *filter;
|
||||
#endif
|
||||
|
||||
std::atomic<bool> blitDummied { false };
|
||||
|
||||
extern void qt_mouse_capture(int);
|
||||
extern "C" void qt_blit(int x, int y, int w, int h, int monitor_index);
|
||||
|
||||
@@ -342,7 +340,6 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
ui->actionUpdate_status_bar_icons->setChecked(update_icons);
|
||||
ui->actionEnable_Discord_integration->setChecked(enable_discord);
|
||||
ui->actionApply_fullscreen_stretch_mode_when_maximized->setChecked(video_fullscreen_scale_maximized);
|
||||
ui->actionShow_status_icons_in_fullscreen->setChecked(status_icons_fullscreen);
|
||||
|
||||
#ifndef DISCORD
|
||||
ui->actionEnable_Discord_integration->setVisible(false);
|
||||
@@ -369,14 +366,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
ui->actionVulkan->setVisible(false);
|
||||
ui->actionOpenGL_3_0_Core->setVisible(false);
|
||||
}
|
||||
#if !defined Q_OS_WINDOWS
|
||||
ui->actionDirect3D_9->setVisible(false);
|
||||
if (vid_api == 5)
|
||||
vid_api = 0;
|
||||
#endif
|
||||
|
||||
#ifndef USE_VNC
|
||||
if (vid_api == 6)
|
||||
if (vid_api == 5)
|
||||
vid_api = 0;
|
||||
ui->actionVNC->setVisible(false);
|
||||
#endif
|
||||
@@ -410,14 +402,13 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
actGroup->addAction(ui->actionHardware_Renderer_OpenGL_ES);
|
||||
actGroup->addAction(ui->actionOpenGL_3_0_Core);
|
||||
actGroup->addAction(ui->actionVulkan);
|
||||
actGroup->addAction(ui->actionDirect3D_9);
|
||||
actGroup->addAction(ui->actionVNC);
|
||||
actGroup->setExclusive(true);
|
||||
|
||||
connect(actGroup, &QActionGroup::triggered, [this](QAction *action) {
|
||||
vid_api = action->property("vid_api").toInt();
|
||||
#ifdef USE_VNC
|
||||
if (vnc_enabled && vid_api != 6) {
|
||||
if (vnc_enabled && vid_api != 5) {
|
||||
startblit();
|
||||
vnc_enabled = 0;
|
||||
vnc_close();
|
||||
@@ -442,11 +433,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
case 4:
|
||||
newVidApi = RendererStack::Renderer::Vulkan;
|
||||
break;
|
||||
case 5:
|
||||
newVidApi = RendererStack::Renderer::Direct3D9;
|
||||
break;
|
||||
#ifdef USE_VNC
|
||||
case 6:
|
||||
case 5:
|
||||
{
|
||||
newVidApi = RendererStack::Renderer::Software;
|
||||
startblit();
|
||||
@@ -612,7 +600,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
video_setblit(qt_blit);
|
||||
|
||||
if (start_in_fullscreen) {
|
||||
connect(ui->stackedWidget, &RendererStack::blit, this, [this] () {
|
||||
connect(ui->stackedWidget, &RendererStack::blitToRenderer, this, [this] () {
|
||||
if (start_in_fullscreen) {
|
||||
QTimer::singleShot(100, ui->actionFullscreen, &QAction::trigger);
|
||||
start_in_fullscreen = 0;
|
||||
@@ -1156,8 +1144,6 @@ MainWindow::on_actionFullscreen_triggered()
|
||||
{
|
||||
if (video_fullscreen > 0) {
|
||||
showNormal();
|
||||
if (vid_api == 5)
|
||||
QTimer::singleShot(0, this, [this]() { ui->stackedWidget->switchRenderer(RendererStack::Renderer::Direct3D9); });
|
||||
ui->menubar->show();
|
||||
if (!hide_status_bar)
|
||||
ui->statusbar->show();
|
||||
@@ -1193,8 +1179,6 @@ MainWindow::on_actionFullscreen_triggered()
|
||||
ui->toolBar->hide();
|
||||
ui->stackedWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
showFullScreen();
|
||||
if (vid_api == 5)
|
||||
QTimer::singleShot(0, this, [this]() { ui->stackedWidget->switchRenderer(RendererStack::Renderer::Direct3D9); });
|
||||
}
|
||||
ui->stackedWidget->onResize(width(), height());
|
||||
}
|
||||
@@ -1316,7 +1300,7 @@ void
|
||||
MainWindow::blitToWidget(int x, int y, int w, int h, int monitor_index)
|
||||
{
|
||||
if (monitor_index >= 1) {
|
||||
if (!blitDummied && renderers[monitor_index] && renderers[monitor_index]->isVisible())
|
||||
if (renderers[monitor_index] && renderers[monitor_index]->isVisible())
|
||||
renderers[monitor_index]->blit(x, y, w, h);
|
||||
else
|
||||
video_blit_complete_monitor(monitor_index);
|
||||
@@ -1976,8 +1960,6 @@ MainWindow::on_actionShow_non_primary_monitors_triggered()
|
||||
{
|
||||
show_second_monitors = (int) ui->actionShow_non_primary_monitors->isChecked();
|
||||
|
||||
blitDummied = true;
|
||||
|
||||
if (show_second_monitors) {
|
||||
for (int monitor_index = 1; monitor_index < MONITORS_NUM; monitor_index++) {
|
||||
auto &secondaryRenderer = renderers[monitor_index];
|
||||
@@ -2007,8 +1989,6 @@ MainWindow::on_actionShow_non_primary_monitors_triggered()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blitDummied = false;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2051,11 +2031,3 @@ void MainWindow::on_actionACPI_Shutdown_triggered()
|
||||
{
|
||||
acpi_pwrbut_pressed = 1;
|
||||
}
|
||||
|
||||
void MainWindow::on_actionShow_status_icons_in_fullscreen_triggered()
|
||||
{
|
||||
status_icons_fullscreen = !status_icons_fullscreen;
|
||||
ui->actionShow_status_icons_in_fullscreen->setChecked(status_icons_fullscreen);
|
||||
config_save();
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
class MediaMenu;
|
||||
class RendererStack;
|
||||
|
||||
extern std::atomic<bool> blitDummied;
|
||||
|
||||
namespace Ui {
|
||||
class MainWindow;
|
||||
}
|
||||
@@ -144,7 +142,6 @@ private slots:
|
||||
void on_actionCursor_Puck_triggered();
|
||||
|
||||
void on_actionACPI_Shutdown_triggered();
|
||||
void on_actionShow_status_icons_in_fullscreen_triggered();
|
||||
|
||||
private slots:
|
||||
void on_actionShow_non_primary_monitors_triggered();
|
||||
|
||||
@@ -117,7 +117,6 @@
|
||||
<addaction name="actionHardware_Renderer_OpenGL_ES"/>
|
||||
<addaction name="actionOpenGL_3_0_Core"/>
|
||||
<addaction name="actionVulkan"/>
|
||||
<addaction name="actionDirect3D_9"/>
|
||||
<addaction name="actionVNC"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuWindow_scale_factor">
|
||||
@@ -180,7 +179,6 @@
|
||||
</widget>
|
||||
<addaction name="actionHide_tool_bar"/>
|
||||
<addaction name="actionHide_status_bar"/>
|
||||
<addaction name="actionShow_status_icons_in_fullscreen"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionShow_non_primary_monitors"/>
|
||||
<addaction name="actionResizable_window"/>
|
||||
@@ -831,17 +829,6 @@
|
||||
<string>MCA devices...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDirect3D_9">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Direct3D 9</string>
|
||||
</property>
|
||||
<property name="vid_api" stdset="0">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionShow_non_primary_monitors">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
@@ -882,14 +869,6 @@
|
||||
<string>Cursor/Puck</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionShow_status_icons_in_fullscreen">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show status icons in fullscreen</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionPen">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
|
||||
@@ -602,7 +602,6 @@ ProgSettings::reloadStrings()
|
||||
translatedstrings[IDS_2094] = QCoreApplication::translate("", "Failed to set up PCap").toStdWString();
|
||||
translatedstrings[IDS_2095] = QCoreApplication::translate("", "No PCap devices found").toStdWString();
|
||||
translatedstrings[IDS_2096] = QCoreApplication::translate("", "Invalid PCap device").toStdWString();
|
||||
translatedstrings[IDS_2112] = QCoreApplication::translate("", "Unable to initialize SDL, libsdl2 is required").toStdWString();
|
||||
translatedstrings[IDS_2130] = QCoreApplication::translate("", "Make sure libpcap is installed and that you are on a libpcap-compatible network connection.").toStdWString();
|
||||
translatedstrings[IDS_2115] = QCoreApplication::translate("", "Unable to initialize Ghostscript").toStdWString();
|
||||
translatedstrings[IDS_2063] = QCoreApplication::translate("", "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine.").toStdWString();
|
||||
|
||||
@@ -17,15 +17,11 @@
|
||||
|
||||
#include "qt_renderercommon.hpp"
|
||||
#include "qt_mainwindow.hpp"
|
||||
#include "qt_machinestatus.hpp"
|
||||
|
||||
#include <QPainter>
|
||||
#include <QWidget>
|
||||
#include <QEvent>
|
||||
#include <QApplication>
|
||||
#include <QFontMetrics>
|
||||
#include <QStatusBar>
|
||||
#include <QLayout>
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@@ -33,8 +29,6 @@ extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/video.h>
|
||||
|
||||
int status_icons_fullscreen = 0;
|
||||
}
|
||||
|
||||
RendererCommon::RendererCommon() = default;
|
||||
@@ -137,52 +131,6 @@ RendererCommon::onResize(int width, int height)
|
||||
monitors[r_monitor_index].mon_res_y = (double) destination.height();
|
||||
}
|
||||
|
||||
void RendererCommon::drawStatusBarIcons(QPainter* painter)
|
||||
{
|
||||
uint32_t x = 0;
|
||||
auto prevcompositionMode = painter->compositionMode();
|
||||
painter->setCompositionMode(QPainter::CompositionMode::CompositionMode_SourceOver);
|
||||
for (int i = 0; i < main_window->statusBar()->children().count(); i++) {
|
||||
QLabel* label = qobject_cast<QLabel*>(main_window->statusBar()->children()[i]);
|
||||
if (label) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
const QPixmap pixmap = label->pixmap();
|
||||
#elif QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||
const QPixmap pixmap = label->pixmap(Qt::ReturnByValue);
|
||||
#else
|
||||
const QPixmap pixmap = (label->pixmap() ? *label->pixmap() : QPixmap());
|
||||
#endif
|
||||
if (!pixmap.isNull()) {
|
||||
painter->setBrush(QColor::fromRgbF(0, 0, 0, 1.));
|
||||
painter->fillRect(x, painter->device()->height() - pixmap.height() - 5,
|
||||
pixmap.width(), pixmap.height() + 5, QColor::fromRgbF(0, 0, 0, .5));
|
||||
painter->drawPixmap(x + main_window->statusBar()->layout()->spacing() / 2,
|
||||
painter->device()->height() - pixmap.height() - 3, pixmap);
|
||||
x += pixmap.width();
|
||||
if (i <= main_window->statusBar()->children().count() - 3) {
|
||||
painter->fillRect(x, painter->device()->height() - pixmap.height() - 5,
|
||||
main_window->statusBar()->layout()->spacing(), pixmap.height() + 5,
|
||||
QColor::fromRgbF(0, 0, 0, .5));
|
||||
x += main_window->statusBar()->layout()->spacing();
|
||||
} else
|
||||
painter->fillRect(x, painter->device()->height() - pixmap.height() - 4, 4,
|
||||
pixmap.height() + 4, QColor::fromRgbF(0, 0, 0, .5));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (main_window->status->getMessage().isEmpty() == false) {
|
||||
auto curStatusMsg = main_window->status->getMessage();
|
||||
auto textSize = painter->fontMetrics().size(Qt::TextSingleLine, QChar(' ') + curStatusMsg + QChar(' '));
|
||||
painter->setPen(QColor(0, 0, 0, 127));
|
||||
painter->fillRect(painter->device()->width() - textSize.width(), painter->device()->height() - textSize.height(),
|
||||
textSize.width(), textSize.height(), QColor(0, 0, 0, 127));
|
||||
painter->setPen(QColor(255, 255, 255, 255));
|
||||
painter->drawText(QRectF(painter->device()->width() - textSize.width(), painter->device()->height() - textSize.height(),
|
||||
textSize.width(), textSize.height()), Qt::TextSingleLine, QChar(' ') + curStatusMsg + QChar(' '));
|
||||
}
|
||||
painter->setCompositionMode(prevcompositionMode);
|
||||
}
|
||||
|
||||
bool
|
||||
RendererCommon::eventDelegate(QEvent *event, bool &result)
|
||||
{
|
||||
|
||||
@@ -35,9 +35,6 @@ public:
|
||||
/* Reloads options of renderer */
|
||||
virtual void reloadOptions() { }
|
||||
|
||||
virtual bool hasBlitFunc() { return false; }
|
||||
virtual void blit(int x, int y, int w, int h) { }
|
||||
|
||||
int r_monitor_index = 0;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -25,9 +25,6 @@
|
||||
#include "qt_openglrenderer.hpp"
|
||||
#include "qt_softwarerenderer.hpp"
|
||||
#include "qt_vulkanwindowrenderer.hpp"
|
||||
#ifdef Q_OS_WIN
|
||||
# include "qt_d3d9renderer.hpp"
|
||||
#endif
|
||||
|
||||
#include "qt_mainwindow.hpp"
|
||||
#include "qt_util.hpp"
|
||||
@@ -279,40 +276,14 @@ RendererStack::switchRenderer(Renderer renderer)
|
||||
{
|
||||
startblit();
|
||||
if (current) {
|
||||
if ((current_vid_api == Renderer::Direct3D9 && renderer != Renderer::Direct3D9)
|
||||
|| (current_vid_api != Renderer::Direct3D9 && renderer == Renderer::Direct3D9)) {
|
||||
rendererWindow->finalize();
|
||||
if (rendererWindow->hasBlitFunc()) {
|
||||
while (directBlitting) { }
|
||||
connect(this, &RendererStack::blit, this, &RendererStack::blitDummy, Qt::DirectConnection);
|
||||
disconnect(this, &RendererStack::blit, this, &RendererStack::blitRenderer);
|
||||
} else {
|
||||
connect(this, &RendererStack::blit, this, &RendererStack::blitDummy, Qt::DirectConnection);
|
||||
disconnect(this, &RendererStack::blit, this, &RendererStack::blitCommon);
|
||||
}
|
||||
rendererWindow->finalize();
|
||||
removeWidget(current.get());
|
||||
disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr);
|
||||
|
||||
removeWidget(current.get());
|
||||
disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr);
|
||||
/* Create new renderer only after previous is destroyed! */
|
||||
connect(current.get(), &QObject::destroyed, [this, renderer](QObject *) { createRenderer(renderer); });
|
||||
|
||||
/* Create new renderer only after previous is destroyed! */
|
||||
connect(current.get(), &QObject::destroyed, [this, renderer](QObject *) {
|
||||
createRenderer(renderer);
|
||||
disconnect(this, &RendererStack::blit, this, &RendererStack::blitDummy);
|
||||
blitDummied = false;
|
||||
QTimer::singleShot(1000, this, []() { blitDummied = false; });
|
||||
});
|
||||
|
||||
rendererWindow->hasBlitFunc() ? current.reset() : current.release()->deleteLater();
|
||||
} else {
|
||||
rendererWindow->finalize();
|
||||
removeWidget(current.get());
|
||||
disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr);
|
||||
|
||||
/* Create new renderer only after previous is destroyed! */
|
||||
connect(current.get(), &QObject::destroyed, [this, renderer](QObject *) { createRenderer(renderer); });
|
||||
|
||||
current.release()->deleteLater();
|
||||
}
|
||||
current.release()->deleteLater();
|
||||
} else {
|
||||
createRenderer(renderer);
|
||||
}
|
||||
@@ -321,7 +292,6 @@ RendererStack::switchRenderer(Renderer renderer)
|
||||
void
|
||||
RendererStack::createRenderer(Renderer renderer)
|
||||
{
|
||||
current_vid_api = renderer;
|
||||
switch (renderer) {
|
||||
default:
|
||||
case Renderer::Software:
|
||||
@@ -374,27 +344,6 @@ RendererStack::createRenderer(Renderer renderer)
|
||||
current.reset(this->createWindowContainer(hw, this));
|
||||
break;
|
||||
}
|
||||
#ifdef Q_OS_WIN
|
||||
case Renderer::Direct3D9:
|
||||
{
|
||||
this->createWinId();
|
||||
auto hw = new D3D9Renderer(this, m_monitor_index);
|
||||
rendererWindow = hw;
|
||||
connect(hw, &D3D9Renderer::error, this, [this](QString str) {
|
||||
auto msgBox = new QMessageBox(QMessageBox::Critical, "86Box", QString("Failed to initialize D3D9 renderer. Falling back to software rendering.\n\n") + str, QMessageBox::Ok);
|
||||
msgBox->setAttribute(Qt::WA_DeleteOnClose);
|
||||
msgBox->show();
|
||||
imagebufs = {};
|
||||
QTimer::singleShot(0, this, [this]() { switchRenderer(Renderer::Software); });
|
||||
});
|
||||
connect(hw, &D3D9Renderer::initialized, this, [this]() {
|
||||
endblit();
|
||||
emit rendererChanged();
|
||||
});
|
||||
current.reset(hw);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if QT_CONFIG(vulkan)
|
||||
case Renderer::Vulkan:
|
||||
{
|
||||
@@ -444,44 +393,18 @@ RendererStack::createRenderer(Renderer renderer)
|
||||
|
||||
currentBuf = 0;
|
||||
|
||||
if (rendererWindow->hasBlitFunc()) {
|
||||
connect(this, &RendererStack::blit, this, &RendererStack::blitRenderer, Qt::DirectConnection);
|
||||
} else {
|
||||
connect(this, &RendererStack::blit, this, &RendererStack::blitCommon, Qt::DirectConnection);
|
||||
}
|
||||
|
||||
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan && renderer != Renderer::Direct3D9) {
|
||||
if (renderer != Renderer::OpenGL3 && renderer != Renderer::Vulkan) {
|
||||
imagebufs = rendererWindow->getBuffers();
|
||||
endblit();
|
||||
emit rendererChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RendererStack::blitDummy(int x, int y, int w, int h)
|
||||
{
|
||||
video_blit_complete_monitor(m_monitor_index);
|
||||
blitDummied = true;
|
||||
}
|
||||
|
||||
void
|
||||
RendererStack::blitRenderer(int x, int y, int w, int h)
|
||||
{
|
||||
if (blitDummied) {
|
||||
blitDummied = false;
|
||||
video_blit_complete_monitor(m_monitor_index);
|
||||
return;
|
||||
}
|
||||
directBlitting = true;
|
||||
rendererWindow->blit(x, y, w, h);
|
||||
directBlitting = false;
|
||||
}
|
||||
|
||||
// called from blitter thread
|
||||
void
|
||||
RendererStack::blitCommon(int x, int y, int w, int h)
|
||||
RendererStack::blit(int x, int y, int w, int h)
|
||||
{
|
||||
if (blitDummied || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (monitors[m_monitor_index].target_buffer == NULL) || imagebufs.empty() || std::get<std::atomic_flag *>(imagebufs[currentBuf])->test_and_set()) {
|
||||
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (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);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ public:
|
||||
OpenGLES,
|
||||
OpenGL3,
|
||||
Vulkan,
|
||||
Direct3D9,
|
||||
None = -1
|
||||
};
|
||||
void switchRenderer(Renderer renderer);
|
||||
@@ -81,13 +80,10 @@ public:
|
||||
|
||||
signals:
|
||||
void blitToRenderer(int buf_idx, int x, int y, int w, int h);
|
||||
void blit(int x, int y, int w, int h);
|
||||
void rendererChanged();
|
||||
|
||||
public slots:
|
||||
void blitCommon(int x, int y, int w, int h);
|
||||
void blitRenderer(int x, int y, int w, int h);
|
||||
void blitDummy(int x, int y, int w, int h);
|
||||
void blit(int x, int y, int w, int h);
|
||||
|
||||
private:
|
||||
void createRenderer(Renderer renderer);
|
||||
@@ -107,13 +103,10 @@ private:
|
||||
int isMouseDown = 0;
|
||||
int m_monitor_index = 0;
|
||||
|
||||
Renderer current_vid_api = Renderer::None;
|
||||
|
||||
std::vector<std::tuple<uint8_t *, std::atomic_flag *>> imagebufs;
|
||||
|
||||
RendererCommon *rendererWindow { nullptr };
|
||||
std::unique_ptr<QWidget> current;
|
||||
std::atomic<bool> directBlitting { false };
|
||||
};
|
||||
|
||||
#endif // QT_RENDERERCONTAINER_HPP
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/video.h>
|
||||
}
|
||||
|
||||
@@ -114,7 +113,6 @@ SoftwareRenderer::onPaint(QPaintDevice *device)
|
||||
#endif
|
||||
painter.setCompositionMode(QPainter::CompositionMode_Plus);
|
||||
painter.drawImage(destination, *images[cur_image], source);
|
||||
if (video_fullscreen && status_icons_fullscreen) drawStatusBarIcons(&painter);
|
||||
}
|
||||
|
||||
std::vector<std::tuple<uint8_t *, std::atomic_flag *>>
|
||||
|
||||
@@ -63,7 +63,6 @@ extern wchar_t sdl_win_title[512];
|
||||
plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
|
||||
joystick_t joystick_state[MAX_JOYSTICKS];
|
||||
int joysticks_present;
|
||||
int status_icons_fullscreen = 0; /* unused. */
|
||||
SDL_mutex *blitmtx;
|
||||
SDL_threadID eventthread;
|
||||
static int exit_event = 0;
|
||||
@@ -263,8 +262,6 @@ plat_get_string(int i)
|
||||
return L"No PCap devices found";
|
||||
case IDS_2096:
|
||||
return L"Invalid PCap device";
|
||||
case IDS_2112:
|
||||
return L"Unable to initialize SDL, libsdl2 is required";
|
||||
case IDS_2133:
|
||||
return L"libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files.";
|
||||
case IDS_2130:
|
||||
|
||||
@@ -28,6 +28,10 @@ add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c
|
||||
vid_ibm_rgb528_ramdac.c vid_sdac_ramdac.c vid_ogc.c vid_mga.c vid_nga.c
|
||||
vid_tvp3026_ramdac.c vid_att2xc498_ramdac.c vid_xga.c)
|
||||
|
||||
if(MGA2)
|
||||
target_compile_definitions(vid PRIVATE USE_MGA2)
|
||||
endif()
|
||||
|
||||
if(VGAWONDER)
|
||||
target_compile_definitions(vid PRIVATE USE_VGAWONDER)
|
||||
endif()
|
||||
|
||||
@@ -6541,6 +6541,7 @@ mystique_220_available(void)
|
||||
return rom_present(ROM_MYSTIQUE_220);
|
||||
}
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
static int
|
||||
millennium_ii_available(void)
|
||||
{
|
||||
@@ -6552,6 +6553,7 @@ matrox_g100_available(void)
|
||||
{
|
||||
return rom_present(ROM_G100);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
mystique_speed_changed(void *priv)
|
||||
@@ -6601,6 +6603,7 @@ static const device_config_t mystique_config[] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
static const device_config_t millennium_ii_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
@@ -6632,6 +6635,7 @@ static const device_config_t millennium_ii_config[] = {
|
||||
}
|
||||
// clang-format on
|
||||
};
|
||||
#endif
|
||||
|
||||
const device_t millennium_device = {
|
||||
.name = "Matrox Millennium",
|
||||
@@ -6675,6 +6679,7 @@ const device_t mystique_220_device = {
|
||||
.config = mystique_config
|
||||
};
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
const device_t millennium_ii_device = {
|
||||
.name = "Matrox Millennium II",
|
||||
.internal_name = "millennium_ii",
|
||||
@@ -6702,3 +6707,4 @@ const device_t productiva_g100_device = {
|
||||
.force_redraw = mystique_force_redraw,
|
||||
.config = millennium_ii_config
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -208,7 +208,9 @@ video_cards[] = {
|
||||
{ &s3_diamond_stealth_4000_pci_device },
|
||||
{ &s3_trio3d2x_pci_device },
|
||||
{ &millennium_device },
|
||||
#if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
{ &millennium_ii_device },
|
||||
#endif
|
||||
{ &mystique_device },
|
||||
{ &mystique_220_device },
|
||||
{ &tgui9440_pci_device },
|
||||
@@ -259,7 +261,9 @@ video_cards[] = {
|
||||
{ &s3_virge_357_agp_device },
|
||||
{ &s3_diamond_stealth_4000_agp_device },
|
||||
{ &s3_trio3d2x_agp_device },
|
||||
#if defined(DEV_BRANCH) && defined(USE_MGA2)
|
||||
{ &productiva_g100_device, VIDEO_FLAG_TYPE_SPECIAL },
|
||||
#endif
|
||||
{ &velocity_100_agp_device },
|
||||
{ &velocity_200_agp_device },
|
||||
{ &voodoo_3_1000_agp_device },
|
||||
|
||||
@@ -64,6 +64,9 @@ ifeq ($(DEV_BUILD), y)
|
||||
ifndef LASERXT
|
||||
LASERXT := y
|
||||
endif
|
||||
ifndef MGA2
|
||||
MGA2 := y
|
||||
endif
|
||||
ifndef OLIVETTI
|
||||
OLIVETTI := y
|
||||
endif
|
||||
@@ -125,6 +128,9 @@ else
|
||||
ifndef LASERXT
|
||||
LASERXT := n
|
||||
endif
|
||||
ifndef MGA2
|
||||
MGA2 := n
|
||||
endif
|
||||
ifndef OLIVETTI
|
||||
OLIVETTI := n
|
||||
endif
|
||||
@@ -490,6 +496,10 @@ ifeq ($(DEV_BRANCH), y)
|
||||
DEVBROBJ += m_xt_laserxt.o
|
||||
endif
|
||||
|
||||
ifeq ($(MGA2), y)
|
||||
OPTS += -DUSE_MGA2
|
||||
endif
|
||||
|
||||
ifeq ($(OPEN_AT), y)
|
||||
OPTS += -DUSE_OPEN_AT
|
||||
endif
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disketová mechanika %i (%s): %ls"
|
||||
IDS_2110 "Všechny obrazy (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Rozšířené sektorové obrazy (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Základní sektorové obrazy (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Obrazy magnetického toku (*.FDI)\0*.FDI\0Obrazy povrchu (*.86F;*.MFM)\0*.86F;*.MFM\0Všechny soubory (*.*)\0*.*\0"
|
||||
IDS_2112 "Nastala chyba při inicializaci knihovny SDL, je potřeba SDL2.dll"
|
||||
IDS_2113 "Opravdu chcete resetovat emulovaný počítač?"
|
||||
IDS_2114 "Opravdu chcete ukončit 86Box?"
|
||||
IDS_2115 "Nastala chyba při inicializaci knihovny Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Diskette %i (%s): %ls"
|
||||
IDS_2110 "Alle Images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Fortgeschrittene Sektorimages (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basissektorimages (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Fluximages (*.FDI)\0*.FDI\0Oberflächenimages (*.86F;*.MFM)\0*.86F;*.MFM\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2112 "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt"
|
||||
IDS_2113 "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?"
|
||||
IDS_2114 "Sind Sie sich sicher, dass Sie 86Box beenden wollen?"
|
||||
IDS_2115 "Ghostscript konnte nicht initialisiert werden"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Floppy %i (%s): %ls"
|
||||
IDS_2110 "All images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Advanced sector images (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basic sector images (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Surface images (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2112 "Unable to initialize SDL, SDL2.dll is required"
|
||||
IDS_2113 "Are you sure you want to hard reset the emulated machine?"
|
||||
IDS_2114 "Are you sure you want to exit 86Box?"
|
||||
IDS_2115 "Unable to initialize Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Floppy %i (%s): %ls"
|
||||
IDS_2110 "All images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Advanced sector images (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basic sector images (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Surface images (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2112 "Unable to initialize SDL, SDL2.dll is required"
|
||||
IDS_2113 "Are you sure you want to hard reset the emulated machine?"
|
||||
IDS_2114 "Are you sure you want to exit 86Box?"
|
||||
IDS_2115 "Unable to initialize Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disquete %i (%s): %ls"
|
||||
IDS_2110 "Todas las Imágenes (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Advanced sector images (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basic sector images (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Surface images (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2112 "Incapaz de inicializar SDL, se requiere SDL2.dll"
|
||||
IDS_2113 "¿Seguro que quieres resetear la máquina emulada?"
|
||||
IDS_2114 "¿Seguro que quieres cerrar 86Box?"
|
||||
IDS_2115 "Incapaz de inicializar Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u Mt (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Levyke %i (%s): %ls"
|
||||
IDS_2110 "Kaikki levykuvat (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Kehittyneet sektorilevykuvat (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Perussektorilevykuvat (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux-levykuvat (*.FDI)\0*.FDI\0Pintalevykuvat (*.86F;*.MFM)\0*.86F;*.MFM\0Kaikki tiedostot (*.*)\0*.*\0"
|
||||
IDS_2112 "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll"
|
||||
IDS_2113 "Haluatko varmasti käynnistää emuloidun tietokoneen uudelleen?"
|
||||
IDS_2114 "Haluatko varmasti sulkea 86Boxin?"
|
||||
IDS_2115 "Ghostscriptin alustus epäonnistui"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u Mo (CTS: %i, %i, %i)"
|
||||
IDS_2109 "Disquette %i (%s): %ls"
|
||||
IDS_2110 "Toutes les images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Images du secteur avancés (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Images du secteur basiques (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Images du flux (*.FDI)\0*.FDI\0Images de surface (*.86F;*.MFM)\0*.86F;*.MFM\0Tous les fichiers (*.*)\0*.*\0"
|
||||
IDS_2112 "Impossible d'initialiser SDL, SDL2.dll est nécessaire"
|
||||
IDS_2113 "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
||||
IDS_2114 "Etes-vous sûr de vouloir quitter 86Box?"
|
||||
IDS_2115 "Impossible d'initialiser Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disketa %i (%s): %ls"
|
||||
IDS_2110 "Sve slike (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Napredne sektorske slike (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Osnovne sektorske slike (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux slike (*.FDI)\0*.FDI\0Površinske slike (*.86F;*.MFM)\0*.86F;*.MFM\0Sve datoteke (*.*)\0*.*\0"
|
||||
IDS_2112 "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno"
|
||||
IDS_2113 "Jeste li sigurni da želite hard resetirati emulirani sistem?"
|
||||
IDS_2114 "Jeste li sigurni da želite zatvoriti 86Box?"
|
||||
IDS_2115 "Nije moguće inicijalizirati GhostScript"
|
||||
|
||||
@@ -469,7 +469,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Floppy %i (%s): %ls"
|
||||
IDS_2110 "Minden képfájl (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Továbbfejlesztett szektor képek (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Alapvető szektor képek (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux képekfájlok (*.FDI)\0*.FDI\0Felületi képfájlok (*.86F;*.MFM)\0*.86F;*.MFM\0Minden fájl (*.*)\0*.*\0"
|
||||
IDS_2112 "Az SDL inicializálása nem lehetséges, az SDL2.dll fájl szükséges"
|
||||
IDS_2113 "Biztosan szeretné újraindítani az emulált gépet?"
|
||||
IDS_2114 "Biztos benne, hogy ki szeretne lépni a 86Box-ból?"
|
||||
IDS_2115 "Nem sikerült inicializálni a Ghostscript-et"
|
||||
|
||||
@@ -465,7 +465,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Floppy %i (%s): %ls"
|
||||
IDS_2110 "Tutte le immagini (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Immagini da settori avanzati (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagini da settori basilari (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Immagini flusso (*.FDI)\0*.FDI\0Immagini da superficie (*.86F;*.MFM)\0*.86F;*.MFM\0Tutti i file (*.*)\0*.*\0"
|
||||
IDS_2112 "Impossibile inizializzare SDL, SDL2.dll è necessario"
|
||||
IDS_2113 "Sei sicuro di voler riavviare la macchina emulata?"
|
||||
IDS_2114 "Sei sicuro di voler uscire da 86Box?"
|
||||
IDS_2115 "Impossibile inizializzare Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS値: %i、%i、%i)"
|
||||
IDS_2109 "フロッピー %i (%s): %ls"
|
||||
IDS_2110 "すべてのイメージ (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0アドバンスド セクター イメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0ベーシック セクター イメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0サーフェス イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2112 "SDLが初期化できません。SDL2.dllが必要です"
|
||||
IDS_2113 "使用中のマシンをハードリ セットしますか?"
|
||||
IDS_2114 "86Boxを終了しますか?"
|
||||
IDS_2115 "Ghostscriptが初期化できません"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "플로피 %i (%s): %ls"
|
||||
IDS_2110 "모든 이미지 (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0어드밴스드 섹터 이미지 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0기본 섹터 이미지 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0플럭스 이미지 (*.FDI)\0*.FDI\0표면 이미지 (*.86F;*.MFM)\0*.86F;*.MFM\0모든 파일 (*.*)\0*.*\0"
|
||||
IDS_2112 "SDL을 초기화할 수 없습니다. SDL2.dll이 필요합니다"
|
||||
IDS_2113 "실행중인 머신을 재시작하시겠습니까?"
|
||||
IDS_2114 "86Box를 끝내시겠습니까?"
|
||||
IDS_2115 "Ghostscript를 초기화할 수 없습니다"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Dyskietka %i (%s): %ls"
|
||||
IDS_2110 "Wszystkie obrazy (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Zaawansowane obrazy sektorów (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Podstawowe obrazy sektorów (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Obrazy powierzchniowe (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2112 "Nie można zainicjować SDL, wymagany SDL2.dll"
|
||||
IDS_2113 "Jesteś pewien że chcesz wykonać twardy reset emulowanej maszyny?"
|
||||
IDS_2114 "Jesteś pewien że chcesz zakończyć 86Box?"
|
||||
IDS_2115 "Nie można zainicjować Ghostscript"
|
||||
|
||||
@@ -467,7 +467,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disquete %i (%s): %ls"
|
||||
IDS_2110 "Todas as imagens (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Imagens de setor avançado (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagens de setor básico (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Imagens de fluxo (*.FDI)\0*.FDI\0Imagens de superfície (*.86F;*.MFM)\0*.86F;*.MFM\0Todos os arquivos (*.*)\0*.*\0"
|
||||
IDS_2112 "Não é possível inicializar o SDL, é necessário o SDL2.dll"
|
||||
IDS_2113 "Tem certeza de que deseja reiniciar completamente a máquina emulada?"
|
||||
IDS_2114 "Tem certeza de que deseja sair do 86Box?"
|
||||
IDS_2115 "Não é possível inicializar o Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CCS: %i, %i, %i)"
|
||||
IDS_2109 "Disquete %i (%s): %ls"
|
||||
IDS_2110 "Todas as imagens (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Imagens avançadas de sector (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagens básicas de sector (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Imagens de fluxo (*.FDI)\0*.FDI\0Imagens de superfície (*.86F;*.MFM)\0*.86F;*.MFM\0Todos os ficheiros (*.*)\0*.*\0"
|
||||
IDS_2112 "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!"
|
||||
IDS_2113 "Tem a certeza de que quer um reinício completo da máquina emulada?"
|
||||
IDS_2114 "Tem a certeza de que quer sair do 86Box?"
|
||||
IDS_2115 "Não foi possível inicializar o Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u МБ (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Дисковод %i (%s): %ls"
|
||||
IDS_2110 "Все образы (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Расширенные образы секторов (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Основные образы секторов (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Образы Flux (*.FDI)\0*.FDI\0Образы Surface (*.86F;*.MFM)\0*.86F;*.MFM\0Все файлы (*.*)\0*.*\0"
|
||||
IDS_2112 "Невозможно инициализировать SDL, требуется SDL2.dll"
|
||||
IDS_2113 "Вы уверены, что хотите выполнить холодную перезагрузку эмулируемой машины?"
|
||||
IDS_2114 "Вы уверены, что хотите выйти из 86Box?"
|
||||
IDS_2115 "Невозможно инициализировать Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disketa %i (%s): %ls"
|
||||
IDS_2110 "Vse slike (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Napredne sektorske slike (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Osnovne sektorske slike (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Tokovne slike (*.FDI)\0*.FDI\0Površinske slike (*.86F;*.MFM)\0*.86F;*.MFM\0Vse datoteke (*.*)\0*.*\0"
|
||||
IDS_2112 "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll"
|
||||
IDS_2113 "Ste prepričani, da želite ponovno zagnati emulirani sistem?"
|
||||
IDS_2114 "Ste prepričani, da želite zapreti 86Box?"
|
||||
IDS_2115 "Ne morem inicializirati Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Disket %i (%s): %ls"
|
||||
IDS_2110 "Tüm imajlar (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Gelişmiş sektör imajları (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basit sektör imajları (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Yüzey imajları (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2112 "SDL başlatılamadı, SDL2.dll gerekmektedir"
|
||||
IDS_2113 "Emüle edilen makineyi yeniden başlatmak istediğinizden emin misiniz?"
|
||||
IDS_2114 "86Box'tan çıkmak istediğinize emin misiniz?"
|
||||
IDS_2115 "Ghostscript başlatılamadı"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u МБ (CHS: %i, %i, %i)"
|
||||
IDS_2109 "Дисковод %i (%s): %ls"
|
||||
IDS_2110 "Усі образи (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Розширені образи секторів (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Основні образи секторів (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Образи Flux (*.FDI)\0*.FDI\0Образи Surface (*.86F;*.MFM)\0*.86F;*.MFM\0Усі файли (*.*)\0*.*\0"
|
||||
IDS_2112 "Неможливо ініціалізувати SDL, потрібно SDL2.dll"
|
||||
IDS_2113 "Ви впевнені, що хочете виконати холодне перезавантаження емульованої машини?"
|
||||
IDS_2114 "Ви впевнені, що хочете вийти з 86Box?"
|
||||
IDS_2115 "Неможливо ініціалізувати Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "软盘 %i (%s): %ls"
|
||||
IDS_2110 "所有映像 (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0高级扇区映像 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本扇区映像 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux 映像 (*.FDI)\0*.FDI\0表面映像 (*.86F;*.MFM)\0*.86F;*.MFM\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2112 "无法初始化 SDL,需要 SDL2.dll"
|
||||
IDS_2113 "确定要硬重置模拟器吗?"
|
||||
IDS_2114 "确定要退出 86Box 吗?"
|
||||
IDS_2115 "无法初始化 Ghostscript"
|
||||
|
||||
@@ -464,7 +464,6 @@ BEGIN
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "軟碟 %i (%s): %ls"
|
||||
IDS_2110 "所有映像 (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0進階磁區映像 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本磁區映像 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux 映像 (*.FDI)\0*.FDI\0表面映像 (*.86F;*.MFM)\0*.86F;*.MFM\0所有檔案 (*.*)\0*.*\0"
|
||||
IDS_2112 "無法初始化 SDL,需要 SDL2.dll"
|
||||
IDS_2113 "確定要硬重設模擬器嗎?"
|
||||
IDS_2114 "確定要退出 86Box 嗎?"
|
||||
IDS_2115 "無法初始化 Ghostscript"
|
||||
|
||||
@@ -76,8 +76,6 @@ int hide_status_bar = 0;
|
||||
int hide_tool_bar = 0;
|
||||
int dpi = 96;
|
||||
|
||||
int status_icons_fullscreen = 0; /* unused. */
|
||||
|
||||
extern char openfilestring[512];
|
||||
extern WCHAR wopenfilestring[512];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user