summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2019-03-13 11:12:28 +0100
committerKonstantin Käfer <mail@kkaefer.com>2019-03-21 13:48:14 +0100
commita4de63cf8bd439354ff2124a5039fd6524652ade (patch)
tree170b3a8d5b0d296f3f6fa662b32edd3ef5b66ed0
parentf9acadaa20c9b786cf51cc9c250079be7095a437 (diff)
downloadqtlocation-mapboxgl-a4de63cf8bd439354ff2124a5039fd6524652ade.tar.gz
[core] integrate gfx::Attributes and gfx::Attributes<>::Bindings
-rw-r--r--src/mbgl/gfx/attribute.hpp25
-rw-r--r--src/mbgl/gl/attribute.hpp2
-rw-r--r--src/mbgl/gl/program.hpp2
-rw-r--r--src/mbgl/programs/collision_box_program.hpp12
-rw-r--r--src/mbgl/programs/program.hpp8
-rw-r--r--src/mbgl/programs/symbol_program.hpp12
-rw-r--r--src/mbgl/renderer/paint_property_binder.hpp2
7 files changed, 35 insertions, 28 deletions
diff --git a/src/mbgl/gfx/attribute.hpp b/src/mbgl/gfx/attribute.hpp
index d0b1e65639..4f44d68d7b 100644
--- a/src/mbgl/gfx/attribute.hpp
+++ b/src/mbgl/gfx/attribute.hpp
@@ -258,24 +258,31 @@ AttributeBinding attributeBinding(const VertexBuffer<detail::VertexType<As...>>&
optional<gfx::AttributeBinding> offsetAttributeBinding(const optional<gfx::AttributeBinding>& binding, std::size_t vertexOffset);
template <class>
-class Attributes;
+class AttributeBindings;
template <class... As>
-class Attributes<TypeList<As...>> final {
+class AttributeBindings<TypeList<As...>> final
+ : public IndexedTuple<TypeList<As...>,
+ TypeList<ExpandToType<As, optional<AttributeBinding>>...>> {
+ using Base = IndexedTuple<TypeList<As...>,
+ TypeList<ExpandToType<As, optional<AttributeBinding>>...>>;
+
public:
- using Bindings = IndexedTuple<TypeList<As...>, TypeList<ExpandToType<As, optional<AttributeBinding>>...>>;
+ AttributeBindings(const VertexBuffer<Vertex<TypeList<As...>>>& buffer)
+ : Base{ attributeBinding<TypeIndex<As, As...>::value>(buffer)... } {
+ }
- static Bindings bindings(const VertexBuffer<Vertex<TypeList<As...>>>& buffer) {
- return Bindings { attributeBinding<TypeIndex<As, As...>::value>(buffer)... };
+ template <class... Args>
+ AttributeBindings(Args&&... args) : Base(std::forward<Args>(args)...) {
}
- static Bindings offsetBindings(const Bindings& bindings, const std::size_t vertexOffset) {
- return Bindings { offsetAttributeBinding(bindings.template get<As>(), vertexOffset)... };
+ AttributeBindings offset(const std::size_t vertexOffset) const {
+ return { offsetAttributeBinding(Base::template get<As>(), vertexOffset)... };
}
- static uint32_t activeBindingCount(const Bindings& bindings) {
+ uint32_t activeCount() const {
uint32_t result = 0;
- util::ignore({ ((result += bool(bindings.template get<As>())), 0)... });
+ util::ignore({ ((result += bool(Base::template get<As>())), 0)... });
return result;
}
};
diff --git a/src/mbgl/gl/attribute.hpp b/src/mbgl/gl/attribute.hpp
index ce8a7312e9..9115bf5e43 100644
--- a/src/mbgl/gl/attribute.hpp
+++ b/src/mbgl/gl/attribute.hpp
@@ -71,7 +71,7 @@ public:
static AttributeBindingArray
toBindingArray(const Locations& locations,
- const typename gfx::Attributes<TypeList<As...>>::Bindings& bindings) {
+ const typename gfx::AttributeBindings<TypeList<As...>>& bindings) {
AttributeBindingArray result;
result.resize(sizeof...(As));
diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp
index e60619fb10..b96dd5d9b0 100644
--- a/src/mbgl/gl/program.hpp
+++ b/src/mbgl/gl/program.hpp
@@ -29,7 +29,7 @@ class Program {
public:
using Primitive = P;
- using AttributeBindings = typename gfx::Attributes<AttributeList>::Bindings;
+ using AttributeBindings = gfx::AttributeBindings<AttributeList>;
using UniformValues = gfx::UniformValues<UniformList>;
using TextureBindings = gfx::TextureBindings<TextureList>;
diff --git a/src/mbgl/programs/collision_box_program.hpp b/src/mbgl/programs/collision_box_program.hpp
index a1bc6d37a3..40c0d82ee2 100644
--- a/src/mbgl/programs/collision_box_program.hpp
+++ b/src/mbgl/programs/collision_box_program.hpp
@@ -81,8 +81,8 @@ public:
UniformValues uniformValues = layoutUniformValues
.concat(paintPropertyBinders.uniformValues(currentZoom, currentProperties));
- AttributeBindings allAttributeBindings = gfx::Attributes<CollisionBoxLayoutAttributes>::bindings(layoutVertexBuffer)
- .concat(gfx::Attributes<CollisionBoxDynamicAttributes>::bindings(dynamicVertexBuffer))
+ AttributeBindings allAttributeBindings = gfx::AttributeBindings<CollisionBoxLayoutAttributes>(layoutVertexBuffer)
+ .concat(gfx::AttributeBindings<CollisionBoxDynamicAttributes>(dynamicVertexBuffer))
.concat(paintPropertyBinders.attributeBindings(currentProperties));
assert(layoutVertexBuffer.elements == dynamicVertexBuffer.elements);
@@ -103,7 +103,7 @@ public:
std::move(cullFaceMode),
uniformValues,
drawScopeIt->second,
- gfx::Attributes<AttributeList>::offsetBindings(allAttributeBindings, segment.vertexOffset),
+ allAttributeBindings.offset(segment.vertexOffset),
textureBindings,
indexBuffer,
segment.indexOffset,
@@ -169,8 +169,8 @@ public:
UniformValues uniformValues = layoutUniformValues
.concat(paintPropertyBinders.uniformValues(currentZoom, currentProperties));
- AttributeBindings allAttributeBindings = gfx::Attributes<CollisionBoxLayoutAttributes>::bindings(layoutVertexBuffer)
- .concat(gfx::Attributes<CollisionBoxDynamicAttributes>::bindings(dynamicVertexBuffer))
+ AttributeBindings allAttributeBindings = gfx::AttributeBindings<CollisionBoxLayoutAttributes>(layoutVertexBuffer)
+ .concat(gfx::AttributeBindings<CollisionBoxDynamicAttributes>(dynamicVertexBuffer))
.concat(paintPropertyBinders.attributeBindings(currentProperties));
for (auto& segment : segments) {
@@ -189,7 +189,7 @@ public:
std::move(cullFaceMode),
uniformValues,
drawScopeIt->second,
- gfx::Attributes<AttributeList>::offsetBindings(allAttributeBindings, segment.vertexOffset),
+ allAttributeBindings.offset(segment.vertexOffset),
textureBindings,
indexBuffer,
segment.indexOffset,
diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp
index a179c07cb1..4d6a79f729 100644
--- a/src/mbgl/programs/program.hpp
+++ b/src/mbgl/programs/program.hpp
@@ -30,7 +30,7 @@ public:
using PaintAttributeList = typename Binders::AttributeList;
using AttributeList = TypeListConcat<LayoutAttributeList, PaintAttributeList>;
- using AttributeBindings = typename gfx::Attributes<AttributeList>::Bindings;
+ using AttributeBindings = gfx::AttributeBindings<AttributeList>;
using PaintUniformList = typename Binders::UniformList;
using UniformList = TypeListConcat<LayoutUniformList, PaintUniformList>;
@@ -65,12 +65,12 @@ public:
const gfx::VertexBuffer<LayoutVertex>& layoutVertexBuffer,
const Binders& paintPropertyBinders,
const typename PaintProperties::PossiblyEvaluated& currentProperties) {
- return gfx::Attributes<LayoutAttributeList>::bindings(layoutVertexBuffer)
+ return gfx::AttributeBindings<LayoutAttributeList>(layoutVertexBuffer)
.concat(paintPropertyBinders.attributeBindings(currentProperties));
}
static uint32_t activeBindingCount(const AttributeBindings& allAttributeBindings) {
- return gfx::Attributes<AttributeList>::activeBindingCount(allAttributeBindings);
+ return allAttributeBindings.activeCount();
}
template <class DrawMode>
@@ -102,7 +102,7 @@ public:
std::move(cullFaceMode),
uniformValues,
drawScopeIt->second,
- gfx::Attributes<AttributeList>::offsetBindings(allAttributeBindings, segment.vertexOffset),
+ allAttributeBindings.offset(segment.vertexOffset),
textureBindings,
indexBuffer,
segment.indexOffset,
diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp
index b94472dd0c..18cdff3c9f 100644
--- a/src/mbgl/programs/symbol_program.hpp
+++ b/src/mbgl/programs/symbol_program.hpp
@@ -256,7 +256,7 @@ public:
using PaintAttributeList = typename Binders::AttributeList;
using AttributeList = TypeListConcat<LayoutAndSizeAttributeList, PaintAttributeList>;
- using AttributeBindings = typename gfx::Attributes<AttributeList>::Bindings;
+ using AttributeBindings = gfx::AttributeBindings<AttributeList>;
using LayoutUniformValues = gfx::UniformValues<LayoutUniformList>;
using SizeUniformList = typename SymbolSizeBinder::UniformList;
@@ -297,14 +297,14 @@ public:
const typename PaintProperties::PossiblyEvaluated& currentProperties) {
assert(layoutVertexBuffer.elements == dynamicLayoutVertexBuffer.elements &&
layoutVertexBuffer.elements == opacityVertexBuffer.elements);
- return gfx::Attributes<LayoutAttributeList>::bindings(layoutVertexBuffer)
- .concat(gfx::Attributes<SymbolDynamicLayoutAttributes>::bindings(dynamicLayoutVertexBuffer))
- .concat(gfx::Attributes<SymbolOpacityAttributes>::bindings(opacityVertexBuffer))
+ return gfx::AttributeBindings<LayoutAttributeList>(layoutVertexBuffer)
+ .concat(gfx::AttributeBindings<SymbolDynamicLayoutAttributes>(dynamicLayoutVertexBuffer))
+ .concat(gfx::AttributeBindings<SymbolOpacityAttributes>(opacityVertexBuffer))
.concat(paintPropertyBinders.attributeBindings(currentProperties));
}
static uint32_t activeBindingCount(const AttributeBindings& allAttributeBindings) {
- return gfx::Attributes<AttributeList>::activeBindingCount(allAttributeBindings);
+ return allAttributeBindings.activeCount();
}
template <class DrawMode>
@@ -336,7 +336,7 @@ public:
std::move(cullFaceMode),
uniformValues,
drawScopeIt->second,
- gfx::Attributes<AttributeList>::offsetBindings(allAttributeBindings, segment.vertexOffset),
+ allAttributeBindings.offset(segment.vertexOffset),
textureBindings,
indexBuffer,
segment.indexOffset,
diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp
index fc873a87f8..a014b36ece 100644
--- a/src/mbgl/renderer/paint_property_binder.hpp
+++ b/src/mbgl/renderer/paint_property_binder.hpp
@@ -505,7 +505,7 @@ public:
using InterpolationUniformList = typename Property<P>::InterpolationUniformList;
using AttributeList = TypeListConcat<ZoomInterpolatedAttributeList<Ps>...>;
- using AttributeBindings = typename gfx::Attributes<AttributeList>::Bindings;
+ using AttributeBindings = gfx::AttributeBindings<AttributeList>;
template <class EvaluatedProperties>
AttributeBindings attributeBindings(const EvaluatedProperties& currentProperties) const {