#include #include #include #include #include #include #include namespace mbgl { namespace gl { gfx::UniqueDrawable DrawableGLBuilder::createDrawable() const { return std::make_unique(drawableName.empty() ? name : drawableName); }; std::unique_ptr DrawableGLBuilder::createSegment(gfx::DrawMode drawMode, SegmentBase&& seg) { return std::make_unique(drawMode, std::move(seg), VertexArray{{nullptr, false}}); } void DrawableGLBuilder::init() { auto& drawableGL = static_cast(*currentDrawable); drawableGL.setVertexAttrId(vertexAttrId); if (impl->rawVerticesCount) { auto raw = impl->rawVertices; drawableGL.setVertices(std::move(raw), impl->rawVerticesCount, impl->rawVerticesType); } else { const auto& verts = impl->vertices.vector(); constexpr auto vertSize = sizeof(std::remove_reference::type::value_type); std::vector raw(verts.size() * vertSize); std::memcpy(raw.data(), verts.data(), raw.size()); drawableGL.setVertices(std::move(raw), verts.size(), gfx::AttributeDataType::Short2); } if (!impl->sharedIndexes && !impl->buildIndexes.empty()) { impl->sharedIndexes = std::make_shared(std::move(impl->buildIndexes)); } assert(impl->sharedIndexes && impl->sharedIndexes->elements()); drawableGL.setIndexData(std::move(impl->sharedIndexes), std::move(impl->segments)); impl->clear(); textures.fill(nullptr); } } // namespace gl } // namespace mbgl