From 87f487c3aa613a32d62c8cfc0d397841247c666d Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Thu, 2 Oct 2025 22:30:17 +0800 Subject: [PATCH] [Feat] (MG_Util/Converters): Implement converters related to framebuffer enum. --- CMakeLists.txt | 4 ++ .../GLToMG/FramebufferEnumConverter.cpp | 37 +++++++++++++++++++ .../GLToMG/FramebufferEnumConverter.h | 10 +++++ .../MGToGL/FramebufferEnumConverter.cpp | 37 +++++++++++++++++++ .../MGToGL/FramebufferEnumConverter.h | 10 +++++ .../MGToStr/FramebufferEnumConverter.cpp | 36 ++++++++++++++++++ .../MGToStr/FramebufferEnumConverter.h | 10 +++++ 7 files changed, 144 insertions(+) create mode 100644 MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp create mode 100644 MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.h create mode 100644 MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp create mode 100644 MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.h create mode 100644 MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp create mode 100644 MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ddf6bc1..dcb7d369 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,13 +35,16 @@ set(SOURCE_FILES MobileGL/MG_Util/Converters/MGToStr/DataTypeConverter.cpp MobileGL/MG_Util/Converters/MGToStr/GLExtensionConverter.cpp MobileGL/MG_Util/Converters/MGToStr/BufferEnumConverter.cpp + MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToStr/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/GLToGlslang/GLShaderLangConverter.cpp MobileGL/MG_Util/Converters/MGToGL/ErrorCodeConverter.cpp MobileGL/MG_Util/Converters/MGToGL/BufferEnumConverter.cpp + MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/MGToGL/DataTypeConverter.cpp MobileGL/MG_Util/Converters/GLToMG/BufferEnumConverter.cpp + MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/TextureEnumConverter.cpp MobileGL/MG_Util/Converters/GLToMG/DataTypeConverter.cpp MobileGL/MG_Util/Converters/MGToMG/TextureEnumConverter.cpp @@ -56,6 +59,7 @@ set(SOURCE_FILES MobileGL/MG_Impl/EGLImpl/Temporary/TemporaryEGLImpl.cpp # @INSERTION_POINT:SOURCE_FILE_GLIMPL@ # + #MobileGL/MG_Impl/GLImpl/Framebuffer/GL_Framebuffer.cpp MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp MobileGL/MG_Impl/GLImpl/Texture/Validators.cpp diff --git a/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp b/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp new file mode 100644 index 00000000..b13b57b7 --- /dev/null +++ b/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.cpp @@ -0,0 +1,37 @@ +#include "FramebufferEnumConverter.h" + +namespace MobileGL { + namespace MG_Util { + FramebufferTarget ConvertGLEnumToFramebufferTarget(GLenum framebufferTarget) { + switch (framebufferTarget) { + case GL_FRAMEBUFFER: + case GL_DRAW_FRAMEBUFFER: + return FramebufferTarget::Draw; + case GL_READ_FRAMEBUFFER: + return FramebufferTarget::Read; + case GL_UNKNOWN_MGL: + default: + return FramebufferTarget::Unknown; + } + } + + FramebufferAttachmentType ConvertGLEnumToFramebufferAttachmentType(GLenum attachment) { + if (attachment >= GL_COLOR_ATTACHMENT0 && attachment <= GL_COLOR_ATTACHMENT31) { + return static_cast(static_cast(FramebufferAttachmentType::Color0) + + (attachment - GL_COLOR_ATTACHMENT0)); + } + + switch (attachment) { + case GL_DEPTH_ATTACHMENT: + return FramebufferAttachmentType::Depth; + case GL_STENCIL_ATTACHMENT: + return FramebufferAttachmentType::Stencil; + case GL_DEPTH_STENCIL_ATTACHMENT: + return FramebufferAttachmentType::DepthStencil; + case GL_UNKNOWN_MGL: + default: + return FramebufferAttachmentType::Unknown; + } + } + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.h b/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.h new file mode 100644 index 00000000..39471d1a --- /dev/null +++ b/MobileGL/MG_Util/Converters/GLToMG/FramebufferEnumConverter.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include + +namespace MobileGL { + namespace MG_Util { + FramebufferTarget ConvertGLEnumToFramebufferTarget(GLenum bufferTarget); + FramebufferAttachmentType ConvertGLEnumToFramebufferAttachmentType(GLenum attachment); + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp new file mode 100644 index 00000000..b13b57b7 --- /dev/null +++ b/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.cpp @@ -0,0 +1,37 @@ +#include "FramebufferEnumConverter.h" + +namespace MobileGL { + namespace MG_Util { + FramebufferTarget ConvertGLEnumToFramebufferTarget(GLenum framebufferTarget) { + switch (framebufferTarget) { + case GL_FRAMEBUFFER: + case GL_DRAW_FRAMEBUFFER: + return FramebufferTarget::Draw; + case GL_READ_FRAMEBUFFER: + return FramebufferTarget::Read; + case GL_UNKNOWN_MGL: + default: + return FramebufferTarget::Unknown; + } + } + + FramebufferAttachmentType ConvertGLEnumToFramebufferAttachmentType(GLenum attachment) { + if (attachment >= GL_COLOR_ATTACHMENT0 && attachment <= GL_COLOR_ATTACHMENT31) { + return static_cast(static_cast(FramebufferAttachmentType::Color0) + + (attachment - GL_COLOR_ATTACHMENT0)); + } + + switch (attachment) { + case GL_DEPTH_ATTACHMENT: + return FramebufferAttachmentType::Depth; + case GL_STENCIL_ATTACHMENT: + return FramebufferAttachmentType::Stencil; + case GL_DEPTH_STENCIL_ATTACHMENT: + return FramebufferAttachmentType::DepthStencil; + case GL_UNKNOWN_MGL: + default: + return FramebufferAttachmentType::Unknown; + } + } + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.h b/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.h new file mode 100644 index 00000000..c47fcd0c --- /dev/null +++ b/MobileGL/MG_Util/Converters/MGToGL/FramebufferEnumConverter.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include + +namespace MobileGL { + namespace MG_Util { + GLenum ConvertFramebufferTargetToGLEnum(FramebufferTarget bufferTarget); + GLenum ConvertFramebufferAttachmentTypeToGLEnum(FramebufferAttachmentType attachment); + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp b/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp new file mode 100644 index 00000000..9dcfa4d9 --- /dev/null +++ b/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.cpp @@ -0,0 +1,36 @@ +#include "FramebufferEnumConverter.h" + +namespace MobileGL { + namespace MG_Util { + String ConvertFramebufferTargetToString(FramebufferTarget bufferTarget) { + switch (bufferTarget) { + case FramebufferTarget::Draw: + return "Draw"; + case FramebufferTarget::Read: + return "Read"; + case FramebufferTarget::Unknown: + default: + return "Unknown"; + } + } + + String ConvertFramebufferAttachmentTypeToString(FramebufferAttachmentType attachment) { + if (attachment >= FramebufferAttachmentType::Color0 && attachment <= FramebufferAttachmentType::Color31) { + return "Color" + std::to_string(static_cast(attachment) - + static_cast(FramebufferAttachmentType::Color0)); + } + + switch (attachment) { + case FramebufferAttachmentType::Depth: + return "Depth"; + case FramebufferAttachmentType::Stencil: + return "Stencil"; + case FramebufferAttachmentType::DepthStencil: + return "DepthStencil"; + case FramebufferAttachmentType::Unknown: + default: + return "Unknown"; + } + } + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.h b/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.h new file mode 100644 index 00000000..b8cb31ff --- /dev/null +++ b/MobileGL/MG_Util/Converters/MGToStr/FramebufferEnumConverter.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include + +namespace MobileGL { + namespace MG_Util { + String ConvertFramebufferTargetToString(FramebufferTarget bufferTarget); + String ConvertFramebufferAttachmentTypeToString(FramebufferAttachmentType attachment); + } // namespace MG_Util +} // namespace MobileGL \ No newline at end of file