ezEngine  Milestone 7
Basics.h
1 #pragma once
2 
3 #include <Foundation/Basics.h>
4 #include <Foundation/Types/Id.h>
5 #include <Foundation/Types/RefCounted.h>
6 
7 // Configure the DLL Import/Export Define
8 #if EZ_ENABLED(EZ_COMPILE_ENGINE_AS_DLL)
9  #ifdef BUILDSYSTEM_BUILDING_RENDERERFOUNDATION_LIB
10  #define EZ_RENDERERFOUNDATION_DLL __declspec(dllexport)
11  #else
12  #define EZ_RENDERERFOUNDATION_DLL __declspec(dllimport)
13  #endif
14 #else
15  #define EZ_RENDERERFOUNDATION_DLL
16 #endif
17 
18 // Necessary array sizes
19 #define EZ_GAL_MAX_CONSTANT_BUFFER_COUNT 16
20 #define EZ_GAL_MAX_SHADER_RESOURCE_VIEW_COUNT 16
21 #define EZ_GAL_MAX_VERTEX_BUFFER_COUNT 16
22 #define EZ_GAL_MAX_RENDERTARGET_COUNT 8
23 
24 // Forward declarations
25 
35 struct ezGALQueryCreationDescription;
39 
40 class ezGALSwapChain;
41 class ezGALShader;
42 class ezGALTexture;
43 class ezGALBuffer;
45 class ezGALBlendState;
47 class ezGALRenderTargetSetup;
49 class ezGALFence;
50 class ezGALQuery;
51 class ezGALSamplerState;
52 class ezGALResourceView;
54 class ezGALDevice;
55 class ezGALContext;
56 
57 // Basic enums
59 {
60  enum Enum
61  {
62  Triangles,
63 
65 
67  };
68 };
69 
70 struct EZ_RENDERERFOUNDATION_DLL ezGALIndexType
71 {
72  enum Enum
73  {
74  UShort,
75  UInt,
76 
77  ENUM_COUNT
78  };
79 
80 
82  static ezUInt8 GetSize(ezGALIndexType::Enum format) { return Size[format]; }
83 
84 private:
85 
86  static const ezUInt8 Size[ezGALIndexType::ENUM_COUNT];
87 };
88 
89 
90 struct EZ_RENDERERFOUNDATION_DLL ezGALShaderStage
91 {
92  enum Enum
93  {
94  VertexShader,
95  HullShader,
96  DomainShader,
97  GeometryShader,
98  PixelShader,
99 
100  ComputeShader,
101 
102  ENUM_COUNT
103  };
104 
105  static const char* Names[ENUM_COUNT];
106 };
107 
109 {
110  enum Enum
111  {
112  None = 1,
113  TwoSamples = 2,
114  FourSamples = 4,
115  EightSamples = 8,
116 
117  ENUM_COUNT = 4
118  };
119 };
120 
122 {
123  enum Enum
124  {
125  Texture2D = 0,
126  TextureCube,
127  Texture3D,
128 
129  ENUM_COUNT
130  };
131 };
132 
134 {
135  enum Enum
136  {
137  Zero = 0,
138  One,
139  SrcColor,
140  InvSrcColor,
141  SrcAlpha,
142  InvSrcAlpha,
143  DestAlpha,
144  InvDestAlpha,
145  DestColor,
146  InvDestColor,
147  SrcAlphaSaturated,
148  BlendFactor,
149  InvBlendFactor,
150 
151  ENUM_COUNT
152  };
153 };
154 
156 {
157  enum Enum
158  {
159  Add = 0,
160  Subtract,
161  RevSubtract,
162  Min,
163  Max,
164 
165  ENUM_COUNT
166  };
167 };
168 
170 {
171  enum Enum
172  {
173  Keep = 0,
174  Zero,
175  Replace,
176  IncrementSaturated,
177  DecrementSaturated,
178  Invert,
179  Increment,
180  Decrement,
181 
182  ENUM_COUNT
183  };
184 };
185 
187 {
188  enum Enum
189  {
190  Never = 0,
191  Less,
192  Equal,
193  LessEqual,
194  Greater,
195  NotEqual,
196  GreaterEqual,
197  Always,
198 
199  ENUM_COUNT
200  };
201 };
202 
205 {
207  enum Enum
208  {
209  None = 0,
210  Front = 1,
211  Back = 2,
212 
213  ENUM_COUNT
214  };
215 };
216 
218 {
219  enum Enum
220  {
221  Point = 0,
222  Linear,
223  Anisotropic,
224 
225  ENUM_COUNT
226  };
227 };
228 
230 {
231  enum Enum
232  {
233  Wrap = 0,
234  Mirror,
235  Clamp,
236  Border,
237  MirrorOnce,
238 
239  ENUM_COUNT
240  };
241 };
242 
243 // Basic structs
245 {
246  ezUInt32 m_uiMipLevel;
247  ezUInt32 m_uiArraySlice;
248 };
249 
251 {
252  EZ_FORCE_INLINE ezGALSystemMemoryDescription()
253  : m_pData(nullptr),
254  m_uiRowPitch(0),
255  m_uiSlicePitch(0)
256  {
257  }
258 
259 
260  void* m_pData;
261  ezUInt32 m_uiRowPitch;
262  ezUInt32 m_uiSlicePitch;
263 };
264 
266 template<typename CreationDescription> class ezGALObjectBase : public ezRefCounted
267 {
268 public:
269 
270  EZ_FORCE_INLINE ezGALObjectBase(const CreationDescription& Description)
271  : m_Description(Description)
272  {
273  }
274 
275  EZ_FORCE_INLINE const CreationDescription& GetDescription() const
276  {
277  return m_Description;
278  }
279 
280 protected:
281  const CreationDescription m_Description;
282 };
283 
284 // Handles
285 namespace ezGAL
286 {
287  typedef ezGenericId<16, 16> ez16_16Id;
288  typedef ezGenericId<18, 14> ez18_14Id;
289  typedef ezGenericId<20, 12> ez20_12Id;
290 }
291 
293 {
294  EZ_DECLARE_HANDLE_TYPE(ezGALSwapChainHandle, ezGAL::ez16_16Id);
295 
296  friend class ezGALDevice;
297  friend struct ezGALContextState;
298  friend class ezGALContext;
299 };
300 
302 {
303  EZ_DECLARE_HANDLE_TYPE(ezGALShaderHandle, ezGAL::ez18_14Id);
304 
305  friend class ezGALDevice;
306  friend struct ezGALContextState;
307  friend class ezGALContext;
308 };
309 
311 {
312  EZ_DECLARE_HANDLE_TYPE(ezGALTextureHandle, ezGAL::ez18_14Id);
313 
314  friend class ezGALDevice;
315  friend struct ezGALContextState;
316  friend class ezGALContext;
317 };
318 
320 {
321  EZ_DECLARE_HANDLE_TYPE(ezGALBufferHandle, ezGAL::ez18_14Id);
322 
323  friend class ezGALDevice;
324  friend struct ezGALContextState;
325  friend class ezGALContext;
326 };
327 
329 {
330  EZ_DECLARE_HANDLE_TYPE(ezGALResourceViewHandle, ezGAL::ez18_14Id);
331 
332  friend class ezGALDevice;
333  friend struct ezGALContextState;
334  friend class ezGALContext;
335 };
336 
338 {
339  EZ_DECLARE_HANDLE_TYPE(ezGALRenderTargetViewHandle, ezGAL::ez18_14Id);
340 
341  friend class ezGALDevice;
342  friend struct ezGALContextState;
343  friend class ezGALContext;
344 };
345 
347 {
348  EZ_DECLARE_HANDLE_TYPE(ezGALDepthStencilStateHandle, ezGAL::ez16_16Id);
349 
350  friend class ezGALDevice;
351  friend struct ezGALContextState;
352  friend class ezGALContext;
353 };
354 
356 {
357  EZ_DECLARE_HANDLE_TYPE(ezGALBlendStateHandle, ezGAL::ez16_16Id);
358 
359  friend class ezGALDevice;
360  friend struct ezGALContextState;
361  friend class ezGALContext;
362 };
363 
365 {
366  EZ_DECLARE_HANDLE_TYPE(ezGALRasterizerStateHandle, ezGAL::ez16_16Id);
367 
368  friend class ezGALDevice;
369  friend struct ezGALContextState;
370  friend class ezGALContext;
371 };
372 
374 {
375  EZ_DECLARE_HANDLE_TYPE(ezGALSamplerStateHandle, ezGAL::ez16_16Id);
376 
377  friend class ezGALDevice;
378  friend struct ezGALContextState;
379  friend class ezGALContext;
380 };
381 
383 {
384  EZ_DECLARE_HANDLE_TYPE(ezGALVertexDeclarationHandle, ezGAL::ez18_14Id);
385 
386  friend class ezGALDevice;
387  friend struct ezGALContextState;
388  friend class ezGALContext;
389 };
390 
392 {
393  EZ_DECLARE_HANDLE_TYPE(ezGALFenceHandle, ezGAL::ez20_12Id);
394 
395  friend class ezGALDevice;
396  friend struct ezGALContextState;
397  friend class ezGALContext;
398 };
399 
400 
402 {
403  EZ_DECLARE_HANDLE_TYPE(ezGALQueryHandle, ezGAL::ez20_12Id);
404 
405  friend class ezGALDevice;
406  friend struct ezGALContextState;
407  friend class ezGALContext;
408 };