diff --git a/MobileGL/MG_State/GLState/Core.cpp b/MobileGL/MG_State/GLState/Core.cpp index 77a04028..9c71c88f 100644 --- a/MobileGL/MG_State/GLState/Core.cpp +++ b/MobileGL/MG_State/GLState/Core.cpp @@ -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 GLContext::GenRenderbufferNames(Uint number) { + return m_renderbufferState.GenerateNames(number); + } + + SharedPtr GLContext::GetRenderbufferObject(Uint index) { + return m_renderbufferState.GetRenderbufferObject(index); + } + + BindingSlot& GLContext::GetRenderbufferBindingSlot(RenderbufferTarget target) { + return m_renderbufferState.GetBindingSlot(target); + } + + SharedPtr 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; diff --git a/MobileGL/MG_State/GLState/Core.h b/MobileGL/MG_State/GLState/Core.h index 8bafd22d..41c5c269 100644 --- a/MobileGL/MG_State/GLState/Core.h +++ b/MobileGL/MG_State/GLState/Core.h @@ -1,14 +1,16 @@ #pragma once #include -#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 GenRenderbufferNames(Uint number); + SharedPtr GetRenderbufferObject(Uint index); + BindingSlot& GetRenderbufferBindingSlot(RenderbufferTarget target); + SharedPtr 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 diff --git a/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.cpp b/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.cpp index 4c88c2cf..a1bdd6ed 100644 --- a/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.cpp +++ b/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.cpp @@ -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 texture, Int level) : m_texture(texture), m_textureLevel(level) {} - FramebufferAttachment::FramebufferAttachment(SharedPtr renderbuffer) + FramebufferAttachment::FramebufferAttachment(SharedPtr 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 FramebufferAttachment::GetRenderbuffer() const { + SharedPtr 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(m_texture.get()), "Texture object here should always be an object with mipmap"); + MOBILEGL_ASSERT(nullptr != dynamic_cast(m_texture.get()), + "Texture object here should always be an object with mipmap"); auto textureMipmapObject = static_cast(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 renderbuffer) { + std::shared_ptr renderbuffer) { m_attachments[static_cast(type)] = FramebufferAttachment(renderbuffer); m_drawBuffersDirty = true; } diff --git a/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.h b/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.h index 67fe8bd9..d265752a 100644 --- a/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.h +++ b/MobileGL/MG_State/GLState/FramebufferState/FramebufferObject.h @@ -1,7 +1,7 @@ #pragma once -#include "MG_Util/Types.h" #include #include +#include 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 texture, Int level = 0); - explicit FramebufferAttachment(SharedPtr renderbuffer); + explicit FramebufferAttachment(SharedPtr renderbuffer); explicit FramebufferAttachment(Bool IsValid = true); Bool IsTexture() const; Bool IsRenderbuffer() const; Bool IsEmpty() const; SharedPtr GetTexture() const; - SharedPtr GetRenderbuffer() const; + SharedPtr GetRenderbuffer() const; Int GetTextureLevel() const; Bool IsComplete() const; IntVec3 GetSize() const; @@ -82,7 +80,7 @@ namespace MobileGL { private: SharedPtr m_texture = nullptr; - SharedPtr m_renderbuffer = nullptr; + SharedPtr m_renderbuffer = nullptr; Int m_textureLevel = 0; Bool m_isValid = true; }; @@ -96,7 +94,7 @@ namespace MobileGL { void AttachTexture(FramebufferAttachmentType type, SharedPtr texture, int level = 0); void AttachRenderbuffer(FramebufferAttachmentType type, - std::shared_ptr renderbuffer); + std::shared_ptr renderbuffer); void Detach(FramebufferAttachmentType type); const FramebufferAttachment& GetAttachment(FramebufferAttachmentType type) const; const Array