diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-19 11:41:22 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-22 16:41:10 +0300 |
commit | 84d3b5f89971c839c1a15beedf56d8b064be1d6f (patch) | |
tree | ca94bb72b196bc3640b46a473fedc0080fc2b77f /src/mbgl/renderer/renderer_impl.cpp | |
parent | e2ed9833c4e069fee1251753d13c9a4ef0cb798b (diff) | |
download | qtlocation-mapboxgl-84d3b5f89971c839c1a15beedf56d8b064be1d6f.tar.gz |
[core] Prepare render sources before render layers are initialized
Diffstat (limited to 'src/mbgl/renderer/renderer_impl.cpp')
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index c32a1589b8..10d60cbef7 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -291,6 +291,15 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { observer->onWillStartRenderingFrame(); + TransformParameters transformParams(updateParameters.transformState); + + // Update all matrices and generate data that we should upload to the GPU. + for (const auto& entry : renderSources) { + if (entry.second->isEnabled()) { + entry.second->prepare({transformParams, updateParameters.debugOptions}); + } + } + // Set render tiles to the render items. for (auto& renderItem : renderItems) { if (!renderItem.source) { @@ -312,13 +321,11 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { bool symbolBucketsChanged = false; const bool placementChanged = !placement->stillRecent(updateParameters.timePoint); std::set<std::string> usedSymbolLayers; - mat4 projMatrix; if (placementChanged) { placement = std::make_unique<Placement>( updateParameters.transformState, updateParameters.mode, updateParameters.transitionOptions, updateParameters.crossSourceCollisions, std::move(placement)); - updateParameters.transformState.getProjMatrix(projMatrix); } for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) { @@ -327,7 +334,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { if (placementChanged) { usedSymbolLayers.insert(layer.getID()); - placement->placeLayer(layer, projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision); + placement->placeLayer(layer, transformParams.projMatrix, updateParameters.debugOptions & MapDebugOptions::Collision); } } @@ -357,6 +364,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { backend, updateParameters, renderLight.getEvaluated(), + transformParams, *staticData, *imageManager, *lineAtlas, @@ -364,18 +372,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { parameters.symbolFadeChange = placement->symbolFadeChange(updateParameters.timePoint); - // TODO: move this pass to before the PaintParameters initialization - // - PREPARE PASS ------------------------------------------------------------------------------- - // Runs an initialization pass for all sources. - { - // Update all matrices and generate data that we should upload to the GPU. - for (const auto& entry : renderSources) { - if (entry.second->isEnabled()) { - entry.second->prepare(parameters); - } - } - } - // - UPLOAD PASS ------------------------------------------------------------------------------- // Uploads all required buffers and images before we do any actual rendering. { |