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