Covellite++  Version: 2.3.0 Revision: ??? Platform: x64 Build: 23:13 04.01.2025
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
Window.windows.cpp
1
2#include "stdafx.h"
3#include <Covellite/Api/Window.hpp>
4#include <alicorn/std/string.hpp>
5#include <alicorn/patterns/factory.hpp>
6#include "Renderer/IGraphicApi.hpp"
7
8namespace covellite
9{
10
11namespace api
12{
13
14/*static*/ auto Window::GetRenderers(void) -> ::std::vector<String_t>
15{
16 return
17 {
18 uT("DirectX11"),
19 uT("OpenGL")
20 };
21}
22
23// Реализация функции разнесена по файлам, чтобы правильно считалось покрытие
24// кода тестами.
25/*static*/ auto Window::MakeImpl(const String_t & _Api,
26 const renderer::SettingsData & _Data) -> IGraphicApiPtr_t
27{
28 using namespace ::alicorn::modules::patterns;
29
30 if (_Api != uT("Auto"))
31 {
32 return factory::make_unique<renderer::IGraphicApi>(_Api, _Data);
33 }
34
35 for (const auto & Name : GetRenderers())
36 {
37 try
38 {
39 return factory::make_unique<renderer::IGraphicApi>(Name, _Data);
40 }
41 catch (const ::std::exception & _Ex)
42 {
43 // Сюда попадаем, если указанного рендера нет или он недоступен
44 // на текущем устройстве.
45
46 LOGGER(Warning) << uT("Create graphics API ") << Name << " error: "
47 << _Ex.what();
48 }
49 }
50
51 throw STD_EXCEPTION << "Unknown Api: " << _Api;
52}
53
54} // namespace api
55
56} // namespace covellite