RendererFactory.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "RendererFactory.hh"
  2. #include "RenderSettings.hh"
  3. #include "Reactor.hh"
  4. #include "Display.hh"
  5. #include "unreachable.hh"
  6. #include <memory>
  7. // Video systems:
  8. #include "components.hh"
  9. #include "DummyVideoSystem.hh"
  10. #include "SDLVideoSystem.hh"
  11. // Renderers:
  12. #include "DummyRenderer.hh"
  13. #include "PixelRenderer.hh"
  14. #include "V9990DummyRenderer.hh"
  15. #include "V9990PixelRenderer.hh"
  16. #if COMPONENT_LASERDISC
  17. #include "LDDummyRenderer.hh"
  18. #include "LDPixelRenderer.hh"
  19. #endif
  20. using std::unique_ptr;
  21. namespace openmsx::RendererFactory {
  22. unique_ptr<VideoSystem> createVideoSystem(Reactor& reactor)
  23. {
  24. Display& display = reactor.getDisplay();
  25. switch (display.getRenderSettings().getRenderer()) {
  26. case RenderSettings::DUMMY:
  27. return std::make_unique<DummyVideoSystem>();
  28. case RenderSettings::SDL:
  29. case RenderSettings::SDLGL_PP:
  30. return std::make_unique<SDLVideoSystem>(
  31. reactor, display.getCommandConsole());
  32. default:
  33. UNREACHABLE; return nullptr;
  34. }
  35. }
  36. unique_ptr<Renderer> createRenderer(VDP& vdp, Display& display)
  37. {
  38. switch (display.getRenderSettings().getRenderer()) {
  39. case RenderSettings::DUMMY:
  40. return std::make_unique<DummyRenderer>();
  41. case RenderSettings::SDL:
  42. case RenderSettings::SDLGL_PP:
  43. return std::make_unique<PixelRenderer>(vdp, display);
  44. default:
  45. UNREACHABLE; return nullptr;
  46. }
  47. }
  48. unique_ptr<V9990Renderer> createV9990Renderer(V9990& vdp, Display& display)
  49. {
  50. switch (display.getRenderSettings().getRenderer()) {
  51. case RenderSettings::DUMMY:
  52. return std::make_unique<V9990DummyRenderer>();
  53. case RenderSettings::SDL:
  54. case RenderSettings::SDLGL_PP:
  55. return std::make_unique<V9990PixelRenderer>(vdp);
  56. default:
  57. UNREACHABLE; return nullptr;
  58. }
  59. }
  60. #if COMPONENT_LASERDISC
  61. unique_ptr<LDRenderer> createLDRenderer(LaserdiscPlayer& ld, Display& display)
  62. {
  63. switch (display.getRenderSettings().getRenderer()) {
  64. case RenderSettings::DUMMY:
  65. return std::make_unique<LDDummyRenderer>();
  66. case RenderSettings::SDL:
  67. case RenderSettings::SDLGL_PP:
  68. return std::make_unique<LDPixelRenderer>(ld, display);
  69. default:
  70. UNREACHABLE; return nullptr;
  71. }
  72. }
  73. #endif
  74. } // namespace openmsx::RendererFactory