From 839f4687aacb98440f85660120173c9b9895f46a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 20 Mar 2019 13:48:14 +0100 Subject: [core] gl::RenderbufferType -> gfx::RenderbufferPixelType --- src/mbgl/gfx/types.hpp | 6 ++++++ src/mbgl/gl/context.cpp | 32 ++++++++------------------------ src/mbgl/gl/context.hpp | 20 ++++++++++---------- src/mbgl/gl/enum.cpp | 32 ++++++++++++++++++++++++++++++++ src/mbgl/gl/renderbuffer.hpp | 5 +++-- src/mbgl/gl/types.hpp | 10 ---------- src/mbgl/renderer/render_static_data.hpp | 2 +- src/mbgl/renderer/renderer_impl.cpp | 2 +- src/mbgl/util/offscreen_texture.cpp | 6 +++--- src/mbgl/util/offscreen_texture.hpp | 2 +- 10 files changed, 65 insertions(+), 52 deletions(-) (limited to 'src/mbgl') diff --git a/src/mbgl/gfx/types.hpp b/src/mbgl/gfx/types.hpp index da2bc14ddd..24209c5cc5 100644 --- a/src/mbgl/gfx/types.hpp +++ b/src/mbgl/gfx/types.hpp @@ -171,5 +171,11 @@ enum class TextureWrapType : bool { Repeat, }; +enum class RenderbufferPixelType : uint8_t { + RGBA, + Depth, + DepthStencil, +}; + } // namespace gfx } // namespace mbgl diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index 6cee364379..a1feafbedd 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -23,22 +23,6 @@ using namespace platform; static_assert(underlying_type(ShaderType::Vertex) == GL_VERTEX_SHADER, "OpenGL type mismatch"); static_assert(underlying_type(ShaderType::Fragment) == GL_FRAGMENT_SHADER, "OpenGL type mismatch"); -#if not MBGL_USE_GLES2 -static_assert(underlying_type(RenderbufferType::RGBA) == GL_RGBA8, "OpenGL type mismatch"); -#else -static_assert(underlying_type(RenderbufferType::RGBA) == GL_RGBA8_OES, "OpenGL type mismatch"); -#endif // MBGL_USE_GLES2 -#if not MBGL_USE_GLES2 -static_assert(underlying_type(RenderbufferType::DepthStencil) == GL_DEPTH24_STENCIL8, "OpenGL type mismatch"); -#else -static_assert(underlying_type(RenderbufferType::DepthStencil) == GL_DEPTH24_STENCIL8_OES, "OpenGL type mismatch"); -#endif // MBGL_USE_GLES2 -#if not MBGL_USE_GLES2 -static_assert(underlying_type(RenderbufferType::DepthComponent) == GL_DEPTH_COMPONENT, "OpenGL type mismatch"); -#else -static_assert(underlying_type(RenderbufferType::DepthComponent) == GL_DEPTH_COMPONENT16, "OpenGL type mismatch"); -#endif // MBGL_USE_GLES2 - static_assert(std::is_same::value, "OpenGL type mismatch"); static_assert(std::is_same::value, "OpenGL type mismatch"); static_assert(std::is_same::value, "OpenGL type mismatch"); @@ -352,14 +336,14 @@ UniqueFramebuffer Context::createFramebuffer() { return UniqueFramebuffer{ std::move(id), { this } }; } -UniqueRenderbuffer Context::createRenderbuffer(const RenderbufferType type, const Size size) { +UniqueRenderbuffer Context::createRenderbuffer(const gfx::RenderbufferPixelType type, const Size size) { RenderbufferID id = 0; MBGL_CHECK_ERROR(glGenRenderbuffers(1, &id)); UniqueRenderbuffer renderbuffer{ std::move(id), { this } }; bindRenderbuffer = renderbuffer; MBGL_CHECK_ERROR( - glRenderbufferStorage(GL_RENDERBUFFER, static_cast(type), size.width, size.height)); + glRenderbufferStorage(GL_RENDERBUFFER, Enum::to(type), size.width, size.height)); bindRenderbuffer = 0; return renderbuffer; } @@ -433,7 +417,7 @@ void checkFramebuffer() { } void bindDepthStencilRenderbuffer( - const Renderbuffer& depthStencil) { + const Renderbuffer& depthStencil) { #ifdef GL_DEPTH_STENCIL_ATTACHMENT MBGL_CHECK_ERROR(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthStencil.renderbuffer)); @@ -448,8 +432,8 @@ void bindDepthStencilRenderbuffer( } // namespace Framebuffer -Context::createFramebuffer(const Renderbuffer& color, - const Renderbuffer& depthStencil) { +Context::createFramebuffer(const Renderbuffer& color, + const Renderbuffer& depthStencil) { if (color.size != depthStencil.size) { throw std::runtime_error("Renderbuffer size mismatch"); } @@ -462,7 +446,7 @@ Context::createFramebuffer(const Renderbuffer& color, return { color.size, std::move(fbo) }; } -Framebuffer Context::createFramebuffer(const Renderbuffer& color) { +Framebuffer Context::createFramebuffer(const Renderbuffer& color) { auto fbo = createFramebuffer(); bindFramebuffer = fbo; MBGL_CHECK_ERROR(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, @@ -473,7 +457,7 @@ Framebuffer Context::createFramebuffer(const Renderbuffer& depthStencil) { + const Renderbuffer& depthStencil) { if (color.size != depthStencil.size) { throw std::runtime_error("Renderbuffer size mismatch"); } @@ -499,7 +483,7 @@ Framebuffer Context::createFramebuffer(const gfx::Texture& color) { Framebuffer Context::createFramebuffer(const gfx::Texture& color, - const Renderbuffer& depthTarget) { + const Renderbuffer& depthTarget) { if (color.size != depthTarget.size) { throw std::runtime_error("Renderbuffer size mismatch"); } diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index d46727cb7a..b16a9994bf 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -60,23 +60,23 @@ public: #endif optional> getBinaryProgram(ProgramID) const; - template + template Renderbuffer createRenderbuffer(const Size size) { - static_assert(type == RenderbufferType::RGBA || - type == RenderbufferType::DepthStencil || - type == RenderbufferType::DepthComponent, + static_assert(type == gfx::RenderbufferPixelType::RGBA || + type == gfx::RenderbufferPixelType::DepthStencil || + type == gfx::RenderbufferPixelType::Depth, "invalid renderbuffer type"); return { size, createRenderbuffer(type, size) }; } - Framebuffer createFramebuffer(const Renderbuffer&, - const Renderbuffer&); - Framebuffer createFramebuffer(const Renderbuffer&); + Framebuffer createFramebuffer(const Renderbuffer&, + const Renderbuffer&); + Framebuffer createFramebuffer(const Renderbuffer&); Framebuffer createFramebuffer(const gfx::Texture&, - const Renderbuffer&); + const Renderbuffer&); Framebuffer createFramebuffer(const gfx::Texture&); Framebuffer createFramebuffer(const gfx::Texture&, - const Renderbuffer&); + const Renderbuffer&); template createDrawScopeResource() override; UniqueFramebuffer createFramebuffer(); - UniqueRenderbuffer createRenderbuffer(RenderbufferType, Size size); + UniqueRenderbuffer createRenderbuffer(gfx::RenderbufferPixelType, Size size); std::unique_ptr readFramebuffer(Size, gfx::TexturePixelType, bool flip); #if not MBGL_USE_GLES2 void drawPixels(Size size, const void* data, gfx::TexturePixelType); diff --git a/src/mbgl/gl/enum.cpp b/src/mbgl/gl/enum.cpp index 673d43b5d6..5f8cd77ad6 100644 --- a/src/mbgl/gl/enum.cpp +++ b/src/mbgl/gl/enum.cpp @@ -283,5 +283,37 @@ platform::GLenum Enum::to(const gfx::TextureChannel return GL_INVALID_ENUM; } +template <> +gfx::RenderbufferPixelType Enum::from(const platform::GLint value) { + switch (value) { +#if not MBGL_USE_GLES2 + case GL_RGBA8: return gfx::RenderbufferPixelType::RGBA; + case GL_DEPTH_COMPONENT: return gfx::RenderbufferPixelType::Depth; + case GL_DEPTH24_STENCIL8: return gfx::RenderbufferPixelType::DepthStencil; +#else + case GL_RGBA8_OES: return gfx::RenderbufferPixelType::RGBA; + case GL_DEPTH_COMPONENT16: return gfx::RenderbufferPixelType::Depth; + case GL_DEPTH24_STENCIL8_OES: return gfx::RenderbufferPixelType::DepthStencil; +#endif + } + return {}; +} + +template <> +platform::GLenum Enum::to(const gfx::RenderbufferPixelType value) { + switch (value) { +#if not MBGL_USE_GLES2 + case gfx::RenderbufferPixelType::RGBA: return GL_RGBA8; + case gfx::RenderbufferPixelType::Depth: return GL_DEPTH_COMPONENT; + case gfx::RenderbufferPixelType::DepthStencil: return GL_DEPTH24_STENCIL8; +#else + case gfx::RenderbufferPixelType::RGBA: return GL_RGBA8_OES; + case gfx::RenderbufferPixelType::Depth: return GL_DEPTH_COMPONENT16; + case gfx::RenderbufferPixelType::DepthStencil: return GL_DEPTH24_STENCIL8_OES; +#endif + } + return GL_INVALID_ENUM; +} + } // namespace gl } // namespace mbgl diff --git a/src/mbgl/gl/renderbuffer.hpp b/src/mbgl/gl/renderbuffer.hpp index 0592557a7f..a761d17241 100644 --- a/src/mbgl/gl/renderbuffer.hpp +++ b/src/mbgl/gl/renderbuffer.hpp @@ -1,19 +1,20 @@ #pragma once +#include #include #include namespace mbgl { namespace gl { -template +template class Renderbuffer { public: Renderbuffer(Size size_, UniqueRenderbuffer renderbuffer_, bool dirty_ = false) : size(std::move(size_)), renderbuffer(std::move(renderbuffer_)), dirty(dirty_) { } - using type = std::integral_constant; + using type = std::integral_constant; Size size; UniqueRenderbuffer renderbuffer; diff --git a/src/mbgl/gl/types.hpp b/src/mbgl/gl/types.hpp index 5cb486f0c9..ef7054a24f 100644 --- a/src/mbgl/gl/types.hpp +++ b/src/mbgl/gl/types.hpp @@ -30,16 +30,6 @@ enum class ShaderType : uint32_t { Fragment = 0x8B30 }; -enum class RenderbufferType : uint32_t { - RGBA = 0x8058, - DepthStencil = 0x88F0, -#if not MBGL_USE_GLES2 - DepthComponent = 0x1902, // GL_DEPTH_COMPONENT -#else - DepthComponent = 0x81A5, // GL_DEPTH_COMPONENT16 -#endif // MBGL_USE_GLES2 -}; - struct PixelStorageType { int32_t alignment; }; diff --git a/src/mbgl/renderer/render_static_data.hpp b/src/mbgl/renderer/render_static_data.hpp index 23f632bc12..b57139b783 100644 --- a/src/mbgl/renderer/render_static_data.hpp +++ b/src/mbgl/renderer/render_static_data.hpp @@ -32,7 +32,7 @@ public: SegmentVector rasterSegments; SegmentVector extrusionTextureSegments; - optional> depthRenderbuffer; + optional> depthRenderbuffer; bool has3D = false; Size backendSize; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 9446cbc194..ea493b49eb 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -400,7 +400,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { if (!parameters.staticData.depthRenderbuffer || parameters.staticData.depthRenderbuffer->size != parameters.staticData.backendSize) { parameters.staticData.depthRenderbuffer = - glContext.createRenderbuffer(parameters.staticData.backendSize); + glContext.createRenderbuffer(parameters.staticData.backendSize); } parameters.staticData.depthRenderbuffer->shouldClear(true); diff --git a/src/mbgl/util/offscreen_texture.cpp b/src/mbgl/util/offscreen_texture.cpp index 6bc09c7b16..be17aa06aa 100644 --- a/src/mbgl/util/offscreen_texture.cpp +++ b/src/mbgl/util/offscreen_texture.cpp @@ -17,7 +17,7 @@ public: } Impl(gl::Context& context_, const Size size_, - gl::Renderbuffer& depth_, + gl::Renderbuffer& depth_, const gfx::TextureChannelDataType type_) : context(context_), size(std::move(size_)), depth(&depth_), type(type_) { assert(!size.isEmpty()); @@ -58,7 +58,7 @@ private: const Size size; optional framebuffer; optional texture; - gl::Renderbuffer* depth = nullptr; + gl::Renderbuffer* depth = nullptr; const gfx::TextureChannelDataType type; }; @@ -72,7 +72,7 @@ OffscreenTexture::OffscreenTexture(gfx::Context& context, OffscreenTexture::OffscreenTexture(gfx::Context& context, const Size size, - gl::Renderbuffer& renderbuffer, + gl::Renderbuffer& renderbuffer, const gfx::TextureChannelDataType type) // TODO: remove cast : impl(std::make_unique(reinterpret_cast(context), std::move(size), renderbuffer, type)) { diff --git a/src/mbgl/util/offscreen_texture.hpp b/src/mbgl/util/offscreen_texture.hpp index f4459556b8..1f470bd1b0 100644 --- a/src/mbgl/util/offscreen_texture.hpp +++ b/src/mbgl/util/offscreen_texture.hpp @@ -18,7 +18,7 @@ public: gfx::TextureChannelDataType type = gfx::TextureChannelDataType::UnsignedByte); OffscreenTexture(gfx::Context&, Size size, - gl::Renderbuffer&, + gl::Renderbuffer&, gfx::TextureChannelDataType type = gfx::TextureChannelDataType::UnsignedByte); ~OffscreenTexture(); OffscreenTexture(OffscreenTexture&&); -- cgit v1.2.1