Covellite++  Version: 2.3.3 Revision: 2585 Platform: x64 Build: 21:20 20.09.2026
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
GraphicApi.hpp
1
2#pragma once
3#include <deque>
4#include "IGraphicApi.hpp"
5#include "Api.forward.hpp"
6
7namespace covellite
8{
9
10namespace api
11{
12
13namespace renderer
14{
15
31class GraphicApi :
32 public Registator_t<IGraphicApi>
33{
34 using Components_t = ::std::deque<ComponentPtr_t>;
35
36protected:
38
39public:
40 // Интерфейс IGraphicApi:
41 void PresentFrame(void) override;
42 const Creators_t & GetCreators(void) const noexcept final;
43 size_t GetDrawCallCount(void) const final;
44
45protected:
46 virtual Render_t CreateCamera(const ComponentPtr_t &) = 0;
47 virtual Render_t CreateBkSurface(const ComponentPtr_t &) = 0;
48 virtual Render_t CreateState(const ComponentPtr_t &) = 0;
49 virtual Render_t CreateShader(const ComponentPtr_t &) = 0;
50 virtual Render_t CreateTexture(const ComponentPtr_t &) = 0;
51 virtual Render_t CreateTextureArray(const ComponentPtr_t &) = 0;
52 virtual Render_t CreateBuffer(const ComponentPtr_t &) = 0;
53 virtual Render_t CreateTransform(const ComponentPtr_t &) = 0;
54 virtual Render_t CreatePresentBuffer(const ComponentPtr_t &) = 0;
55
56public:
57 template<class TColor>
58 static TColor ARGBtoFloat4(uint32_t);
59
60private:
61 Render_t CreateUpdater(const ComponentPtr_t &) const;
62
63protected:
87 {
88 using Kind_t = ::alicorn::extension::std::String;
89 using Services_t = ::std::vector<ComponentPtr_t>;
90 using Expected_t = ::std::vector<::std::pair<Kind_t, ComponentPtr_t>>;
91 using Hadler_t = ::std::function<void(const ComponentPtr_t &)>;
92 using Handlers_t = ::std::map<Kind_t, Hadler_t>;
93
94 public:
95 static Services_t Get(const ComponentPtr_t &, const Expected_t &);
96 static void Process(const ComponentPtr_t &, const Handlers_t &);
97 };
98
99protected:
100 bool m_IsResizeWindow = false;
101 const uint8_t Align1[7] = { 0 };
102
103private:
104 using TimePoint_t = ::std::chrono::system_clock::time_point;
105 const TimePoint_t m_StartProgram;
106 float m_CurrentFrameTime;
107 const uint8_t Align2[4] = { 0 };
108 size_t m_DrawCallCount = 0;
109 size_t m_DrawCallCounter = 0;
110
111protected:
112 class Constants;
113 ::std::shared_ptr<Constants> m_pConstants;
114 template<template <class> class TBuffer, class ... TArgs>
115 void MakeConstants(TArgs && ...);
116
117private:
118 Creators_t m_Creators;
119
120protected:
121 GraphicApi(void);
122 GraphicApi(const GraphicApi &) = delete;
123 GraphicApi(GraphicApi &&) = delete;
124 GraphicApi & operator= (const GraphicApi &) = delete;
125 GraphicApi & operator= (GraphicApi &&) = delete;
126 ~GraphicApi(void) = default;
127};
128
129} // namespace renderer
130
131} // namespace api
132
133} // namespace covellite
134
135namespace std
136{
137
138template<class T>
139istream & operator>>(istream &, shared_ptr<T> &)
140{
141 throw STD_EXCEPTION << "Это не должно вызываться, нужно для компилируемости";
142}
143
144} // namespace std
Класс входит в проект Covellite.Api Класс для работы со вспомогательными компонентами.
Определения GraphicApi.hpp:87
static void Process(const ComponentPtr_t &, const Handlers_t &)
Функция для последовательной обработки очереди вспомогательных компонентов.
Определения GraphicApi.CapturingServiceComponent.cpp:92
static Services_t Get(const ComponentPtr_t &, const Expected_t &)
Функция получения набора вспомогательных компонентов.
Определения GraphicApi.CapturingServiceComponent.cpp:40
Класс для передачи значений настроек программы реализации рендера.
Определения IGraphicApi.hpp:63