From 2f67620a6ee54242330b0290fb8a29c0d5ee9a7b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sun, 2 Nov 2025 23:50:50 +0800 Subject: [PATCH] [Fix]: some not-added stuff --- MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp | 16 ++++++++++++ MobileGL/MG_Impl/GLImpl/Buffer/Validators.h | 1 + MobileGL/MG_Util/Types.h | 26 ++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp b/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp index 8c4d3b43..b5050f3d 100644 --- a/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp +++ b/MobileGL/MG_Impl/GLImpl/Buffer/Validators.cpp @@ -31,6 +31,22 @@ namespace MobileGL::MG_Impl::GLImpl { return true; } + Bool ValidateBufferBindingPointTarget(BufferTarget target) { + if (target != BufferTarget::Uniform && target != BufferTarget::AtomicCounter && + target != BufferTarget::TransformFeedback && target != BufferTarget::ShaderStorage) { + using namespace MG_Util; + String bufferTargetStr = ConvertBufferTargetToString(target); + String glTargetStr = ConvertGLEnumToString(ConvertBufferTargetToGLEnum(target)); + MG_State::pGLContext->RecordError( + ErrorCode::InvalidEnum, + MakeShared( + "MG_Impl/GLImpl/BufferImpl", "ValidateBufferTarget", + std::format("Target {} ({}) is not valid.", bufferTargetStr, glTargetStr))); + return false; + } + return true; + } + Bool ValidateBufferName(Uint index, Bool allowZero) { if (index == 0) { if (allowZero) return true; diff --git a/MobileGL/MG_Impl/GLImpl/Buffer/Validators.h b/MobileGL/MG_Impl/GLImpl/Buffer/Validators.h index 1b4b6cee..d02b5f53 100644 --- a/MobileGL/MG_Impl/GLImpl/Buffer/Validators.h +++ b/MobileGL/MG_Impl/GLImpl/Buffer/Validators.h @@ -8,5 +8,6 @@ namespace MobileGL::MG_Impl::GLImpl { Bool ValidateBufferName(Uint index, Bool allowZero = false); Bool ValidateBufferUsage(BufferUsage usage); Bool ValidateBufferMappingAccess(Flags accessBits); + Bool ValidateBufferBindingPointTarget(BufferTarget target); } // namespace BufferImpl } // namespace MobileGL::MG_Impl::GLImpl \ No newline at end of file diff --git a/MobileGL/MG_Util/Types.h b/MobileGL/MG_Util/Types.h index defa4b49..d189ab25 100644 --- a/MobileGL/MG_Util/Types.h +++ b/MobileGL/MG_Util/Types.h @@ -101,7 +101,7 @@ namespace MobileGL { // represents a range of [start, end) struct Range1D { SizeT start = 0; - SizeT end = 0; + SizeT end = ~0u; void Update(SizeT newStart, SizeT newEnd) { assert(newStart <= newEnd); @@ -147,6 +147,30 @@ namespace MobileGL { SharedPtr m_boundObject; }; + template + class BindingSlotRange1D: public BindingSlot { + public: + using TargetEnum = typename ObjectType::TargetEnum; + + BindingSlotRange1D() : BindingSlot() {} + explicit BindingSlotRange1D(TargetEnum target, const Range1D& range = Range1D()) + : BindingSlot(target), m_range(range) {} + + Range1D GetRange() const { + return m_range; + } + + void SetRange(const Range1D& range) { + m_range = range; + } + + void ClearRange() { + m_range = Range1D(); + } + private: + Range1D m_range; + }; + struct Version { Int Major; Int Minor;