[core] Export symbol placement update status from MapObserver
This commit is contained in:
@@ -41,7 +41,7 @@ public:
|
||||
virtual void onDidFinishLoadingMap() {}
|
||||
virtual void onDidFailLoadingMap(MapLoadError, const std::string&) {}
|
||||
virtual void onWillStartRenderingFrame() {}
|
||||
virtual void onDidFinishRenderingFrame(RenderMode) {}
|
||||
virtual void onDidFinishRenderingFrame(RenderMode, bool /*placementChanged*/) {}
|
||||
virtual void onWillStartRenderingMap() {}
|
||||
virtual void onDidFinishRenderingMap(RenderMode) {}
|
||||
virtual void onDidFinishLoadingStyle() {}
|
||||
|
||||
@@ -26,8 +26,8 @@ public:
|
||||
// Start of frame, initial is the first frame for this map
|
||||
virtual void onWillStartRenderingFrame() {}
|
||||
|
||||
// End of frame, boolean flags that a repaint is required
|
||||
virtual void onDidFinishRenderingFrame(RenderMode, bool) {}
|
||||
// End of frame, booleans flags that a repaint is required and that placement changed.
|
||||
virtual void onDidFinishRenderingFrame(RenderMode, bool /*repaint*/, bool /*placementChanged*/) {}
|
||||
|
||||
// Final frame
|
||||
virtual void onDidFinishRenderingMap() {}
|
||||
|
||||
@@ -42,8 +42,8 @@ public:
|
||||
delegate.invoke(&RendererObserver::onWillStartRenderingFrame);
|
||||
}
|
||||
|
||||
void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded) override {
|
||||
delegate.invoke(&RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded);
|
||||
void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded, bool placementChanged) override {
|
||||
delegate.invoke(&RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded, placementChanged);
|
||||
}
|
||||
|
||||
void onDidFinishRenderingMap() override {
|
||||
|
||||
@@ -185,7 +185,7 @@ void NativeMapView::onWillStartRenderingFrame() {
|
||||
}
|
||||
}
|
||||
|
||||
void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode) {
|
||||
void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode, bool) {
|
||||
assert(vm != nullptr);
|
||||
|
||||
android::UniqueEnv _env = android::AttachEnv();
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
void onDidFinishLoadingMap() override;
|
||||
void onDidFailLoadingMap(MapLoadError, const std::string&) override;
|
||||
void onWillStartRenderingFrame() override;
|
||||
void onDidFinishRenderingFrame(MapObserver::RenderMode) override;
|
||||
void onDidFinishRenderingFrame(MapObserver::RenderMode, bool) override;
|
||||
void onWillStartRenderingMap() override;
|
||||
void onDidFinishRenderingMap(MapObserver::RenderMode) override;
|
||||
void onDidBecomeIdle() override;
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
void onDidFinishLoadingMap() override;
|
||||
void onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) override;
|
||||
void onWillStartRenderingFrame() override;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode) override;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode, bool) override;
|
||||
void onWillStartRenderingMap() override;
|
||||
void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) override;
|
||||
void onDidFinishLoadingStyle() override;
|
||||
|
||||
@@ -68,7 +68,7 @@ void MGLMapViewImpl::onWillStartRenderingFrame() {
|
||||
[mapView mapViewWillStartRenderingFrame];
|
||||
}
|
||||
|
||||
void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode) {
|
||||
void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode, bool) {
|
||||
bool fullyRendered = mode == mbgl::MapObserver::RenderMode::Full;
|
||||
[mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered];
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
void onDidFinishLoadingMap() override;
|
||||
void onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) override;
|
||||
void onWillStartRenderingFrame() override;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode) override;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode, bool /*placementChanged*/) override;
|
||||
void onWillStartRenderingMap() override;
|
||||
void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) override;
|
||||
void onDidFinishLoadingStyle() override;
|
||||
|
||||
@@ -67,7 +67,7 @@ void MGLMapViewImpl::onWillStartRenderingFrame() {
|
||||
[mapView mapViewWillStartRenderingFrame];
|
||||
}
|
||||
|
||||
void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode) {
|
||||
void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode, bool) {
|
||||
bool fullyRendered = mode == mbgl::MapObserver::RenderMode::Full;
|
||||
[mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered];
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ void QMapboxGLMapObserver::onWillStartRenderingFrame()
|
||||
emit mapChanged(QMapboxGL::MapChangeWillStartRenderingFrame);
|
||||
}
|
||||
|
||||
void QMapboxGLMapObserver::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode)
|
||||
void QMapboxGLMapObserver::onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode mode, bool)
|
||||
{
|
||||
if (mode == mbgl::MapObserver::RenderMode::Partial) {
|
||||
emit mapChanged(QMapboxGL::MapChangeDidFinishRenderingFrame);
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
void onDidFinishLoadingMap() final;
|
||||
void onDidFailLoadingMap(mbgl::MapLoadError, const std::string&) final;
|
||||
void onWillStartRenderingFrame() final;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode) final;
|
||||
void onDidFinishRenderingFrame(mbgl::MapObserver::RenderMode, bool /*placementChanged*/) final;
|
||||
void onWillStartRenderingMap() final;
|
||||
void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) final;
|
||||
void onDidFinishLoadingStyle() final;
|
||||
|
||||
@@ -37,8 +37,8 @@ public:
|
||||
delegate.invoke(&mbgl::RendererObserver::onWillStartRenderingFrame);
|
||||
}
|
||||
|
||||
void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded) final {
|
||||
delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded);
|
||||
void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded, bool placementChanged) final {
|
||||
delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded, placementChanged);
|
||||
}
|
||||
|
||||
void onDidFinishRenderingMap() final {
|
||||
|
||||
@@ -130,11 +130,11 @@ void Map::Impl::onWillStartRenderingFrame() {
|
||||
}
|
||||
}
|
||||
|
||||
void Map::Impl::onDidFinishRenderingFrame(RenderMode renderMode, bool needsRepaint) {
|
||||
void Map::Impl::onDidFinishRenderingFrame(RenderMode renderMode, bool needsRepaint, bool placemenChanged) {
|
||||
rendererFullyLoaded = renderMode == RenderMode::Full;
|
||||
|
||||
if (mode == MapMode::Continuous) {
|
||||
observer.onDidFinishRenderingFrame(MapObserver::RenderMode(renderMode));
|
||||
observer.onDidFinishRenderingFrame(MapObserver::RenderMode(renderMode), placemenChanged);
|
||||
|
||||
if (needsRepaint || transform.inTransition()) {
|
||||
onUpdate();
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
void onInvalidate() final;
|
||||
void onResourceError(std::exception_ptr) final;
|
||||
void onWillStartRenderingFrame() final;
|
||||
void onDidFinishRenderingFrame(RenderMode, bool) final;
|
||||
void onDidFinishRenderingFrame(RenderMode, bool, bool) final;
|
||||
void onWillStartRenderingMap() final;
|
||||
void onDidFinishRenderingMap() final;
|
||||
void onStyleImageMissing(const std::string&, std::function<void()>) final;
|
||||
|
||||
@@ -361,9 +361,9 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
|
||||
}
|
||||
|
||||
bool symbolBucketsChanged = false;
|
||||
const bool placementChanged = !placement->stillRecent(updateParameters.timePoint, updateParameters.transformState.getZoom());
|
||||
renderTreeParameters->placementChanged = !placement->stillRecent(updateParameters.timePoint, updateParameters.transformState.getZoom());
|
||||
std::set<std::string> usedSymbolLayers;
|
||||
if (placementChanged) {
|
||||
if (renderTreeParameters->placementChanged) {
|
||||
placement = std::make_unique<Placement>(
|
||||
updateParameters.transformState, updateParameters.mode,
|
||||
updateParameters.transitionOptions, updateParameters.crossSourceCollisions,
|
||||
@@ -374,13 +374,13 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
|
||||
const RenderLayer& layer = *it;
|
||||
if (crossTileSymbolIndex.addLayer(layer, updateParameters.transformState.getLatLng().longitude())) symbolBucketsChanged = true;
|
||||
|
||||
if (placementChanged) {
|
||||
if (renderTreeParameters->placementChanged) {
|
||||
usedSymbolLayers.insert(layer.getID());
|
||||
placement->placeLayer(layer, renderTreeParameters->transformParams.projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision);
|
||||
}
|
||||
}
|
||||
|
||||
if (placementChanged) {
|
||||
if (renderTreeParameters->placementChanged) {
|
||||
placement->commit(updateParameters.timePoint, updateParameters.transformState.getZoom());
|
||||
crossTileSymbolIndex.pruneUnusedLayers(usedSymbolLayers);
|
||||
for (const auto& entry : renderSources) {
|
||||
@@ -391,7 +391,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
|
||||
}
|
||||
|
||||
for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) {
|
||||
placement->updateLayerBuckets(*it, updateParameters.transformState, placementChanged || symbolBucketsChanged);
|
||||
placement->updateLayerBuckets(*it, updateParameters.transformState, renderTreeParameters->placementChanged || symbolBucketsChanged);
|
||||
}
|
||||
|
||||
renderTreeParameters->symbolFadeChange = placement->symbolFadeChange(updateParameters.timePoint);
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
float symbolFadeChange = 0.0f;
|
||||
bool needsRepaint = false;
|
||||
bool loaded = false;
|
||||
bool placementChanged = false;
|
||||
};
|
||||
|
||||
class RenderTree {
|
||||
|
||||
@@ -212,7 +212,8 @@ void Renderer::Impl::render(const RenderTree& renderTree) {
|
||||
|
||||
observer->onDidFinishRenderingFrame(
|
||||
renderTreeParameters.loaded ? RendererObserver::RenderMode::Full : RendererObserver::RenderMode::Partial,
|
||||
renderTreeParameters.needsRepaint
|
||||
renderTreeParameters.needsRepaint,
|
||||
renderTreeParameters.placementChanged
|
||||
);
|
||||
|
||||
if (!renderTreeParameters.loaded) {
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void onDidFinishRenderingFrame(RenderMode mode) final {
|
||||
void onDidFinishRenderingFrame(RenderMode mode, bool) final {
|
||||
if (didFinishRenderingFrameCallback) {
|
||||
didFinishRenderingFrameCallback(mode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user