Mountain  1.0.0
Simple C++ 2D Game Framework
graphics.hpp
1 #pragma once
2 
3 #include "Mountain/core.hpp"
4 
5 #include <magic_enum/magic_enum.hpp>
6 
9 
14 namespace Mountain::Graphics
15 {
16  struct GpuVertexArray;
17  struct GpuBuffer;
18  struct GpuTexture;
19 
20  enum class ImageShaderAccess : uint8_t
21  {
22  ReadOnly,
23  WriteOnly,
24  ReadWrite
25  };
26 
27  enum class GpuDataSynchronizationFlags : uint16_t
28  {
29  None = 0,
30 
31  VertexAttribArray = 1 << 0,
32  ElementArray = 1 << 1,
33  Uniform = 1 << 2,
34  TextureFetch = 1 << 3,
35 
36  // For some reason, the OpenGL bit values skip the 1 << 4 or 0x10 value
37 
38  ShaderImageAccess = 1 << 5,
39  Command = 1 << 6,
40  PixelBuffer = 1 << 7,
41  TextureUpdate = 1 << 8,
42  BufferUpdate = 1 << 9,
43  ClientMappedBuffer = 1 << 10,
44  Framebuffer = 1 << 11,
45  TransformFeedback = 1 << 12,
46  AtomicCounter = 1 << 13,
47  ShaderStorage = 1 << 14,
48  QueryBuffer = 1 << 15
49  };
50 
51  enum class MagnificationFilter : uint8_t
52  {
53  Nearest,
54  Linear
55  };
56 
57  enum class Wrapping : uint8_t
58  {
59  Repeat,
60  MirroredRepeat,
61  ClampToEdge,
62  ClampToBorder
63  };
64 
65  enum class ShaderType : uint8_t
66  {
67  Vertex,
68  Fragment
69  };
70 
71  enum class InternalFormat : uint8_t
72  {
73  Red8,
74  Red8Signed,
75  Red16,
76  Red16Signed,
77 
78  RedGreen8,
79  RedGreen8Signed,
80  RedGreen16,
81  RedGreen16Signed,
82 
83  Red3Green3Blue2,
84 
85  RedGreenBlue4,
86  RedGreenBlue5,
87  RedGreenBlue8,
88  RedGreenBlue8Signed,
89  RedGreenBlue10,
90  RedGreenBlue12,
91  RedGreenBlue16,
92  RedGreenBlue16Signed,
93 
94  RedGreenBlueAlpha2,
95  RedGreenBlueAlpha4,
96  RedGreenBlue5Alpha1,
97  RedGreenBlueAlpha8,
98  RedGreenBlueAlpha8Signed,
99  RedGreenBlue10Alpha2,
100  RedGreenBlue10Alpha2UnsignedInt,
101  RedGreenBlueAlpha12,
102  RedGreenBlueAlpha16,
103 
104  SignedRedGreenBlue8,
105  SignedRedGreenBlueAlpha8,
106 
107  Red16Float,
108  RedGreen16Float,
109  RedGreenBlue16Float,
110  RedGreenBlueAlpha16Float,
111 
112  Red32Float,
113  RedGreen32Float,
114  RedGreenBlue32Float,
115  RedGreenBlueAlpha32Float,
116 
117  Red11FloatGreen11FloatBlue10Float,
118 
119  RedGreenBlue9Shared5,
120 
121  Red8Int,
122  Red8UnsignedInt,
123  Red16Int,
124  Red16UnsignedInt,
125  Red32Int,
126  Red32UnsignedInt,
127 
128  RedGreen8Int,
129  RedGreen8UnsignedInt,
130  RedGreen16Int,
131  RedGreen16UnsignedInt,
132  RedGreen32Int,
133  RedGreen32UnsignedInt,
134 
135  RedGreenBlue8Int,
136  RedGreenBlue8UnsignedInt,
137  RedGreenBlue16Int,
138  RedGreenBlue16UnsignedInt,
139  RedGreenBlue32Int,
140  RedGreenBlue32UnsignedInt,
141 
142  RedGreenBlueAlpha8Int,
143  RedGreenBlueAlpha8UnsignedInt,
144  RedGreenBlueAlpha16Int,
145  RedGreenBlueAlpha16UnsignedInt,
146  RedGreenBlueAlpha32Int,
147  RedGreenBlueAlpha32UnsignedInt
148  };
149 
150  enum class Format : uint8_t
151  {
152  Red,
153  RedGreen,
154  RedGreenBlue,
155  BlueGreenRed,
156  RedGreenBlueAlpha,
157  BlueGreenRedAlpha
158  };
159 
160  enum class DataType : uint8_t
161  {
162  UnsignedByte,
163  Byte,
164  UnsignedShort,
165  Short,
166  UnsignedInt,
167  Int,
168  Float,
169 
170  // ReSharper disable CppInconsistentNaming
171  UnsignedByte_3_3_2,
172  UnsignedByte_2_3_3_Reverse,
173 
174  UnsignedShort_5_6_5,
175  UnsignedShort_5_6_5_Reverse,
176  UnsignedShort_4_4_4_4,
177  UnsignedShort_4_4_4_4_Reverse,
178  UnsignedShort_5_5_5_1,
179  UnsignedShort_1_5_5_5_Reverse,
180 
181  UnsignedInt_8_8_8_8,
182  UnsignedInt_8_8_8_8_Reverse,
183  UnsignedInt_10_10_10_2,
184  UnsignedInt_2_10_10_10_Reverse
185  // ReSharper restore CppInconsistentNaming
186  };
187 
188  enum class Constant : uint8_t
189  {
190  ActiveTexture,
191 
192  AliasedLineWidthRange,
193 
194  ArrayBufferBinding,
195 
196  Blend,
197  BlendColor,
198  BlendDstAlpha,
199  BlendDstRgb,
200  BlendEquationRgb,
201  BlendEquationAlpha,
202  BlendSrcAlpha,
203  BlendSrcRgb,
204 
205  ColorClearValue,
206  ColorLogicOp,
207  ColorWritemask,
208 
209  CompressedTextureFormats,
210 
211  MaxComputeShaderStorageBlocks,
212 
213  MaxCombinedShaderStorageBlocks,
214 
215  MaxComputeUniformBlocks,
216  MaxComputeTextureImageUnits,
217  MaxComputeUniformComponents,
218  MaxComputeAtomicCounters,
219  MaxComputeAtomicCounterBuffers,
220  MaxCombinedComputeUniformComponents,
221  MaxComputeWorkGroupInvocations,
222  MaxComputeWorkGroupCount,
223  MaxComputeWorkGroupSize,
224 
225  DispatchIndirectBufferBinding,
226 
227  MaxDebugGroupStackDepth,
228 
229  DebugGroupStackDepth,
230 
231  ContextFlags,
232 
233  CullFace,
234  CullFaceMode,
235 
236  CurrentProgram,
237 
238  DepthClearValue,
239  DepthFunc,
240  DepthRange,
241  DepthTest,
242  DepthWritemask,
243 
244  Dither,
245 
246  DoubleBuffer,
247 
248  DrawBuffer,
249  DrawBuffer0,
250  DrawBuffer1,
251  DrawBuffer2,
252  DrawBuffer3,
253  DrawBuffer4,
254  DrawBuffer5,
255  DrawBuffer6,
256  DrawBuffer7,
257  DrawBuffer8,
258  DrawBuffer9,
259  DrawBuffer10,
260  DrawBuffer11,
261  DrawBuffer12,
262  DrawBuffer13,
263  DrawBuffer14,
264  DrawBuffer15,
265  DrawFramebufferBinding,
266 
267  ReadFramebufferBinding,
268 
269  ElementArrayBufferBinding,
270 
271  FragmentShaderDerivativeHint,
272 
273  ImplementationColorReadFormat,
274  ImplementationColorReadType,
275 
276  LineSmooth,
277  LineSmoothHint,
278  LineWidth,
279 
280  LayerProvokingVertex,
281 
282  LogicOpMode,
283 
284  MajorVersion,
285 
286  Max3dTextureSize,
287 
288  MaxArrayTextureLayers,
289 
290  MaxClipDistances,
291 
292  MaxColorTextureSamples,
293 
294  MaxCombinedAtomicCounters,
295  MaxCombinedFragmentUniformComponents,
296  MaxCombinedGeometryUniformComponents,
297  MaxCombinedTextureImageUnits,
298  MaxCombinedUniformBlocks,
299  MaxCombinedVertexUniformComponents,
300 
301  MaxCubeMapTextureSize,
302 
303  MaxDepthTextureSamples,
304 
305  MaxDrawBuffers,
306 
307  MaxDualSourceDrawBuffers,
308 
309  MaxElementsIndices,
310  MaxElementsVertices,
311 
312  MaxFragmentAtomicCounters,
313  MaxFragmentShaderStorageBlocks,
314  MaxFragmentInputComponents,
315  MaxFragmentUniformComponents,
316  MaxFragmentUniformVectors,
317  MaxFragmentUniformBlocks,
318 
319  MaxFramebufferWidth,
320  MaxFramebufferHeight,
321  MaxFramebufferLayers,
322  MaxFramebufferSamples,
323 
324  MaxGeometryAtomicCounters,
325  MaxGeometryShaderStorageBlocks,
326  MaxGeometryInputComponents,
327  MaxGeometryOutputComponents,
328  MaxGeometryTextureImageUnits,
329  MaxGeometryUniformBlocks,
330  MaxGeometryUniformComponents,
331 
332  MaxIntegerSamples,
333 
334  MinMapBufferAlignment,
335 
336  MaxLabelLength,
337 
338  MaxProgramTexelOffset,
339  MinProgramTexelOffset,
340 
341  MaxRectangleTextureSize,
342 
343  MaxRenderbufferSize,
344 
345  MaxSampleMaskWords,
346 
347  MaxServerWaitTimeout,
348 
349  MaxShaderStorageBufferBindings,
350 
351  MaxTessControlAtomicCounters,
352  MaxTessEvaluationAtomicCounters,
353  MaxTessControlShaderStorageBlocks,
354  MaxTessEvaluationShaderStorageBlocks,
355 
356  MaxTextureBufferSize,
357  MaxTextureImageUnits,
358  MaxTextureLodBias,
359  MaxTextureSize,
360 
361  MaxUniformBufferBindings,
362  MaxUniformBlockSize,
363  MaxUniformLocations,
364 
365  MaxVaryingComponents,
366  MaxVaryingVectors,
367  MaxVaryingFloats,
368 
369  MaxVertexAtomicCounters,
370  MaxVertexAttribs,
371  MaxVertexShaderStorageBlocks,
372  MaxVertexTextureImageUnits,
373  MaxVertexUniformComponents,
374  MaxVertexUniformVectors,
375  MaxVertexOutputComponents,
376  MaxVertexUniformBlocks,
377 
378  MaxViewportDims,
379  MaxViewports,
380 
381  MinorVersion,
382 
383  NumCompressedTextureFormats,
384  NumExtensions,
385  NumProgramBinaryFormats,
386  NumShaderBinaryFormats,
387 
388  PackAlignment,
389  PackImageHeight,
390  PackLsbFirst,
391  PackRowLength,
392  PackSkipImages,
393  PackSkipPixels,
394  PackSkipRows,
395  PackSwapBytes,
396 
397  PixelPackBufferBinding,
398  PixelUnpackBufferBinding,
399 
400  PointFadeThresholdSize,
401 
402  PrimitiveRestartIndex,
403 
404  ProgramBinaryFormats,
405  ProgramPipelineBinding,
406  ProgramPointSize,
407 
408  ProvokingVertex,
409 
410  PointSize,
411  PointSizeGranularity,
412  PointSizeRange,
413 
414  PolygonOffsetFactor,
415  PolygonOffsetUnits,
416  PolygonOffsetFill,
417  PolygonOffsetLine,
418  PolygonOffsetPoint,
419  PolygonSmooth,
420  PolygonSmoothHint,
421 
422  ReadBuffer,
423 
424  RenderbufferBinding,
425 
426  SampleBuffers,
427  SampleCoverageValue,
428  SampleCoverageInvert,
429  SampleMaskValue,
430 
431  SamplerBinding,
432 
433  Samples,
434 
435  ScissorBox,
436  ScissorTest,
437 
438  ShaderCompiler,
439  ShaderStorageBufferBinding,
440  ShaderStorageBufferOffsetAlignment,
441 
442  ShaderStorageBufferStart,
443  ShaderStorageBufferSize,
444 
445  SmoothLineWidthRange,
446  SmoothLineWidthGranularity,
447 
448  StencilBackFail,
449  StencilBackFunc,
450  StencilBackPassDepthFail,
451  StencilBackPassDepthPass,
452  StencilBackRef,
453  StencilBackValueMask,
454  StencilBackWritemask,
455  StencilClearValue,
456  StencilFail,
457  StencilFunc,
458  StencilPassDepthFail,
459  StencilPassDepthPass,
460  StencilRef,
461  StencilTest,
462  StencilValueMask,
463  StencilWritemask,
464 
465  Stereo,
466 
467  SubpixelBits,
468 
469  TextureBinding1d,
470  TextureBinding1dArray,
471  TextureBinding2d,
472  TextureBinding2dArray,
473  TextureBinding2dMultisample,
474  TextureBinding2dMultisampleArray,
475  TextureBinding3d,
476  TextureBindingBuffer,
477  TextureBindingCubeMap,
478  TextureBindingRectangle,
479  TextureCompressionHint,
480  TextureBufferOffsetAlignment,
481 
482  Timestamp,
483 
484  TransformFeedbackBufferBinding,
485  TransformFeedbackBufferStart,
486  TransformFeedbackBufferSize,
487 
488  UniformBufferBinding,
489  UniformBufferOffsetAlignment,
490  UniformBufferSize,
491  UniformBufferStart,
492 
493  UnpackAlignment,
494  UnpackImageHeight,
495  UnpackLsbFirst,
496  UnpackRowLength,
497  UnpackSkipImages,
498  UnpackSkipPixels,
499  UnpackSkipRows,
500  UnpackSwapBytes,
501 
502  VertexArrayBinding,
503  VertexBindingDivisor,
504  VertexBindingOffset,
505  VertexBindingStride,
506  VertexBindingBuffer,
507 
508  MaxVertexAttribRelativeOffset,
509  MaxVertexAttribBindings,
510 
511  Viewport,
512  ViewportBoundsRange,
513  ViewportIndexProvokingVertex,
514  ViewportSubpixelBits,
515 
516  MaxElementIndex
517  };
518 
519  enum class BufferType : uint8_t
520  {
521  ArrayBuffer,
522  AtomicCounterBuffer,
523  CopyReadBuffer,
524  CopyWriteBuffer,
525  DispatchIndirectBuffer,
526  DrawIndirectBuffer,
527  ElementArrayBuffer,
528  PixelPackBuffer,
529  PixelUnpackBuffer,
530  QueryBuffer,
531  ShaderStorageBuffer,
532  TextureBuffer,
533  TransformFeedbackBuffer,
534  UniformBuffer
535  };
536 
537  enum class BufferUsage : uint8_t
538  {
539  StreamDraw,
540  StreamRead,
541  StreamCopy,
542  StaticDraw,
543  StaticRead,
544  StaticCopy,
545  DynamicDraw,
546  DynamicRead,
547  DynamicCopy
548  };
549 
550  enum class BufferStorageFlags : uint16_t
551  {
552  None = 0,
553 
554  MapRead = 0x001,
555  MapWrite = 0x002,
556 
557  MapPersistent = 0x040,
558  MapCoherent = 0x080,
559 
560  DynamicStorage = 0x100,
561  ClientStorage = 0x200
562  };
563 
564  enum class MemoryBarrierFlags : uint16_t
565  {
566  None = 0,
567 
568  VertexAttribArrayBarrier = 1 << 0,
569  ElementArrayBarrier = 1 << 1,
570  UniformBarrier = 1 << 2,
571  TextureFetchBarrier = 1 << 3,
572 
573  // For some reason, the OpenGL bit values skip the 1 << 4 or 0x10 value
574 
575  ShaderImageAccessBarrier = 1 << 5,
576  CommandBarrier = 1 << 6,
577  PixelBufferBarrier = 1 << 7,
578  TextureUpdateBarrier = 1 << 8,
579  BufferUpdateBarrier = 1 << 9,
580  FramebufferBarrier = 1 << 10,
581  TransformFeedbackBarrier = 1 << 11,
582  AtomicCounterBarrier = 1 << 12,
583  ShaderStorageBarrier = 1 << 13
584  };
585 
586  enum class DrawMode : uint8_t
587  {
588  Points,
589  LineStrip,
590  LineLoop,
591  Lines,
592  LineStripAdjacency,
593  LinesAdjacency,
594  TriangleStrip,
595  TriangleFan,
596  Triangles,
597  TriangleStripAdjacency,
598  TrianglesAdjacency,
599  Patches
600  };
601 
602  enum class ClearFlags : uint16_t
603  {
604  None = 0,
605 
606  DepthBuffer = 0x0100,
607  StencilBuffer = 0x0400,
608  ColorBuffer = 0x4000
609  };
610 
611  enum class BlendFunction : uint8_t
612  {
613  Zero,
614  One,
615  SrcColor,
616  OneMinusSrcColor,
617  DstColor,
618  OneMinusDstColor,
619  SrcAlpha,
620  OneMinusSrcAlpha,
621  DstAlpha,
622  OneMinusDstAlpha,
623  ConstantColor,
624  OneMinusConstantColor,
625  ConstantAlpha,
626  OneMinusConstantAlpha
627  };
628 
629  enum class FramebufferType : uint8_t
630  {
631  DrawFramebuffer,
632  ReadFramebuffer,
633  Framebuffer
634  };
635 
636  template <typename T>
637  concept OpenGlConvertibleT = Meta::IsAny<
638  T,
639  MagnificationFilter,
640  Wrapping,
641  ShaderType,
642  InternalFormat,
643  Format,
644  DataType,
645  Constant,
646  BufferType,
647  BufferUsage,
648  DrawMode,
649  BlendFunction,
650  FramebufferType
651  >;
652 
653  MOUNTAIN_API void BindImage(uint32_t textureId, uint32_t shaderBinding, ImageShaderAccess access);
654 
655  MOUNTAIN_API void SetActiveTexture(uint8_t activeTexture);
656 
657  MOUNTAIN_API void SynchronizeGpuData(Meta::Flags<GpuDataSynchronizationFlags> flags = Utils::ToFlags(GpuDataSynchronizationFlags::None));
658 
659  MOUNTAIN_API void MemoryBarrier(Meta::Flags<MemoryBarrierFlags> flags = Utils::ToFlags(MemoryBarrierFlags::None));
660 
661  MOUNTAIN_API void DrawArrays(DrawMode mode, int32_t first, int32_t count);
662  MOUNTAIN_API void DrawArraysInstanced(DrawMode mode, int32_t first, int32_t count, int32_t instanceCount);
663  MOUNTAIN_API void DrawElements(DrawMode mode, int32_t count, DataType type, const void* indices);
664  MOUNTAIN_API void DrawElementsInstanced(DrawMode mode, int32_t count, DataType type, const void* indices, int32_t instanceCount);
665 
666  MOUNTAIN_API void SetClearColor(const Color& newClearColor);
667  MOUNTAIN_API void Clear(ClearFlags flags);
668 
669  MOUNTAIN_API void BindTexture(uint32_t textureId);
670  MOUNTAIN_API void BindTexture(GpuTexture gpuTexture);
671 
672  MOUNTAIN_API void BindBuffer(BufferType type, uint32_t bufferId);
673  MOUNTAIN_API void BindBuffer(BufferType type, GpuBuffer gpuBuffer);
674 
675  MOUNTAIN_API void BindBufferBase(BufferType type, uint32_t index, GpuBuffer gpuBuffer);
676  MOUNTAIN_API void BindBufferBase(BufferType type, uint32_t index, uint32_t bufferId);
677 
678  MOUNTAIN_API void BindVertexArray(uint32_t vertexArrayId);
679  MOUNTAIN_API void BindVertexArray(GpuVertexArray gpuVertexArray);
680 
681  MOUNTAIN_API void SetVertexAttribute(uint32_t index, int32_t size, int32_t stride, size_t offset, uint32_t divisor = 0);
682  MOUNTAIN_API void SetVertexAttributeInt(uint32_t index, int32_t size, int32_t stride, size_t offset, uint32_t divisor = 0);
683 
684  MOUNTAIN_API void BindFramebuffer(FramebufferType type, uint32_t framebuffer);
685 
686  MOUNTAIN_API uint32_t GetLastError();
687  MOUNTAIN_API const char_t* GetLastErrorString();
688 
689  MOUNTAIN_API bool_t IsConstantEnabled(Constant constant);
690  MOUNTAIN_API bool_t IsConstantEnabled(Constant constant, uint32_t index);
691 
692  MOUNTAIN_API void GetConstant(Constant constant, bool_t* outData);
693  MOUNTAIN_API void GetConstant(Constant constant, double_t* outData);
694  MOUNTAIN_API void GetConstant(Constant constant, float_t* outData);
695  MOUNTAIN_API void GetConstant(Constant constant, int32_t* outData);
696  MOUNTAIN_API void GetConstant(Constant constant, int64_t* outData);
697  MOUNTAIN_API void GetConstant(Constant constant, uint32_t index, bool_t* outData);
698  MOUNTAIN_API void GetConstant(Constant constant, uint32_t index, double_t* outData);
699  MOUNTAIN_API void GetConstant(Constant constant, uint32_t index, float_t* outData);
700  MOUNTAIN_API void GetConstant(Constant constant, uint32_t index, int32_t* outData);
701  MOUNTAIN_API void GetConstant(Constant constant, uint32_t index, int64_t* outData);
702 
703  MOUNTAIN_API void SetConstantEnabled(Constant constant, bool_t enabled);
704  MOUNTAIN_API void SetConstantEnabled(Constant constant, uint32_t index, bool_t enabled);
705  MOUNTAIN_API void EnableConstant(Constant constant);
706  MOUNTAIN_API void EnableConstant(Constant constant, uint32_t index);
707  MOUNTAIN_API void DisableConstant(Constant constant);
708  MOUNTAIN_API void DisableConstant(Constant constant, uint32_t index);
709 
710  MOUNTAIN_API void SetBlendFunction(BlendFunction sourceFactors, BlendFunction destinationFactors);
711  MOUNTAIN_API void SetBlendFunction(uint32_t drawBuffer, BlendFunction sourceFactors, BlendFunction destinationFactors);
712 
713  MOUNTAIN_API void SetViewport(int32_t x, int32_t y, int32_t width, int32_t height);
714 
715  template <OpenGlConvertibleT T>
716  // ReSharper disable once CppFunctionIsNotImplemented
717  T FromOpenGl(int32_t value);
718  template <>
719  MOUNTAIN_API MagnificationFilter FromOpenGl<MagnificationFilter>(int32_t value);
720  template <>
721  MOUNTAIN_API Wrapping FromOpenGl<Wrapping>(int32_t value);
722  template <>
723  MOUNTAIN_API ShaderType FromOpenGl<ShaderType>(int32_t value);
724  template <>
725  MOUNTAIN_API InternalFormat FromOpenGl<InternalFormat>(int32_t value);
726  template <>
727  MOUNTAIN_API Format FromOpenGl<Format>(int32_t value);
728  template <>
729  MOUNTAIN_API DataType FromOpenGl<DataType>(int32_t value);
730  template <>
731  MOUNTAIN_API Constant FromOpenGl<Constant>(int32_t value);
732  template <>
733  MOUNTAIN_API BufferType FromOpenGl<BufferType>(int32_t value);
734  template <>
735  MOUNTAIN_API BufferUsage FromOpenGl<BufferUsage>(int32_t value);
736  template <>
737  MOUNTAIN_API DrawMode FromOpenGl<DrawMode>(int32_t value);
738  template <>
739  MOUNTAIN_API BlendFunction FromOpenGl<BlendFunction>(int32_t value);
740  template <>
741  MOUNTAIN_API FramebufferType FromOpenGl<FramebufferType>(int32_t value);
742 
743  MOUNTAIN_API int32_t ToOpenGl(MagnificationFilter value);
744  MOUNTAIN_API int32_t ToOpenGl(Wrapping value);
745  MOUNTAIN_API int32_t ToOpenGl(ShaderType value);
746  MOUNTAIN_API int32_t ToOpenGl(InternalFormat value);
747  MOUNTAIN_API int32_t ToOpenGl(Format value);
748  MOUNTAIN_API int32_t ToOpenGl(DataType value);
749  MOUNTAIN_API int32_t ToOpenGl(Constant value);
750  MOUNTAIN_API int32_t ToOpenGl(BufferType value);
751  MOUNTAIN_API int32_t ToOpenGl(BufferUsage value);
752  MOUNTAIN_API int32_t ToOpenGl(DrawMode value);
753  MOUNTAIN_API int32_t ToOpenGl(BlendFunction value);
754  MOUNTAIN_API int32_t ToOpenGl(FramebufferType value);
755 }
756 
757 ENUM_FLAGS(Mountain::Graphics::GpuDataSynchronizationFlags);
758 
759 ENUM_FLAGS(Mountain::Graphics::BufferStorageFlags);
760 
761 ENUM_FLAGS(Mountain::Graphics::MemoryBarrierFlags);
762 
763 ENUM_FLAGS(Mountain::Graphics::ClearFlags);
Defines general utility functions.
Low-level graphics API.
Definition: gpu_buffer.hpp:9
Defines utilities for meta programming and template manipulation.
constexpr float_t Zero