diff options
Diffstat (limited to 'src/mbgl/renderer')
25 files changed, 88 insertions, 66 deletions
diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp index b2d8d8ee98..bf54205978 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.cpp +++ b/src/mbgl/renderer/buckets/circle_bucket.cpp @@ -99,7 +99,7 @@ void CircleBucket::addFeature(const GeometryTileFeature& feature, } template <class Property> -static float get(const RenderCircleLayer& layer, const std::map<std::string, CircleProgram::PaintPropertyBinders>& paintPropertyBinders) { +static float get(const RenderCircleLayer& layer, const std::map<std::string, CircleProgram::Binders>& paintPropertyBinders) { auto it = paintPropertyBinders.find(layer.getID()); if (it == paintPropertyBinders.end() || !it->second.statistics<Property>().max()) { return layer.evaluated.get<Property>().constantOr(Property::defaultValue()); diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp index dad8b8b377..9082e891e4 100644 --- a/src/mbgl/renderer/buckets/circle_bucket.hpp +++ b/src/mbgl/renderer/buckets/circle_bucket.hpp @@ -37,7 +37,7 @@ public: optional<gl::VertexBuffer<CircleLayoutVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; - std::map<std::string, CircleProgram::PaintPropertyBinders> paintPropertyBinders; + std::map<std::string, CircleProgram::Binders> paintPropertyBinders; const MapMode mode; }; diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp index 2724e5b7d3..225d4c661d 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_bucket.hpp @@ -50,7 +50,7 @@ public: optional<gl::IndexBuffer<gl::Lines>> lineIndexBuffer; optional<gl::IndexBuffer<gl::Triangles>> triangleIndexBuffer; - std::map<std::string, FillProgram::PaintPropertyBinders> paintPropertyBinders; + std::map<std::string, FillProgram::Binders> paintPropertyBinders; }; } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp index 42344c4b8d..486eb221e5 100644 --- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp +++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp @@ -46,7 +46,7 @@ public: optional<gl::VertexBuffer<FillExtrusionLayoutVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; - std::unordered_map<std::string, FillExtrusionProgram::PaintPropertyBinders> paintPropertyBinders; + std::unordered_map<std::string, FillExtrusionProgram::Binders> paintPropertyBinders; }; } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp index 9bec9208a8..8948f52acb 100644 --- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp +++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp @@ -36,7 +36,7 @@ public: optional<gl::VertexBuffer<HeatmapLayoutVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; - std::map<std::string, HeatmapProgram::PaintPropertyBinders> paintPropertyBinders; + std::map<std::string, HeatmapProgram::Binders> paintPropertyBinders; const MapMode mode; }; diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index 0375c3d089..f17a309163 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -528,7 +528,7 @@ bool LineBucket::supportsLayer(const style::Layer::Impl& impl) const { } template <class Property> -static float get(const RenderLineLayer& layer, const std::map<std::string, LineProgram::PaintPropertyBinders>& paintPropertyBinders) { +static float get(const RenderLineLayer& layer, const std::map<std::string, LineProgram::Binders>& paintPropertyBinders) { auto it = paintPropertyBinders.find(layer.getID()); if (it == paintPropertyBinders.end() || !it->second.statistics<Property>().max()) { return layer.evaluated.get<Property>().constantOr(Property::defaultValue()); diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp index ed742a0e63..5ebb575c6f 100644 --- a/src/mbgl/renderer/buckets/line_bucket.hpp +++ b/src/mbgl/renderer/buckets/line_bucket.hpp @@ -50,7 +50,7 @@ public: optional<gl::VertexBuffer<LineLayoutVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; - std::map<std::string, LineProgram::PaintPropertyBinders> paintPropertyBinders; + std::map<std::string, LineProgram::Binders> paintPropertyBinders; private: void addGeometry(const GeometryCoordinates&, const GeometryTileFeature&); diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 0388c5756b..4fa24aa614 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -80,8 +80,8 @@ public: struct PaintProperties { style::SymbolPaintProperties::PossiblyEvaluated evaluated; - SymbolIconProgram::PaintPropertyBinders iconBinders; - SymbolSDFTextProgram::PaintPropertyBinders textBinders; + SymbolIconProgram::Binders iconBinders; + SymbolSDFTextProgram::Binders textBinders; }; std::map<std::string, PaintProperties> paintProperties; @@ -89,15 +89,15 @@ public: struct TextBuffer { gl::VertexVector<SymbolLayoutVertex> vertices; - gl::VertexVector<SymbolDynamicLayoutAttributes::Vertex> dynamicVertices; - gl::VertexVector<SymbolOpacityAttributes::Vertex> opacityVertices; + gl::VertexVector<gfx::Vertex<SymbolDynamicLayoutAttributes>> dynamicVertices; + gl::VertexVector<gfx::Vertex<SymbolOpacityAttributes>> opacityVertices; gl::IndexVector<gl::Triangles> triangles; SegmentVector<SymbolTextAttributes> segments; std::vector<PlacedSymbol> placedSymbols; optional<gl::VertexBuffer<SymbolLayoutVertex>> vertexBuffer; - optional<gl::VertexBuffer<SymbolDynamicLayoutAttributes::Vertex>> dynamicVertexBuffer; - optional<gl::VertexBuffer<SymbolOpacityAttributes::Vertex>> opacityVertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<SymbolDynamicLayoutAttributes>>> dynamicVertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<SymbolOpacityAttributes>>> opacityVertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; } text; @@ -105,26 +105,26 @@ public: struct IconBuffer { gl::VertexVector<SymbolLayoutVertex> vertices; - gl::VertexVector<SymbolDynamicLayoutAttributes::Vertex> dynamicVertices; - gl::VertexVector<SymbolOpacityAttributes::Vertex> opacityVertices; + gl::VertexVector<gfx::Vertex<SymbolDynamicLayoutAttributes>> dynamicVertices; + gl::VertexVector<gfx::Vertex<SymbolOpacityAttributes>> opacityVertices; gl::IndexVector<gl::Triangles> triangles; SegmentVector<SymbolIconAttributes> segments; std::vector<PlacedSymbol> placedSymbols; PremultipliedImage atlasImage; optional<gl::VertexBuffer<SymbolLayoutVertex>> vertexBuffer; - optional<gl::VertexBuffer<SymbolDynamicLayoutAttributes::Vertex>> dynamicVertexBuffer; - optional<gl::VertexBuffer<SymbolOpacityAttributes::Vertex>> opacityVertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<SymbolDynamicLayoutAttributes>>> dynamicVertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<SymbolOpacityAttributes>>> opacityVertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; } icon; struct CollisionBuffer { - gl::VertexVector<CollisionBoxLayoutAttributes::Vertex> vertices; - gl::VertexVector<CollisionBoxDynamicAttributes::Vertex> dynamicVertices; + gl::VertexVector<gfx::Vertex<CollisionBoxLayoutAttributes>> vertices; + gl::VertexVector<gfx::Vertex<CollisionBoxDynamicAttributes>> dynamicVertices; SegmentVector<CollisionBoxProgram::Attributes> segments; - optional<gl::VertexBuffer<CollisionBoxLayoutAttributes::Vertex>> vertexBuffer; - optional<gl::VertexBuffer<CollisionBoxDynamicAttributes::Vertex>> dynamicVertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<CollisionBoxLayoutAttributes>>> vertexBuffer; + optional<gl::VertexBuffer<gfx::Vertex<CollisionBoxDynamicAttributes>>> dynamicVertexBuffer; }; struct CollisionBoxBuffer : public CollisionBuffer { diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 4171e3a670..0efee4a5c1 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -8,6 +8,7 @@ #include <mbgl/programs/background_program.hpp> #include <mbgl/util/tile_cover.hpp> #include <mbgl/map/transform_state.hpp> +#include <mbgl/gl/context.hpp> namespace mbgl { @@ -47,7 +48,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) { // glClear rather than this method. const Properties<>::PossiblyEvaluated properties; - const BackgroundProgram::PaintPropertyBinders paintAttributeData(properties, 0); + const BackgroundProgram::Binders paintAttributeData(properties, 0); auto draw = [&](auto& program, auto&& uniformValues) { const auto allUniformValues = program.computeAllUniformValues( diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index d3ce84be2e..5ff0f1f812 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -6,6 +6,7 @@ #include <mbgl/platform/gl_functions.hpp> #include <mbgl/style/layers/custom_layer_impl.hpp> #include <mbgl/map/transform_state.hpp> +#include <mbgl/gl/context.hpp> #include <mbgl/util/mat4.hpp> namespace mbgl { diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index fe1641a092..482b626abf 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -13,6 +13,7 @@ #include <mbgl/util/math.hpp> #include <mbgl/util/intersection_tests.hpp> #include <mbgl/tile/geometry_tile.hpp> +#include <mbgl/gl/context.hpp> namespace mbgl { @@ -168,7 +169,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource* matrix::ortho(viewportMat, 0, size.width, size.height, 0, 0, 1); const Properties<>::PossiblyEvaluated properties; - const ExtrusionTextureProgram::PaintPropertyBinders paintAttributeData{ properties, 0 }; + const ExtrusionTextureProgram::Binders paintAttributeData{ properties, 0 }; auto& programInstance = parameters.programs.getFillExtrusionLayerPrograms().extrusionTexture; diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 5e9283c6b3..5c615c5337 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -142,7 +142,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { matrix::ortho(viewportMat, 0, size.width, size.height, 0, 0, 1); const Properties<>::PossiblyEvaluated properties; - const HeatmapTextureProgram::PaintPropertyBinders paintAttributeData{ properties, 0 }; + const HeatmapTextureProgram::Binders paintAttributeData{ properties, 0 }; auto& programInstance = parameters.programs.getHeatmapLayerPrograms().heatmapTexture; diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.hpp b/src/mbgl/renderer/layers/render_heatmap_layer.hpp index edb36255cb..d63c30dcca 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.hpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.hpp @@ -3,6 +3,7 @@ #include <mbgl/renderer/render_layer.hpp> #include <mbgl/style/layers/heatmap_layer_impl.hpp> #include <mbgl/style/layers/heatmap_layer_properties.hpp> +#include <mbgl/gl/texture.hpp> #include <mbgl/util/optional.hpp> #include <mbgl/util/offscreen_texture.hpp> diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index 8fd8504848..a55c18f32b 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -70,7 +70,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src const UnwrappedTileID& id) { auto& programInstance = parameters.programs.getHillshadeLayerPrograms().hillshade; - const HillshadeProgram::PaintPropertyBinders paintAttributeData{ evaluated, 0 }; + const HillshadeProgram::Binders paintAttributeData{ evaluated, 0 }; const auto allUniformValues = programInstance.computeAllUniformValues( HillshadeProgram::UniformValues { @@ -131,7 +131,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src parameters.context.bindTexture(*bucket.dem, 0, gl::TextureFilter::Nearest, gl::TextureMipMap::No, gl::TextureWrap::Clamp, gl::TextureWrap::Clamp); const Properties<>::PossiblyEvaluated properties; - const HillshadePrepareProgram::PaintPropertyBinders paintAttributeData{ properties, 0 }; + const HillshadePrepareProgram::Binders paintAttributeData{ properties, 0 }; auto& programInstance = parameters.programs.getHillshadeLayerPrograms().hillshadePrepare; diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index 2809c7ceb1..af2a5a26e2 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -6,6 +6,7 @@ #include <mbgl/programs/uniforms.hpp> #include <mbgl/style/image_impl.hpp> #include <mbgl/layout/pattern_layout.hpp> +#include <mbgl/gl/texture.hpp> namespace mbgl { diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 4969b3ea52..13f62fa6ad 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -72,7 +72,7 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source if (parameters.pass != RenderPass::Translucent) return; - RasterProgram::PaintPropertyBinders paintAttributeData{ evaluated, 0 }; + RasterProgram::Binders paintAttributeData{ evaluated, 0 }; auto draw = [&] (const mat4& matrix, const auto& vertexBuffer, diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 19ddd6c1cb..7239278a79 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -239,7 +239,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { if (bucket.hasCollisionBoxData()) { static const style::Properties<>::PossiblyEvaluated properties {}; - static const CollisionBoxProgram::PaintPropertyBinders paintAttributeData(properties, 0); + static const CollisionBoxProgram::Binders paintAttributeData(properties, 0); auto pixelRatio = tile.id.pixelsToTileUnits(1, parameters.state.getZoom()); const float scale = std::pow(2, parameters.state.getZoom() - tile.tile.id.overscaledZ); @@ -273,7 +273,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { } if (bucket.hasCollisionCircleData()) { static const style::Properties<>::PossiblyEvaluated properties {}; - static const CollisionBoxProgram::PaintPropertyBinders paintAttributeData(properties, 0); + static const CollisionBoxProgram::Binders paintAttributeData(properties, 0); auto pixelRatio = tile.id.pixelsToTileUnits(1, parameters.state.getZoom()); const float scale = std::pow(2, parameters.state.getZoom() - tile.tile.id.overscaledZ); diff --git a/src/mbgl/renderer/paint_parameters.hpp b/src/mbgl/renderer/paint_parameters.hpp index 41f46ae34e..d615c5e9b1 100644 --- a/src/mbgl/renderer/paint_parameters.hpp +++ b/src/mbgl/renderer/paint_parameters.hpp @@ -23,6 +23,10 @@ class ImageManager; class LineAtlas; class UnwrappedTileID; +namespace gl { +class Context; +} + class PaintParameters { public: PaintParameters(gl::Context&, diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp index 09cea12030..56f187507f 100644 --- a/src/mbgl/renderer/paint_property_binder.hpp +++ b/src/mbgl/renderer/paint_property_binder.hpp @@ -24,14 +24,24 @@ namespace mbgl { between zoom levels, without the need to repopulate vertex buffers each frame as the map is being zoomed. */ -template <class A> -using ZoomInterpolatedAttributeType = gl::Attribute<typename A::ValueType, A::Dimensions * 2>; +template <class AttributeType> +using ZoomInterpolatedAttributeType = gfx::AttributeType<typename AttributeType::ValueType, AttributeType::Dimensions * 2>; inline std::array<float, 1> attributeValue(float v) { return {{ v }}; } /* + * Pack a pair of values, interpreted as uint8's, into a single float. + * Used to conserve vertex attributes. Values are unpacked in the vertex + * shader using the `unpack_float()` function, defined in _prelude.vertex.glsl. + */ +template <typename T> +inline uint16_t packUint8Pair(T a, T b) { + return static_cast<uint16_t>(a) * 256 + static_cast<uint16_t>(b); +} + +/* Encode a four-component color value into a pair of floats. Since csscolorparser uses 8-bit precision for each color component, for each float we use the upper 8 bits for one component (e.g. (color.r * 255) * 256), and the lower 8 for another. @@ -40,8 +50,8 @@ inline std::array<float, 1> attributeValue(float v) { */ inline std::array<float, 2> attributeValue(const Color& color) { return {{ - static_cast<float>(mbgl::attributes::packUint8Pair(255 * color.r, 255 * color.g)), - static_cast<float>(mbgl::attributes::packUint8Pair(255 * color.b, 255 * color.a)) + static_cast<float>(packUint8Pair(255 * color.r, 255 * color.g)), + static_cast<float>(packUint8Pair(255 * color.b, 255 * color.a)) }}; } @@ -163,8 +173,9 @@ private: template <class T, class A> class SourceFunctionPaintPropertyBinder : public PaintPropertyBinder<T, T, PossiblyEvaluatedPropertyValue<T>, A> { public: - using BaseAttribute = A; - using BaseVertex = gl::detail::Vertex<BaseAttribute>; + using BaseAttributeType = A; + using BaseAttributeValue = typename A::Value; + using BaseVertex = gfx::Vertex<BaseAttributeValue>; using AttributeType = ZoomInterpolatedAttributeType<A>; @@ -190,7 +201,7 @@ public: if (currentValue.isConstant()) { return {}; } else { - return std::tuple<optional<gl::AttributeBinding>> { AttributeType::binding(*vertexBuffer, 0, BaseAttribute::Dimensions) }; + return std::tuple<optional<gl::AttributeBinding>> { gl::attributeBinding<AttributeType>(*vertexBuffer, 0, BaseAttributeType::Dimensions) }; } } @@ -220,7 +231,7 @@ public: using AttributeType = ZoomInterpolatedAttributeType<A>; using AttributeValue = typename AttributeType::Value; - using Vertex = gl::detail::Vertex<AttributeType>; + using Vertex = gfx::Vertex<AttributeValue>; CompositeFunctionPaintPropertyBinder(style::PropertyExpression<T> expression_, float zoom, T defaultValue_) : expression(std::move(expression_)), @@ -248,7 +259,7 @@ public: if (currentValue.isConstant()) { return {}; } else { - return std::tuple<optional<gl::AttributeBinding>> { AttributeType::binding(*vertexBuffer, 0) }; + return std::tuple<optional<gl::AttributeBinding>> { gl::attributeBinding<AttributeType>(*vertexBuffer, 0) }; } } @@ -283,14 +294,14 @@ public: using AttributeType = ZoomInterpolatedAttributeType<A1>; using AttributeType2 = ZoomInterpolatedAttributeType<A2>; - using BaseAttribute = A1; - using BaseAttributeValue = typename BaseAttribute::Value; + using BaseAttributeType = A1; + using BaseAttributeValue = typename BaseAttributeType::Value; - using BaseAttribute2 = A2; - using BaseAttributeValue2 = typename BaseAttribute2::Value; + using BaseAttributeType2 = A2; + using BaseAttributeValue2 = typename BaseAttributeType2::Value; - using Vertex = gl::detail::Vertex<BaseAttribute>; - using Vertex2 = gl::detail::Vertex<BaseAttribute2>; + using Vertex = gfx::Vertex<BaseAttributeValue>; + using Vertex2 = gfx::Vertex<BaseAttributeValue2>; CompositeCrossFadedPaintPropertyBinder(style::PropertyExpression<T> expression_, float zoom, T defaultValue_) : expression(std::move(expression_)), @@ -344,10 +355,10 @@ public: return {}; } else { return std::tuple<optional<gl::AttributeBinding>, optional<gl::AttributeBinding>> { - AttributeType::binding(*patternToVertexBuffer, 0, BaseAttribute::Dimensions), - AttributeType2::binding( + gl::attributeBinding<AttributeType>(*patternToVertexBuffer, 0, BaseAttributeType::Dimensions), + gl::attributeBinding<AttributeType2>( crossfade.fromScale == 2 ? *zoomInVertexBuffer : *zoomOutVertexBuffer, - 0, BaseAttribute2::Dimensions) }; + 0, BaseAttributeType2::Dimensions) }; } } @@ -420,7 +431,7 @@ struct ZoomInterpolatedAttribute { }; template <class Attr> -struct InterpolationUniformType { +struct InterpolationUniform { using Value = float; static auto name() { static const std::string name = Attr::name() + std::string("_t"); @@ -441,11 +452,11 @@ private: struct Detail<T, UniformValueType, PossiblyEvaluatedType, TypeList<As...>> { using Binder = PaintPropertyBinder<T, UniformValueType, PossiblyEvaluatedType, typename As::Type...>; using ZoomInterpolatedAttributeList = TypeList<ZoomInterpolatedAttribute<As>...>; - using InterpolationUniformTypeList = TypeList<InterpolationUniformType<As>...>; + using InterpolationUniformList = TypeList<InterpolationUniform<As>...>; }; template <class P> - using Property = Detail<typename P::Type, typename P::Uniform::Value, typename P::PossiblyEvaluatedType, typename P::Attributes>; + using Property = Detail<typename P::Type, typename P::Uniform::Value, typename P::PossiblyEvaluatedType, typename P::AttributeList>; public: template <class P> @@ -485,9 +496,10 @@ public: template <class P> using ZoomInterpolatedAttributeList = typename Property<P>::ZoomInterpolatedAttributeList; template <class P> - using InterpolationUniformTypeList = typename Property<P>::InterpolationUniformTypeList; + using InterpolationUniformList = typename Property<P>::InterpolationUniformList; - using Attributes = typename TypeListConcat<ZoomInterpolatedAttributeList<Ps>...>::template ExpandInto<gl::Attributes>; + using AttributeList = TypeListConcat<ZoomInterpolatedAttributeList<Ps>...>; + using Attributes = gl::Attributes<AttributeList>; using AttributeBindings = typename Attributes::Bindings; template <class EvaluatedProperties> @@ -497,9 +509,9 @@ public: ) }; } - using UniformTypeList = TypeListConcat<InterpolationUniformTypeList<Ps>..., typename Ps::Uniforms...>; - using UniformValues = gfx::UniformValues<UniformTypeList>; - using Uniforms = typename UniformTypeList::template ExpandInto<gl::Uniforms>; + using UniformList = TypeListConcat<InterpolationUniformList<Ps>..., typename Ps::UniformList...>; + using UniformValues = gfx::UniformValues<UniformList>; + using Uniforms = gl::Uniforms<UniformList>; template <class EvaluatedProperties> UniformValues uniformValues(float currentZoom, EvaluatedProperties& currentProperties) const { @@ -547,7 +559,7 @@ public: std::vector<std::string> result; util::ignore({ (currentProperties.template get<Ps>().isConstant() - ? UniformDefines<typename Ps::Uniforms>::appendDefines(result) + ? UniformDefines<typename Ps::UniformList>::appendDefines(result) : (void) 0, 0)... }); return result; diff --git a/src/mbgl/renderer/render_layer.cpp b/src/mbgl/renderer/render_layer.cpp index 8892991ac6..32236d0f24 100644 --- a/src/mbgl/renderer/render_layer.cpp +++ b/src/mbgl/renderer/render_layer.cpp @@ -3,6 +3,7 @@ #include <mbgl/renderer/render_tile.hpp> #include <mbgl/style/types.hpp> #include <mbgl/tile/tile.hpp> +#include <mbgl/gl/context.hpp> #include <mbgl/util/logging.hpp> namespace mbgl { diff --git a/src/mbgl/renderer/render_static_data.cpp b/src/mbgl/renderer/render_static_data.cpp index 0b3937ded0..292a0298b0 100644 --- a/src/mbgl/renderer/render_static_data.cpp +++ b/src/mbgl/renderer/render_static_data.cpp @@ -3,12 +3,12 @@ namespace mbgl { -static gl::VertexVector<PositionOnlyLayoutAttributes::Vertex> tileVertices() { - gl::VertexVector<PositionOnlyLayoutAttributes::Vertex> result; - result.emplace_back(PositionOnlyLayoutAttributes::Vertex({{{ 0, 0 }}})); - result.emplace_back(PositionOnlyLayoutAttributes::Vertex({{{ util::EXTENT, 0 }}})); - result.emplace_back(PositionOnlyLayoutAttributes::Vertex({{{ 0, util::EXTENT }}})); - result.emplace_back(PositionOnlyLayoutAttributes::Vertex({{{ util::EXTENT, util::EXTENT }}})); +static gl::VertexVector<gfx::Vertex<PositionOnlyLayoutAttributes>> tileVertices() { + gl::VertexVector<gfx::Vertex<PositionOnlyLayoutAttributes>> result; + result.emplace_back(gfx::Vertex<PositionOnlyLayoutAttributes>({{{ 0, 0 }}})); + result.emplace_back(gfx::Vertex<PositionOnlyLayoutAttributes>({{{ util::EXTENT, 0 }}})); + result.emplace_back(gfx::Vertex<PositionOnlyLayoutAttributes>({{{ 0, util::EXTENT }}})); + result.emplace_back(gfx::Vertex<PositionOnlyLayoutAttributes>({{{ util::EXTENT, util::EXTENT }}})); return result; } diff --git a/src/mbgl/renderer/render_static_data.hpp b/src/mbgl/renderer/render_static_data.hpp index 57dd7ab812..2e53067af6 100644 --- a/src/mbgl/renderer/render_static_data.hpp +++ b/src/mbgl/renderer/render_static_data.hpp @@ -16,7 +16,7 @@ class RenderStaticData { public: RenderStaticData(gl::Context&, float pixelRatio, const optional<std::string>& programCacheDir); - gl::VertexBuffer<PositionOnlyLayoutAttributes::Vertex> tileVertexBuffer; + gl::VertexBuffer<gfx::Vertex<PositionOnlyLayoutAttributes>> tileVertexBuffer; gl::VertexBuffer<RasterLayoutVertex> rasterVertexBuffer; gl::VertexBuffer<ExtrusionTextureLayoutVertex> extrusionTextureVertexBuffer; diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp index 61b92fb6d4..a3f95ad869 100644 --- a/src/mbgl/renderer/render_tile.cpp +++ b/src/mbgl/renderer/render_tile.cpp @@ -72,7 +72,7 @@ void RenderTile::finishRender(PaintParameters& parameters) { return; static const style::Properties<>::PossiblyEvaluated properties {}; - static const DebugProgram::PaintPropertyBinders paintAttributeData(properties, 0); + static const DebugProgram::Binders paintAttributeData(properties, 0); auto& program = parameters.programs.debug; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 9058b0d62b..44ea982986 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -435,7 +435,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { MBGL_DEBUG_GROUP(parameters.context, "clipping masks"); static const Properties<>::PossiblyEvaluated properties {}; - static const ClippingMaskProgram::PaintPropertyBinders paintAttributeData(properties, 0); + static const ClippingMaskProgram::Binders paintAttributeData(properties, 0); for (const auto& clipID : parameters.clipIDGenerator.getClipIDs()) { auto& program = parameters.staticData.programs.clippingMask; diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp index 957403fc2f..69a5f2cc83 100644 --- a/src/mbgl/renderer/sources/render_image_source.cpp +++ b/src/mbgl/renderer/sources/render_image_source.cpp @@ -56,7 +56,7 @@ void RenderImageSource::finishRender(PaintParameters& parameters) { } static const style::Properties<>::PossiblyEvaluated properties {}; - static const DebugProgram::PaintPropertyBinders paintAttributeData(properties, 0); + static const DebugProgram::Binders paintAttributeData(properties, 0); auto& programInstance = parameters.programs.debug; |