3 #include "Mountain/core.hpp" 5 #include <magic_enum/magic_enum.hpp> 16 struct GpuVertexArray;
20 enum class ImageShaderAccess : uint8_t
27 enum class GpuDataSynchronizationFlags : uint16_t
31 VertexAttribArray = 1 << 0,
32 ElementArray = 1 << 1,
34 TextureFetch = 1 << 3,
38 ShaderImageAccess = 1 << 5,
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,
51 enum class MagnificationFilter : uint8_t
57 enum class Wrapping : uint8_t
65 enum class ShaderType : uint8_t
71 enum class InternalFormat : uint8_t
98 RedGreenBlueAlpha8Signed,
100 RedGreenBlue10Alpha2UnsignedInt,
105 SignedRedGreenBlueAlpha8,
110 RedGreenBlueAlpha16Float,
115 RedGreenBlueAlpha32Float,
117 Red11FloatGreen11FloatBlue10Float,
119 RedGreenBlue9Shared5,
129 RedGreen8UnsignedInt,
131 RedGreen16UnsignedInt,
133 RedGreen32UnsignedInt,
136 RedGreenBlue8UnsignedInt,
138 RedGreenBlue16UnsignedInt,
140 RedGreenBlue32UnsignedInt,
142 RedGreenBlueAlpha8Int,
143 RedGreenBlueAlpha8UnsignedInt,
144 RedGreenBlueAlpha16Int,
145 RedGreenBlueAlpha16UnsignedInt,
146 RedGreenBlueAlpha32Int,
147 RedGreenBlueAlpha32UnsignedInt
150 enum class Format : uint8_t
160 enum class DataType : uint8_t
172 UnsignedByte_2_3_3_Reverse,
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,
182 UnsignedInt_8_8_8_8_Reverse,
183 UnsignedInt_10_10_10_2,
184 UnsignedInt_2_10_10_10_Reverse
188 enum class Constant : uint8_t
192 AliasedLineWidthRange,
209 CompressedTextureFormats,
211 MaxComputeShaderStorageBlocks,
213 MaxCombinedShaderStorageBlocks,
215 MaxComputeUniformBlocks,
216 MaxComputeTextureImageUnits,
217 MaxComputeUniformComponents,
218 MaxComputeAtomicCounters,
219 MaxComputeAtomicCounterBuffers,
220 MaxCombinedComputeUniformComponents,
221 MaxComputeWorkGroupInvocations,
222 MaxComputeWorkGroupCount,
223 MaxComputeWorkGroupSize,
225 DispatchIndirectBufferBinding,
227 MaxDebugGroupStackDepth,
229 DebugGroupStackDepth,
265 DrawFramebufferBinding,
267 ReadFramebufferBinding,
269 ElementArrayBufferBinding,
271 FragmentShaderDerivativeHint,
273 ImplementationColorReadFormat,
274 ImplementationColorReadType,
280 LayerProvokingVertex,
288 MaxArrayTextureLayers,
292 MaxColorTextureSamples,
294 MaxCombinedAtomicCounters,
295 MaxCombinedFragmentUniformComponents,
296 MaxCombinedGeometryUniformComponents,
297 MaxCombinedTextureImageUnits,
298 MaxCombinedUniformBlocks,
299 MaxCombinedVertexUniformComponents,
301 MaxCubeMapTextureSize,
303 MaxDepthTextureSamples,
307 MaxDualSourceDrawBuffers,
312 MaxFragmentAtomicCounters,
313 MaxFragmentShaderStorageBlocks,
314 MaxFragmentInputComponents,
315 MaxFragmentUniformComponents,
316 MaxFragmentUniformVectors,
317 MaxFragmentUniformBlocks,
320 MaxFramebufferHeight,
321 MaxFramebufferLayers,
322 MaxFramebufferSamples,
324 MaxGeometryAtomicCounters,
325 MaxGeometryShaderStorageBlocks,
326 MaxGeometryInputComponents,
327 MaxGeometryOutputComponents,
328 MaxGeometryTextureImageUnits,
329 MaxGeometryUniformBlocks,
330 MaxGeometryUniformComponents,
334 MinMapBufferAlignment,
338 MaxProgramTexelOffset,
339 MinProgramTexelOffset,
341 MaxRectangleTextureSize,
347 MaxServerWaitTimeout,
349 MaxShaderStorageBufferBindings,
351 MaxTessControlAtomicCounters,
352 MaxTessEvaluationAtomicCounters,
353 MaxTessControlShaderStorageBlocks,
354 MaxTessEvaluationShaderStorageBlocks,
356 MaxTextureBufferSize,
357 MaxTextureImageUnits,
361 MaxUniformBufferBindings,
365 MaxVaryingComponents,
369 MaxVertexAtomicCounters,
371 MaxVertexShaderStorageBlocks,
372 MaxVertexTextureImageUnits,
373 MaxVertexUniformComponents,
374 MaxVertexUniformVectors,
375 MaxVertexOutputComponents,
376 MaxVertexUniformBlocks,
383 NumCompressedTextureFormats,
385 NumProgramBinaryFormats,
386 NumShaderBinaryFormats,
397 PixelPackBufferBinding,
398 PixelUnpackBufferBinding,
400 PointFadeThresholdSize,
402 PrimitiveRestartIndex,
404 ProgramBinaryFormats,
405 ProgramPipelineBinding,
411 PointSizeGranularity,
428 SampleCoverageInvert,
439 ShaderStorageBufferBinding,
440 ShaderStorageBufferOffsetAlignment,
442 ShaderStorageBufferStart,
443 ShaderStorageBufferSize,
445 SmoothLineWidthRange,
446 SmoothLineWidthGranularity,
450 StencilBackPassDepthFail,
451 StencilBackPassDepthPass,
453 StencilBackValueMask,
454 StencilBackWritemask,
458 StencilPassDepthFail,
459 StencilPassDepthPass,
470 TextureBinding1dArray,
472 TextureBinding2dArray,
473 TextureBinding2dMultisample,
474 TextureBinding2dMultisampleArray,
476 TextureBindingBuffer,
477 TextureBindingCubeMap,
478 TextureBindingRectangle,
479 TextureCompressionHint,
480 TextureBufferOffsetAlignment,
484 TransformFeedbackBufferBinding,
485 TransformFeedbackBufferStart,
486 TransformFeedbackBufferSize,
488 UniformBufferBinding,
489 UniformBufferOffsetAlignment,
503 VertexBindingDivisor,
508 MaxVertexAttribRelativeOffset,
509 MaxVertexAttribBindings,
513 ViewportIndexProvokingVertex,
514 ViewportSubpixelBits,
519 enum class BufferType : uint8_t
525 DispatchIndirectBuffer,
533 TransformFeedbackBuffer,
537 enum class BufferUsage : uint8_t
550 enum class BufferStorageFlags : uint16_t
557 MapPersistent = 0x040,
560 DynamicStorage = 0x100,
561 ClientStorage = 0x200
564 enum class MemoryBarrierFlags : uint16_t
568 VertexAttribArrayBarrier = 1 << 0,
569 ElementArrayBarrier = 1 << 1,
570 UniformBarrier = 1 << 2,
571 TextureFetchBarrier = 1 << 3,
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
586 enum class DrawMode : uint8_t
597 TriangleStripAdjacency,
602 enum class ClearFlags : uint16_t
606 DepthBuffer = 0x0100,
607 StencilBuffer = 0x0400,
611 enum class BlendFunction : uint8_t
624 OneMinusConstantColor,
626 OneMinusConstantAlpha
629 enum class FramebufferType : uint8_t
636 template <
typename T>
637 concept OpenGlConvertibleT = Meta::IsAny<
653 MOUNTAIN_API
void BindImage(uint32_t textureId, uint32_t shaderBinding, ImageShaderAccess access);
655 MOUNTAIN_API
void SetActiveTexture(uint8_t activeTexture);
657 MOUNTAIN_API
void SynchronizeGpuData(Meta::Flags<GpuDataSynchronizationFlags> flags = Utils::ToFlags(GpuDataSynchronizationFlags::None));
659 MOUNTAIN_API
void MemoryBarrier(Meta::Flags<MemoryBarrierFlags> flags = Utils::ToFlags(MemoryBarrierFlags::None));
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);
666 MOUNTAIN_API
void SetClearColor(
const Color& newClearColor);
667 MOUNTAIN_API
void Clear(ClearFlags flags);
669 MOUNTAIN_API
void BindTexture(uint32_t textureId);
670 MOUNTAIN_API
void BindTexture(GpuTexture gpuTexture);
672 MOUNTAIN_API
void BindBuffer(BufferType type, uint32_t bufferId);
673 MOUNTAIN_API
void BindBuffer(BufferType type, GpuBuffer gpuBuffer);
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);
678 MOUNTAIN_API
void BindVertexArray(uint32_t vertexArrayId);
679 MOUNTAIN_API
void BindVertexArray(GpuVertexArray gpuVertexArray);
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);
684 MOUNTAIN_API
void BindFramebuffer(FramebufferType type, uint32_t framebuffer);
686 MOUNTAIN_API uint32_t GetLastError();
687 MOUNTAIN_API
const char_t* GetLastErrorString();
689 MOUNTAIN_API bool_t IsConstantEnabled(Constant constant);
690 MOUNTAIN_API bool_t IsConstantEnabled(Constant constant, uint32_t index);
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);
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);
710 MOUNTAIN_API
void SetBlendFunction(BlendFunction sourceFactors, BlendFunction destinationFactors);
711 MOUNTAIN_API
void SetBlendFunction(uint32_t drawBuffer, BlendFunction sourceFactors, BlendFunction destinationFactors);
713 MOUNTAIN_API
void SetViewport(int32_t x, int32_t y, int32_t width, int32_t height);
715 template <OpenGlConvertibleT T>
717 T FromOpenGl(int32_t value);
719 MOUNTAIN_API MagnificationFilter FromOpenGl<MagnificationFilter>(int32_t value);
721 MOUNTAIN_API Wrapping FromOpenGl<Wrapping>(int32_t value);
723 MOUNTAIN_API ShaderType FromOpenGl<ShaderType>(int32_t value);
725 MOUNTAIN_API InternalFormat FromOpenGl<InternalFormat>(int32_t value);
727 MOUNTAIN_API Format FromOpenGl<Format>(int32_t value);
729 MOUNTAIN_API DataType FromOpenGl<DataType>(int32_t value);
731 MOUNTAIN_API Constant FromOpenGl<Constant>(int32_t value);
733 MOUNTAIN_API BufferType FromOpenGl<BufferType>(int32_t value);
735 MOUNTAIN_API BufferUsage FromOpenGl<BufferUsage>(int32_t value);
737 MOUNTAIN_API DrawMode FromOpenGl<DrawMode>(int32_t value);
739 MOUNTAIN_API BlendFunction FromOpenGl<BlendFunction>(int32_t value);
741 MOUNTAIN_API FramebufferType FromOpenGl<FramebufferType>(int32_t value);
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);
757 ENUM_FLAGS(Mountain::Graphics::GpuDataSynchronizationFlags);
759 ENUM_FLAGS(Mountain::Graphics::BufferStorageFlags);
761 ENUM_FLAGS(Mountain::Graphics::MemoryBarrierFlags);
763 ENUM_FLAGS(Mountain::Graphics::ClearFlags);
Defines general utility functions.