Covellite++  Version: 2.3.3 Revision: 2585 Platform: x64 Build: 21:20 20.09.2026
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
GraphicApi.cpp
1
2#include "stdafx.h"
3#include "GraphicApi.hpp"
4#include <Covellite/Api/Vertex.hpp>
5#include <Covellite/Api/Defines.hpp>
6#include <Covellite/Api/Component.inl>
7
8namespace covellite
9{
10
11namespace api
12{
13
14namespace renderer
15{
16
17GraphicApi::GraphicApi(void) :
18 m_StartProgram{ std::chrono::system_clock::now() },
19 m_CurrentFrameTime{ 0.0f }
20{
21 const auto CreatePresent = [this](const ComponentPtr_t & _pComponent)
22 {
23 const auto PresentRender = CreatePresentBuffer(_pComponent);
24
25 return [=](void)
26 {
27 PresentRender();
28 m_DrawCallCounter++;
29 };
30 };
31
32 m_Creators =
33 {
34 { uT("Test"), [](const ComponentPtr_t &)
35 { return [](void) {}; } },
36 { uT("Camera"), [this](const ComponentPtr_t & _pComponent)
37 { return CreateCamera(_pComponent); } },
38 { uT("BkSurface"), [this](const ComponentPtr_t & _pComponent)
39 { return CreateBkSurface(_pComponent); } },
40 { uT("State"), [this](const ComponentPtr_t & _pComponent)
41 { return CreateState(_pComponent); } },
42 { uT("Texture"), [this](const ComponentPtr_t & _pComponent)
43 { return CreateTexture(_pComponent); } },
44 { uT("TextureArray"), [this](const ComponentPtr_t & _pComponent)
45 { return CreateTextureArray(_pComponent); } },
46 { uT("Shader"), [this](const ComponentPtr_t & _pComponent)
47 { return CreateShader(_pComponent); } },
48 { uT("Buffer"), [this](const ComponentPtr_t & _pComponent)
49 { return CreateBuffer(_pComponent); } },
50 { uT("Transform"), [this](const ComponentPtr_t & _pComponent)
51 { return CreateTransform(_pComponent); } },
52 { uT("Present"), CreatePresent },
53 { uT("Updater"), [this](const ComponentPtr_t & _pComponent)
54 { return CreateUpdater(_pComponent); } },
55 };
56}
57
58void GraphicApi::PresentFrame(void) /*override*/
59{
60 const ::std::chrono::duration<float> Time =
61 (std::chrono::system_clock::now() - m_StartProgram);
62 m_CurrentFrameTime = Time.count();
63 m_IsResizeWindow = false;
64 m_DrawCallCount = m_DrawCallCounter;
65 m_DrawCallCounter = 0;
66}
67
68auto GraphicApi::GetCreators(void) const noexcept -> const Creators_t & /*final*/
69{
70 return m_Creators;
71}
72
73size_t GraphicApi::GetDrawCallCount(void) const /*final*/
74{
75 return m_DrawCallCount;
76}
77
78auto GraphicApi::CreateUpdater(const ComponentPtr_t & _pComponent) const -> Render_t
79{
80 using ::covellite::api::Updater_t;
82
83 static const auto hFunctionName = Component::GetHash(uT("function"));
84 static const Updater_t Empty = [](const float) {};
85
86 // 11.10.2020: Вероятно, это уже неактуально после замены интерфейса:
87 // Если переданный функциональный объект захватить здесь, то оверхед
88 // будет существенно меньше (55kk против 12kk вызовов в секунду), но даже так
89 // оверхед достаточно мал, чтобы оказывать какое-либо существенное влияние
90 // на время рендеринга кадра (updater'ов в приципе не может быть много).
91
92 return [=](void)
93 {
94 // Создание здесь объекта, а не ссылки позволяет релизовать замену
95 // функции обратного вызова внутри самой функции обратного вызова.
96 const Updater_t Updater = (*_pComponent)[hFunctionName].Default(Empty);
97
98 Updater(m_CurrentFrameTime);
99 };
100}
101
102} // namespace renderer
103
104} // namespace api
105
106} // namespace covellite
Класс входит в проект Covellite.Api Класс компонента.
Определения Component.hpp:35