void DeviceToolBar::OnChoice(wxCommandEvent &event) { wxObject *eventObject = event.GetEventObject(); //if we've changed hosts, we've handled the device switching already. if (eventObject == mHost) { ChangeHost(); } else if (eventObject == mInputChannels) { int channelsSelectionIndex = mInputChannels->GetSelection(); if (channelsSelectionIndex >= 0) gPrefs->Write(wxT("/AudioIO/RecordChannels"),channelsSelectionIndex + 1); } else if (eventObject == mInput) { ChangeDevice(true); } else if (eventObject == mOutput) { ChangeDevice(false); } if (gAudioIO) { // We cannot have gotten here if gAudioIO->IsAudioTokenActive(), // per the setting of AudioIONotBusyFlag and AudioIOBusyFlag in // AudacityProject::GetUpdateFlags(). // However, we can have an invalid audio token (so IsAudioTokenActive() // is false), but be monitoring. // If monitoring, have to stop the stream, so HandleDeviceChange() can work. // We could disable the Preferences command while monitoring, i.e., // set AudioIONotBusyFlag/AudioIOBusyFlag according to monitoring, as well. // Instead allow it because unlike recording, for example, monitoring // is not clearly something that should prohibit changing device. // TODO: We *could* be smarter in this method and call HandleDeviceChange() // only when the device choices actually changed. True of lots of prefs! // As is, we always stop monitoring before handling the device change. if (gAudioIO->IsMonitoring()) { gAudioIO->StopStream(); while (gAudioIO->IsBusy()) wxMilliSleep(100); } gAudioIO->HandleDeviceChange(); } // Update all projects' DeviceToolBar. for (size_t i = 0; i < gAudacityProjects.GetCount(); i++) { gAudacityProjects[i]->GetDeviceToolBar()->UpdatePrefs(); } }
void Effkseer_DeviceLost(void* data) { if(GetUseDirect3DDevice9() == NULL) return; // デバイスロストが発生した時に呼ぶ。 g_renderer2d->OnLostDevice(); g_renderer3d->OnLostDevice(); // 読み込んだエフェクトのリソースは全て破棄する。 for (auto e : effectHandleToEffect) { auto effect = e.second; effect->UnloadResources(); } // DXライブラリは内部でデバイス自体を消去しているのでNULLを設定する。 auto renderer2d = (EffekseerRendererDX9::Renderer*)g_renderer2d; auto renderer3d = (EffekseerRendererDX9::Renderer*)g_renderer3d; renderer2d->ChangeDevice(NULL); renderer3d->ChangeDevice(NULL); }
void Effkseer_DeviceRestore(void* data) { if(GetUseDirect3DDevice9() == NULL) return; // DXライブラリは回復時に内部でデバイスを再生成するので新しく設定する。 LPDIRECT3DDEVICE9 device = (LPDIRECT3DDEVICE9) GetUseDirect3DDevice9(); auto renderer2d = (EffekseerRendererDX9::Renderer*)g_renderer2d; auto renderer3d = (EffekseerRendererDX9::Renderer*)g_renderer3d; renderer2d->ChangeDevice(device); renderer3d->ChangeDevice(device); // エフェクトのリソースを再読み込みする。 for (auto e : effectHandleToEffect) { auto effect = e.second; effect->ReloadResources(); } // デバイスが復帰するときに呼ぶ g_renderer2d->OnResetDevice(); g_renderer3d->OnResetDevice(); }
void CJoystick::Initialize() { ChangeDevice( m_nJoystickMode ); SetDeadZone( m_nDeadZone ); SetSaturation( m_nSaturation ); }