GBAHost.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2021 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "DolphinQt/GBAHost.h"
  4. #include <QApplication>
  5. #include "Core/HW/GBACore.h"
  6. #include "DolphinQt/GBAWidget.h"
  7. #include "DolphinQt/QtUtils/QueueOnObject.h"
  8. GBAHost::GBAHost(std::weak_ptr<HW::GBA::Core> core)
  9. {
  10. m_widget_controller = new GBAWidgetController();
  11. m_widget_controller->moveToThread(qApp->thread());
  12. m_core = std::move(core);
  13. auto core_ptr = m_core.lock();
  14. HW::GBA::CoreInfo info = core_ptr->GetCoreInfo();
  15. QueueOnObject(m_widget_controller, [widget_controller = m_widget_controller, core = m_core,
  16. info] { widget_controller->Create(core, info); });
  17. }
  18. GBAHost::~GBAHost()
  19. {
  20. m_widget_controller->deleteLater();
  21. }
  22. void GBAHost::GameChanged()
  23. {
  24. auto core_ptr = m_core.lock();
  25. if (!core_ptr || !core_ptr->IsStarted())
  26. return;
  27. HW::GBA::CoreInfo info = core_ptr->GetCoreInfo();
  28. QueueOnObject(m_widget_controller, [widget_controller = m_widget_controller, info] {
  29. widget_controller->GameChanged(info);
  30. });
  31. }
  32. void GBAHost::FrameEnded(const std::vector<u32>& video_buffer)
  33. {
  34. QueueOnObject(m_widget_controller, [widget_controller = m_widget_controller, video_buffer] {
  35. widget_controller->FrameEnded(video_buffer);
  36. });
  37. }
  38. std::unique_ptr<GBAHostInterface> Host_CreateGBAHost(std::weak_ptr<HW::GBA::Core> core)
  39. {
  40. return std::make_unique<GBAHost>(core);
  41. }