OXYGENHUB
◆ main openmsx / src / video / RendererFactory.cc
1.9 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#include "RendererFactory.hh"
2
3
#include "Display.hh"
4
#include "DummyRenderer.hh"
5
#include "DummyVideoSystem.hh"
6
#include "PixelRenderer.hh"
7
#include "SDLVideoSystem.hh"
8
#include "V9990DummyRenderer.hh"
9
#include "V9990PixelRenderer.hh"
10
11
#include "Reactor.hh"
12
#include "unreachable.hh"
13
14
#include "components.hh"
15
#if COMPONENT_LASERDISC
16
#include "LDDummyRenderer.hh"
17
#include "LDPixelRenderer.hh"
18
#endif
19
20
#include <memory>
21
22
namespace openmsx::RendererFactory {
23
24
std::unique_ptr<VideoSystem> createVideoSystem(Reactor& reactor)
25
{
26
	Display& display = reactor.getDisplay();
27
	switch (display.getRenderer()) {
28
		case RenderSettings::RendererID::DUMMY:
29
			return std::make_unique<DummyVideoSystem>();
30
		case RenderSettings::RendererID::SDLGL_PP:
31
			return std::make_unique<SDLVideoSystem>(reactor);
32
		default:
33
			UNREACHABLE;
34
	}
35
}
36
37
std::unique_ptr<Renderer> createRenderer(VDP& vdp, Display& display)
38
{
39
	switch (display.getRenderer()) {
40
		case RenderSettings::RendererID::DUMMY:
41
			return std::make_unique<DummyRenderer>();
42
		case RenderSettings::RendererID::SDLGL_PP:
43
			return std::make_unique<PixelRenderer>(vdp, display);
44
		default:
45
			UNREACHABLE;
46
	}
47
}
48
49
std::unique_ptr<V9990Renderer> createV9990Renderer(V9990& vdp, Display& display)
50
{
51
	switch (display.getRenderer()) {
52
		case RenderSettings::RendererID::DUMMY:
53
			return std::make_unique<V9990DummyRenderer>();
54
		case RenderSettings::RendererID::SDLGL_PP:
55
			return std::make_unique<V9990PixelRenderer>(vdp);
56
		default:
57
			UNREACHABLE;
58
	}
59
}
60
61
#if COMPONENT_LASERDISC
62
std::unique_ptr<LDRenderer> createLDRenderer(LaserdiscPlayer& ld, Display& display)
63
{
64
	switch (display.getRenderer()) {
65
		case RenderSettings::RendererID::DUMMY:
66
			return std::make_unique<LDDummyRenderer>();
67
		case RenderSettings::RendererID::SDLGL_PP:
68
			return std::make_unique<LDPixelRenderer>(ld, display);
69
		default:
70
			UNREACHABLE;
71
	}
72
}
73
#endif
74
75
} // namespace openmsx::RendererFactory