diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index ac92b23f..8883243e 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -219,7 +219,7 @@ void DivDispatchContainer::clear() { } } -void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags) { +void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender) { // quit if we already initialized if (dispatch!=NULL) return; @@ -231,33 +231,57 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_YM2612: dispatch=new DivPlatformGenesis; - ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + if (isRender) { + ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0)); + } else { + ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + } ((DivPlatformGenesis*)dispatch)->setSoftPCM(false); break; case DIV_SYSTEM_YM2612_EXT: dispatch=new DivPlatformGenesisExt; - ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + if (isRender) { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0)); + } else { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + } ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false); break; case DIV_SYSTEM_YM2612_CSM: dispatch=new DivPlatformGenesisExt; - ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + if (isRender) { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0)); + } else { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + } ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false); ((DivPlatformGenesisExt*)dispatch)->setCSMChannel(6); break; case DIV_SYSTEM_YM2612_DUALPCM: dispatch=new DivPlatformGenesis; - ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + if (isRender) { + ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0)); + } else { + ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + } ((DivPlatformGenesis*)dispatch)->setSoftPCM(true); break; case DIV_SYSTEM_YM2612_DUALPCM_EXT: dispatch=new DivPlatformGenesisExt; - ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + if (isRender) { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612CoreRender",0)); + } else { + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + } ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(true); break; case DIV_SYSTEM_SMS: dispatch=new DivPlatformSMS; - ((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCore",0)); + if (isRender) { + ((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCoreRender",0)); + } else { + ((DivPlatformSMS*)dispatch)->setNuked(eng->getConfInt("snCore",0)); + } break; case DIV_SYSTEM_GB: dispatch=new DivPlatformGB; @@ -267,39 +291,71 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_NES: dispatch=new DivPlatformNES; - ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1); + if (isRender) { + ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCoreRender",0)==1); + } else { + ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1); + } break; case DIV_SYSTEM_C64_6581: dispatch=new DivPlatformC64; - ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0)); + if (isRender) { + ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",0)); + } else { + ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0)); + } ((DivPlatformC64*)dispatch)->setChipModel(true); break; case DIV_SYSTEM_C64_8580: dispatch=new DivPlatformC64; - ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0)); + if (isRender) { + ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64CoreRender",0)); + } else { + ((DivPlatformC64*)dispatch)->setCore(eng->getConfInt("c64Core",0)); + } ((DivPlatformC64*)dispatch)->setChipModel(false); break; case DIV_SYSTEM_YM2151: dispatch=new DivPlatformArcade; - ((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0); + if (isRender) { + ((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCoreRender",0)==0); + } else { + ((DivPlatformArcade*)dispatch)->setYMFM(eng->getConfInt("arcadeCore",0)==0); + } break; case DIV_SYSTEM_YM2610: case DIV_SYSTEM_YM2610_FULL: dispatch=new DivPlatformYM2610; - ((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2610*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2610_EXT: case DIV_SYSTEM_YM2610_FULL_EXT: dispatch=new DivPlatformYM2610Ext; - ((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2610Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2610B: dispatch=new DivPlatformYM2610B; - ((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2610B*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2610B_EXT: dispatch=new DivPlatformYM2610BExt; - ((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2610BExt*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_AMIGA: dispatch=new DivPlatformAmiga; @@ -312,26 +368,46 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_FDS: dispatch=new DivPlatformFDS; - ((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCore",0)==1); + if (isRender) { + ((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCoreRender",0)==1); + } else { + ((DivPlatformFDS*)dispatch)->setNSFPlay(eng->getConfInt("fdsCore",0)==1); + } break; case DIV_SYSTEM_TIA: dispatch=new DivPlatformTIA; break; case DIV_SYSTEM_YM2203: dispatch=new DivPlatformYM2203; - ((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2203*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2203_EXT: dispatch=new DivPlatformYM2203Ext; - ((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2608: dispatch=new DivPlatformYM2608; - ((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2608*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_YM2608_EXT: dispatch=new DivPlatformYM2608Ext; - ((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + if (isRender) { + ((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCoreRender",1)==1); + } else { + ((DivPlatformYM2608Ext*)dispatch)->setCombo(eng->getConfInt("opnCore",1)==1); + } break; case DIV_SYSTEM_OPLL: case DIV_SYSTEM_OPLL_DRUMS: @@ -396,7 +472,11 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_POKEY: dispatch=new DivPlatformPOKEY; - ((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCore",1)==1); + if (isRender) { + ((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCoreRender",1)==1); + } else { + ((DivPlatformPOKEY*)dispatch)->setAltASAP(eng->getConfInt("pokeyCore",1)==1); + } break; case DIV_SYSTEM_QSOUND: dispatch=new DivPlatformQSound; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 282c450a..6cfd1a5e 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -822,22 +822,8 @@ void DivEngine::runExportThread() { size_t curFadeOutSample=0; bool isFadingOut=false; - setConf("arcadeCore",getConfInt("arcadeCoreRender",0)); - setConf("ym2612Core",getConfInt("ym2612CoreRender",0)); - setConf("snCore",getConfInt("snCoreRender",0)); - setConf("nesCore",getConfInt("nesCoreRender",0)); - setConf("fdsCore",getConfInt("fdsCoreRender",0)); - setConf("c64Core",getConfInt("c64CoreRender",0)); - setConf("pokeyCore",getConfInt("pokeyCoreRender",0)); - setConf("opnCore",getConfInt("opnCoreRender",0)); - - if (switchMaster(true)) { - logI("successfully switched to render cores!"); - } else { - logE("could not switch to render cores!"); - exporting = false; - return; - } + quitDispatch(); + initDispatch(true); switch (exportMode) { case DIV_EXPORT_MODE_ONE: { @@ -1163,21 +1149,8 @@ void DivEngine::runExportThread() { } } - setConf("arcadeCore",getConfInt("arcadeCorePlayback",0)); - setConf("ym2612Core",getConfInt("ym2612CorePlayback",0)); - setConf("snCore",getConfInt("snCorePlayback",0)); - setConf("nesCore",getConfInt("nesCorePlayback",0)); - setConf("fdsCore",getConfInt("fdsCorePlayback",0)); - setConf("c64Core",getConfInt("c64CorePlayback",0)); - setConf("pokeyCore",getConfInt("pokeyCorePlayback",0)); - setConf("opnCore",getConfInt("opnCorePlayback",0)); - - if (switchMaster(true)) { - logI("successfully switched to playback cores!"); - } else { - logE("could not switch to playback cores!"); - } - + quitDispatch(); + initDispatch(false); stopExport=false; } #else @@ -4600,10 +4573,11 @@ void DivEngine::rescanAudioDevices() { } } -void DivEngine::initDispatch() { +void DivEngine::initDispatch(bool isRender) { BUSY_BEGIN; + if (isRender) logI("render cores set"); for (int i=0; igetConfInt("audioQuality",0); settings.audioBufSize=e->getConfInt("audioBufSize",1024); settings.audioRate=e->getConfInt("audioRate",44100); - settings.arcadeCore=settings.arcadeCorePlayback; - settings.ym2612Core=settings.ym2612CorePlayback; - settings.snCore=settings.snCorePlayback; - settings.nesCore=settings.nesCorePlayback; - settings.fdsCore=settings.fdsCorePlayback; - settings.c64Core=settings.c64CorePlayback; - settings.pokeyCore=settings.pokeyCorePlayback; - settings.opnCore=settings.opnCorePlayback; - settings.arcadeCorePlayback=e->getConfInt("arcadeCorePlayback",0); - settings.ym2612CorePlayback=e->getConfInt("ym2612CorePlayback",0); - settings.snCorePlayback=e->getConfInt("snCorePlayback",0); - settings.nesCorePlayback=e->getConfInt("nesCorePlayback",0); - settings.fdsCorePlayback=e->getConfInt("fdsCorePlayback",0); - settings.c64CorePlayback=e->getConfInt("c64CorePlayback",0); - settings.pokeyCorePlayback=e->getConfInt("pokeyCorePlayback",1); - settings.opnCorePlayback=e->getConfInt("opnCorePlayback",1); + settings.arcadeCore=e->getConfInt("arcadeCore",0); + settings.ym2612Core=e->getConfInt("ym2612Core",0); + settings.snCore=e->getConfInt("snCore",0); + settings.nesCore=e->getConfInt("nesCore",0); + settings.fdsCore=e->getConfInt("fdsCore",0); + settings.c64Core=e->getConfInt("c64Core",0); + settings.pokeyCore=e->getConfInt("pokeyCore",1); + settings.opnCore=e->getConfInt("opnCore",1); settings.arcadeCoreRender=e->getConfInt("arcadeCoreRender",0); settings.ym2612CoreRender=e->getConfInt("ym2612CoreRender",0); settings.snCoreRender=e->getConfInt("snCoreRender",0); @@ -3146,14 +3138,6 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.c64Core,0,2); clampSetting(settings.pokeyCore,0,1); clampSetting(settings.opnCore,0,1); - clampSetting(settings.arcadeCorePlayback,0,1); - clampSetting(settings.ym2612CorePlayback,0,1); - clampSetting(settings.snCorePlayback,0,1); - clampSetting(settings.nesCorePlayback,0,1); - clampSetting(settings.fdsCorePlayback,0,1); - clampSetting(settings.c64CorePlayback,0,2); - clampSetting(settings.pokeyCorePlayback,0,1); - clampSetting(settings.opnCorePlayback,0,1); clampSetting(settings.arcadeCoreRender,0,1); clampSetting(settings.ym2612CoreRender,0,1); clampSetting(settings.snCoreRender,0,1); @@ -3344,14 +3328,14 @@ void FurnaceGUI::commitSettings() { settings.mu5Path!=e->getConfString("mu5Path",""); bool coresChanged=( - settings.arcadeCorePlayback!=e->getConfInt("arcadeCore",0) || - settings.ym2612CorePlayback!=e->getConfInt("ym2612Core",0) || - settings.snCorePlayback!=e->getConfInt("snCore",0) || - settings.nesCorePlayback!=e->getConfInt("nesCore",0) || - settings.fdsCorePlayback!=e->getConfInt("fdsCore",0) || - settings.c64CorePlayback!=e->getConfInt("c64Core",0) || - settings.pokeyCorePlayback!=e->getConfInt("pokeyCore",1) || - settings.opnCorePlayback!=e->getConfInt("opnCore",1) || + settings.arcadeCore!=e->getConfInt("arcadeCore",0) || + settings.ym2612Core!=e->getConfInt("ym2612Core",0) || + settings.snCore!=e->getConfInt("snCore",0) || + settings.nesCore!=e->getConfInt("nesCore",0) || + settings.fdsCore!=e->getConfInt("fdsCore",0) || + settings.c64Core!=e->getConfInt("c64Core",0) || + settings.pokeyCore!=e->getConfInt("pokeyCore",1) || + settings.opnCore!=e->getConfInt("opnCore",1) || settings.arcadeCoreRender!=e->getConfInt("arcadeCore",0) || settings.ym2612CoreRender!=e->getConfInt("ym2612Core",0) || settings.snCoreRender!=e->getConfInt("snCore",0) || @@ -3384,14 +3368,6 @@ void FurnaceGUI::commitSettings() { e->setConf("c64Core",settings.c64Core); e->setConf("pokeyCore",settings.pokeyCore); e->setConf("opnCore",settings.opnCore); - e->setConf("arcadeCorePlayback",settings.arcadeCorePlayback); - e->setConf("ym2612CorePlayback",settings.ym2612CorePlayback); - e->setConf("snCorePlayback",settings.snCorePlayback); - e->setConf("nesCorePlayback",settings.nesCorePlayback); - e->setConf("fdsCorePlayback",settings.fdsCorePlayback); - e->setConf("c64CorePlayback",settings.c64CorePlayback); - e->setConf("pokeyCorePlayback",settings.pokeyCorePlayback); - e->setConf("opnCorePlayback",settings.opnCorePlayback); e->setConf("arcadeCoreRender",settings.arcadeCoreRender); e->setConf("ym2612CoreRender",settings.ym2612CoreRender); e->setConf("snCoreRender",settings.snCoreRender);