From 4737a45383911fcddf93f0a33e7e25246a5da07e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Tue, 5 Mar 2019 16:07:58 +0100 Subject: [core] move IndexBuffer to gfx namespace --- src/core-files.json | 1 + src/mbgl/gfx/index_buffer.hpp | 22 ++++++++++++++++++++++ src/mbgl/gl/context.cpp | 10 ++++++---- src/mbgl/gl/context.hpp | 14 +++++++------- src/mbgl/gl/index_buffer.hpp | 7 +++++-- src/mbgl/gl/program.hpp | 8 ++++---- src/mbgl/gl/vertex_array.cpp | 7 +++++-- src/mbgl/gl/vertex_array.hpp | 7 ++++++- src/mbgl/programs/collision_box_program.hpp | 4 ++-- src/mbgl/programs/program.hpp | 2 +- src/mbgl/programs/symbol_program.hpp | 2 +- src/mbgl/renderer/buckets/circle_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/debug_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/fill_bucket.hpp | 6 +++--- .../renderer/buckets/fill_extrusion_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/heatmap_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/hillshade_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/line_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/raster_bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/symbol_bucket.hpp | 10 +++++----- src/mbgl/renderer/render_static_data.hpp | 6 +++--- 21 files changed, 85 insertions(+), 49 deletions(-) create mode 100644 src/mbgl/gfx/index_buffer.hpp diff --git a/src/core-files.json b/src/core-files.json index e6d25c6798..7b07dcde5c 100644 --- a/src/core-files.json +++ b/src/core-files.json @@ -500,6 +500,7 @@ "mbgl/gfx/cull_face_mode.hpp": "src/mbgl/gfx/cull_face_mode.hpp", "mbgl/gfx/depth_mode.hpp": "src/mbgl/gfx/depth_mode.hpp", "mbgl/gfx/draw_mode.hpp": "src/mbgl/gfx/draw_mode.hpp", + "mbgl/gfx/index_buffer.hpp": "src/mbgl/gfx/index_buffer.hpp", "mbgl/gfx/index_vector.hpp": "src/mbgl/gfx/index_vector.hpp", "mbgl/gfx/primitives.hpp": "src/mbgl/gfx/primitives.hpp", "mbgl/gfx/stencil_mode.hpp": "src/mbgl/gfx/stencil_mode.hpp", diff --git a/src/mbgl/gfx/index_buffer.hpp b/src/mbgl/gfx/index_buffer.hpp new file mode 100644 index 0000000000..ede949764f --- /dev/null +++ b/src/mbgl/gfx/index_buffer.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include + +namespace mbgl { +namespace gfx { + +class IndexBufferResource { +protected: + IndexBufferResource() = default; +public: + virtual ~IndexBufferResource() = default; +}; + +class IndexBuffer { +public: + std::size_t elements; + std::unique_ptr resource; +}; + +} // namespace gfx +} // namespace mbgl diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index 72d59737f3..6fda803a94 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -261,21 +262,22 @@ void Context::updateVertexBuffer(UniqueBuffer& buffer, const void* data, std::si MBGL_CHECK_ERROR(glBufferSubData(GL_ARRAY_BUFFER, 0, size, data)); } -UniqueBuffer Context::createIndexBuffer(const void* data, std::size_t size, const BufferUsage usage) { +std::unique_ptr +Context::createIndexBuffer(const void* data, std::size_t size, const BufferUsage usage) { BufferID id = 0; MBGL_CHECK_ERROR(glGenBuffers(1, &id)); UniqueBuffer result { std::move(id), { this } }; bindVertexArray = 0; globalVertexArrayState.indexBuffer = result; MBGL_CHECK_ERROR(glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data, static_cast(usage))); - return result; + return std::make_unique(std::move(result)); } -void Context::updateIndexBuffer(UniqueBuffer& buffer, const void* data, std::size_t size) { +void Context::updateIndexBuffer(const gfx::IndexBufferResource& resource, const void* data, std::size_t size) { // Be sure to unbind any existing vertex array object before binding the index buffer // so that we don't mess up another VAO bindVertexArray = 0; - globalVertexArrayState.indexBuffer = buffer; + globalVertexArrayState.indexBuffer = reinterpret_cast(resource).buffer; MBGL_CHECK_ERROR(glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, size, data)); } diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index ad62853495..2fe0d788bf 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include @@ -80,17 +80,17 @@ public: } template - IndexBuffer createIndexBuffer(gfx::IndexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { - return IndexBuffer { + gfx::IndexBuffer createIndexBuffer(gfx::IndexVector&& v, const BufferUsage usage = BufferUsage::StaticDraw) { + return { v.elements(), createIndexBuffer(v.data(), v.bytes(), usage) }; } template - void updateIndexBuffer(IndexBuffer& buffer, gfx::IndexVector&& v) { + void updateIndexBuffer(gfx::IndexBuffer& buffer, gfx::IndexVector&& v) { assert(v.elements() == buffer.elements); - updateIndexBuffer(buffer.buffer, v.data(), v.bytes()); + updateIndexBuffer(*buffer.resource, v.data(), v.bytes()); } template @@ -276,8 +276,8 @@ private: UniqueBuffer createVertexBuffer(const void* data, std::size_t size, const BufferUsage usage); void updateVertexBuffer(UniqueBuffer& buffer, const void* data, std::size_t size); - UniqueBuffer createIndexBuffer(const void* data, std::size_t size, const BufferUsage usage); - void updateIndexBuffer(UniqueBuffer& buffer, const void* data, std::size_t size); + std::unique_ptr createIndexBuffer(const void* data, std::size_t size, const BufferUsage usage); + void updateIndexBuffer(const gfx::IndexBufferResource&, const void* data, std::size_t size); UniqueTexture createTexture(Size size, const void* data, TextureFormat, TextureUnit, TextureType); void updateTexture(TextureID, Size size, const void* data, TextureFormat, TextureUnit, TextureType); UniqueFramebuffer createFramebuffer(); diff --git a/src/mbgl/gl/index_buffer.hpp b/src/mbgl/gl/index_buffer.hpp index 3b66e2b69c..2da25fdb96 100644 --- a/src/mbgl/gl/index_buffer.hpp +++ b/src/mbgl/gl/index_buffer.hpp @@ -1,13 +1,16 @@ #pragma once +#include #include namespace mbgl { namespace gl { -class IndexBuffer { +class IndexBufferResource : public gfx::IndexBufferResource { public: - std::size_t elements; + IndexBufferResource(UniqueBuffer&& buffer_) : buffer(std::move(buffer_)) { + } + UniqueBuffer buffer; }; diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp index 45aaa3eebb..6d3a4ce266 100644 --- a/src/mbgl/gl/program.hpp +++ b/src/mbgl/gl/program.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -120,9 +120,9 @@ public: gfx::ColorMode colorMode, gfx::CullFaceMode cullFaceMode, const UniformValues& uniformValues, - VertexArray& vertexArray, + gl::VertexArray& vertexArray, const AttributeBindings& attributeBindings, - const IndexBuffer& indexBuffer, + const gfx::IndexBuffer& indexBuffer, std::size_t indexOffset, std::size_t indexLength) { static_assert(std::is_same::value, "incompatible draw mode"); @@ -138,7 +138,7 @@ public: Uniforms::bind(uniformsState, uniformValues); vertexArray.bind(context, - indexBuffer.buffer, + indexBuffer, Attributes::toBindingArray(attributeLocations, attributeBindings)); context.draw(drawMode.primitiveType, diff --git a/src/mbgl/gl/vertex_array.cpp b/src/mbgl/gl/vertex_array.cpp index 0892c3b08b..a73e50ae73 100644 --- a/src/mbgl/gl/vertex_array.cpp +++ b/src/mbgl/gl/vertex_array.cpp @@ -1,12 +1,15 @@ #include +#include #include namespace mbgl { namespace gl { -void VertexArray::bind(Context& context, BufferID indexBuffer, const AttributeBindingArray& bindings) { +void VertexArray::bind(Context& context, + const gfx::IndexBuffer& indexBuffer, + const AttributeBindingArray& bindings) { context.bindVertexArray = state->vertexArray; - state->indexBuffer = indexBuffer; + state->indexBuffer = reinterpret_cast(*indexBuffer.resource).buffer; state->bindings.reserve(bindings.size()); for (AttributeLocation location = 0; location < bindings.size(); ++location) { diff --git a/src/mbgl/gl/vertex_array.hpp b/src/mbgl/gl/vertex_array.hpp index 604754f672..70413050b2 100644 --- a/src/mbgl/gl/vertex_array.hpp +++ b/src/mbgl/gl/vertex_array.hpp @@ -9,6 +9,11 @@ #include namespace mbgl { + +namespace gfx { +class IndexBuffer; +} // namespace gfx + namespace gl { class Context; @@ -56,7 +61,7 @@ public: : state(std::move(state_)) { } - void bind(Context&, BufferID indexBuffer, const AttributeBindingArray&); + void bind(Context&, const gfx::IndexBuffer&, const AttributeBindingArray&); private: UniqueVertexArrayState state; diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp index ce672705f8..ef13392323 100644 --- a/src/mbgl/programs/collision_box_program.hpp +++ b/src/mbgl/programs/collision_box_program.hpp @@ -65,7 +65,7 @@ public: const UniformValues& uniformValues, const gl::VertexBuffer>& layoutVertexBuffer, const gl::VertexBuffer>& dynamicVertexBuffer, - const gl::IndexBuffer& indexBuffer, + const gfx::IndexBuffer& indexBuffer, const SegmentVector& segments, const Binders& paintPropertyBinders, const typename PaintProperties::PossiblyEvaluated& currentProperties, @@ -146,7 +146,7 @@ public: const UniformValues& uniformValues, const gl::VertexBuffer>& layoutVertexBuffer, const gl::VertexBuffer>& dynamicVertexBuffer, - const gl::IndexBuffer& indexBuffer, + const gfx::IndexBuffer& indexBuffer, const SegmentVector& segments, const Binders& paintPropertyBinders, const typename PaintProperties::PossiblyEvaluated& currentProperties, diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp index 29d6dd1735..6c9deab89f 100644 --- a/src/mbgl/programs/program.hpp +++ b/src/mbgl/programs/program.hpp @@ -75,7 +75,7 @@ public: gfx::StencilMode stencilMode, gfx::ColorMode colorMode, gfx::CullFaceMode cullFaceMode, - const gl::IndexBuffer& indexBuffer, + const gfx::IndexBuffer& indexBuffer, const SegmentVector& segments, const typename AllUniforms::Values& allUniformValues, const typename Attributes::Bindings& allAttributeBindings, diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp index 1bb2580c1e..53c65bbecd 100644 --- a/src/mbgl/programs/symbol_program.hpp +++ b/src/mbgl/programs/symbol_program.hpp @@ -310,7 +310,7 @@ public: gfx::StencilMode stencilMode, gfx::ColorMode colorMode, gfx::CullFaceMode cullFaceMode, - const gl::IndexBuffer& indexBuffer, + const gfx::IndexBuffer& indexBuffer, const SegmentVector& segments, const typename AllUniforms::Values& allUniformValues, const typename Attributes::Bindings& allAttributeBindings, diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp index 6e0011a4cd..9495a9650c 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.hpp +++ b/src/mbgl/renderer/buckets/circle_bucket.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -35,7 +35,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; std::map paintPropertyBinders; diff --git a/src/mbgl/renderer/buckets/debug_bucket.hpp b/src/mbgl/renderer/buckets/debug_bucket.hpp index 92d575a3cd..e30d580df4 100644 --- a/src/mbgl/renderer/buckets/debug_bucket.hpp +++ b/src/mbgl/renderer/buckets/debug_bucket.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include namespace mbgl { @@ -35,7 +35,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; }; } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp index 41c3e2004f..dc7180ee3d 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_bucket.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -47,8 +47,8 @@ public: SegmentVector triangleSegments; optional> vertexBuffer; - optional lineIndexBuffer; - optional triangleIndexBuffer; + optional lineIndexBuffer; + optional triangleIndexBuffer; std::map paintPropertyBinders; }; diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp index c3ea537de5..840ed70b4c 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,7 +44,7 @@ public: SegmentVector triangleSegments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; std::unordered_map paintPropertyBinders; }; diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp index da60904f22..ad0ad7b99d 100644 --- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp +++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -34,7 +34,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; std::map paintPropertyBinders; diff --git a/src/mbgl/renderer/buckets/hillshade_bucket.hpp b/src/mbgl/renderer/buckets/hillshade_bucket.hpp index f3c13a4c63..89da41d174 100644 --- a/src/mbgl/renderer/buckets/hillshade_bucket.hpp +++ b/src/mbgl/renderer/buckets/hillshade_bucket.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include @@ -51,7 +51,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; private: DEMData demdata; bool prepared = false; diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp index 4f46385a27..1faf775d55 100644 --- a/src/mbgl/renderer/buckets/line_bucket.hpp +++ b/src/mbgl/renderer/buckets/line_bucket.hpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include #include @@ -48,7 +48,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; std::map paintPropertyBinders; diff --git a/src/mbgl/renderer/buckets/raster_bucket.hpp b/src/mbgl/renderer/buckets/raster_bucket.hpp index 3608f91626..510dbf1f8f 100644 --- a/src/mbgl/renderer/buckets/raster_bucket.hpp +++ b/src/mbgl/renderer/buckets/raster_bucket.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include @@ -37,7 +37,7 @@ public: SegmentVector segments; optional> vertexBuffer; - optional indexBuffer; + optional indexBuffer; }; } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 2d58a7ce0f..c28a2cbc95 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -98,7 +98,7 @@ public: optional> vertexBuffer; optional>> dynamicVertexBuffer; optional>> opacityVertexBuffer; - optional indexBuffer; + optional indexBuffer; } text; std::unique_ptr iconSizeBinder; @@ -115,7 +115,7 @@ public: optional> vertexBuffer; optional>> dynamicVertexBuffer; optional>> opacityVertexBuffer; - optional indexBuffer; + optional indexBuffer; } icon; struct CollisionBuffer { @@ -129,12 +129,12 @@ public: struct CollisionBoxBuffer : public CollisionBuffer { gfx::IndexVector lines; - optional indexBuffer; + optional indexBuffer; } collisionBox; struct CollisionCircleBuffer : public CollisionBuffer { gfx::IndexVector triangles; - optional indexBuffer; + optional indexBuffer; } collisionCircle; uint32_t bucketInstanceId = 0; diff --git a/src/mbgl/renderer/render_static_data.hpp b/src/mbgl/renderer/render_static_data.hpp index 73e92c85b9..3d4f3e7dbe 100644 --- a/src/mbgl/renderer/render_static_data.hpp +++ b/src/mbgl/renderer/render_static_data.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include @@ -20,8 +20,8 @@ public: gl::VertexBuffer rasterVertexBuffer; gl::VertexBuffer extrusionTextureVertexBuffer; - gl::IndexBuffer quadTriangleIndexBuffer; - gl::IndexBuffer tileBorderIndexBuffer; + gfx::IndexBuffer quadTriangleIndexBuffer; + gfx::IndexBuffer tileBorderIndexBuffer; SegmentVector tileTriangleSegments; SegmentVector tileBorderSegments; -- cgit v1.2.1