[Feat] (MG_State): Integration with RenderbufferState.

This commit is contained in:
BZLZHH
2025-12-14 09:49:55 +08:00
parent 5bb9faaaa5
commit 711e427b76
4 changed files with 57 additions and 33 deletions
+26
View File
@@ -1,4 +1,5 @@
#include "Core.h"
#include "MG_State/GLState/RenderbufferState/RenderbufferObject.h"
namespace MobileGL {
namespace MG_State {
@@ -368,6 +369,31 @@ namespace MobileGL {
Bool GLContext::ValidateSamplerObject(Uint index) const {
return m_samplerState.ValidateSamplerObject(index);
}
// Renderbuffer
Vector<Uint> GLContext::GenRenderbufferNames(Uint number) {
return m_renderbufferState.GenerateNames(number);
}
SharedPtr<RenderbufferObject> GLContext::GetRenderbufferObject(Uint index) {
return m_renderbufferState.GetRenderbufferObject(index);
}
BindingSlot<RenderbufferObject>& GLContext::GetRenderbufferBindingSlot(RenderbufferTarget target) {
return m_renderbufferState.GetBindingSlot(target);
}
SharedPtr<RenderbufferObject> GLContext::CreateRenderbufferObject(Uint index) {
return m_renderbufferState.CreateRenderbufferObject(index);
}
void GLContext::MarkRenderbufferObjectForDeletion(Uint index) {
m_renderbufferState.MarkRenderbufferObjectForDeletion(index);
}
Bool GLContext::ValidateRenderbufferName(Uint index) const {
return m_renderbufferState.ValidateName(index);
}
} // namespace GLState
GLState::GLContext* pGLContext;
+15 -17
View File
@@ -1,14 +1,16 @@
#pragma once
#include <Includes.h>
#include "MG_Util/Types.h"
#include "ErrorState/Error.h"
#include "BufferState/BufferState.h"
#include "MG_State/GLState/RenderbufferState/RenderbufferObject.h"
#include "MG_State/GLState/RenderbufferState/RenderbufferState.h"
#include "RenderState/RenderState.h"
#include "ProgramState/ProgramState.h"
#include "SamplerState/SamplerState.h"
#include "TextureState/TextureState.h"
#include "FramebufferState/FramebufferState.h"
#include "VertexArrayState/VertexArrayState.h"
#include "MG_State/GLState/RenderState/RenderState.h"
#include "RenderbufferState/RenderbufferState.h"
namespace MobileGL {
namespace MG_State {
@@ -118,30 +120,26 @@ namespace MobileGL {
Bool ValidateSamplerName(Uint index) const;
Bool ValidateSamplerObject(Uint index) const;
// Renderbuffer
Vector<Uint> GenRenderbufferNames(Uint number);
SharedPtr<RenderbufferObject> GetRenderbufferObject(Uint index);
BindingSlot<RenderbufferObject>& GetRenderbufferBindingSlot(RenderbufferTarget target);
SharedPtr<RenderbufferObject> CreateRenderbufferObject(Uint index);
void MarkRenderbufferObjectForDeletion(Uint index);
Bool ValidateRenderbufferName(Uint index) const;
Bool ValidateRenderbufferObject(Uint index) const;
private:
// Error
// State Components
ErrorState m_errorState;
// Buffer
BufferState m_bufferState;
// VertexArray
VertexArrayState m_vertexArrayState;
// Texture
TextureState m_textureState;
// Program
ProgramState m_programState;
// RenderState
RenderState m_renderState;
// Framebuffer
FramebufferState m_framebufferState;
// Sampler
SamplerState m_samplerState;
RenderbufferState m_renderbufferState;
};
} // namespace GLState
@@ -1,4 +1,5 @@
#include "FramebufferObject.h"
#include "MG_Util/Types.h"
namespace MobileGL {
namespace MG_State {
@@ -7,7 +8,7 @@ namespace MobileGL {
FramebufferAttachment::FramebufferAttachment(SharedPtr<MG_State::GLState::ITextureObject> texture,
Int level)
: m_texture(texture), m_textureLevel(level) {}
FramebufferAttachment::FramebufferAttachment(SharedPtr<RenderbufferObjectStub> renderbuffer)
FramebufferAttachment::FramebufferAttachment(SharedPtr<RenderbufferObject> renderbuffer)
: m_renderbuffer(renderbuffer) {}
FramebufferAttachment::FramebufferAttachment(Bool IsValid) : m_texture(nullptr), m_renderbuffer(nullptr) {
m_isValid = IsValid;
@@ -18,7 +19,7 @@ namespace MobileGL {
}
Bool FramebufferAttachment::IsRenderbuffer() const {
return false;
return m_renderbuffer != nullptr;
}
Bool FramebufferAttachment::IsEmpty() const {
@@ -29,7 +30,7 @@ namespace MobileGL {
return m_texture;
}
SharedPtr<RenderbufferObjectStub> FramebufferAttachment::GetRenderbuffer() const {
SharedPtr<RenderbufferObject> FramebufferAttachment::GetRenderbuffer() const {
return m_renderbuffer;
}
@@ -42,8 +43,8 @@ namespace MobileGL {
Bool complete = m_texture->IsComplete();
return complete;
} else if (IsRenderbuffer()) {
// TODO
return false;
Bool complete = m_renderbuffer->IsAllocated();
return complete;
}
return false;
@@ -52,13 +53,14 @@ namespace MobileGL {
IntVec3 FramebufferAttachment::GetSize() const {
if (IsTexture()) {
// TODO: get correct upload target
MOBILEGL_ASSERT(nullptr != dynamic_cast<MG_State::GLState::TextureObjectMipmap*>(m_texture.get()), "Texture object here should always be an object with mipmap");
MOBILEGL_ASSERT(nullptr != dynamic_cast<MG_State::GLState::TextureObjectMipmap*>(m_texture.get()),
"Texture object here should always be an object with mipmap");
auto textureMipmapObject = static_cast<MG_State::GLState::TextureObjectMipmap*>(m_texture.get());
return textureMipmapObject->GetMipmapTexelSize(TextureUploadTarget::Texture2D, m_textureLevel);
} else if (IsRenderbuffer()) {
// TODO
return IntVec3(m_renderbuffer->GetWidth(), m_renderbuffer->GetHeight(), 1);
}
return {0, 0};
return {0, 0, 0};
}
Bool FramebufferAttachment::IsValid() const {
@@ -79,7 +81,7 @@ namespace MobileGL {
}
void FramebufferObject::AttachRenderbuffer(FramebufferAttachmentType type,
std::shared_ptr<RenderbufferObjectStub> renderbuffer) {
std::shared_ptr<RenderbufferObject> renderbuffer) {
m_attachments[static_cast<SizeT>(type)] = FramebufferAttachment(renderbuffer);
m_drawBuffersDirty = true;
}
@@ -1,7 +1,7 @@
#pragma once
#include "MG_Util/Types.h"
#include <Includes.h>
#include <MG_State/GLState/TextureState/TextureObject.h>
#include <MG_State/GLState/RenderbufferState/RenderbufferObject.h>
namespace MobileGL {
enum class FramebufferTarget {
@@ -61,20 +61,18 @@ namespace MobileGL {
namespace MG_State {
namespace GLState {
class RenderbufferObjectStub {}; // TODO
class FramebufferAttachment {
public:
// TODO: add Renderbuffer when it is implemented
explicit FramebufferAttachment(SharedPtr<MG_State::GLState::ITextureObject> texture, Int level = 0);
explicit FramebufferAttachment(SharedPtr<RenderbufferObjectStub> renderbuffer);
explicit FramebufferAttachment(SharedPtr<RenderbufferObject> renderbuffer);
explicit FramebufferAttachment(Bool IsValid = true);
Bool IsTexture() const;
Bool IsRenderbuffer() const;
Bool IsEmpty() const;
SharedPtr<MG_State::GLState::ITextureObject> GetTexture() const;
SharedPtr<RenderbufferObjectStub> GetRenderbuffer() const;
SharedPtr<RenderbufferObject> GetRenderbuffer() const;
Int GetTextureLevel() const;
Bool IsComplete() const;
IntVec3 GetSize() const;
@@ -82,7 +80,7 @@ namespace MobileGL {
private:
SharedPtr<MG_State::GLState::ITextureObject> m_texture = nullptr;
SharedPtr<RenderbufferObjectStub> m_renderbuffer = nullptr;
SharedPtr<RenderbufferObject> m_renderbuffer = nullptr;
Int m_textureLevel = 0;
Bool m_isValid = true;
};
@@ -96,7 +94,7 @@ namespace MobileGL {
void AttachTexture(FramebufferAttachmentType type, SharedPtr<ITextureObject> texture, int level = 0);
void AttachRenderbuffer(FramebufferAttachmentType type,
std::shared_ptr<RenderbufferObjectStub> renderbuffer);
std::shared_ptr<RenderbufferObject> renderbuffer);
void Detach(FramebufferAttachmentType type);
const FramebufferAttachment& GetAttachment(FramebufferAttachmentType type) const;
const Array<FramebufferAttachment,