summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/renderer_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/renderer_impl.cpp')
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index 52a2342454..3f9b59a14a 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -6,6 +6,7 @@
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/renderer/render_static_data.hpp>
#include <mbgl/renderer/update_parameters.hpp>
+#include <mbgl/renderer/upload_parameters.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/transition_parameters.hpp>
#include <mbgl/renderer/property_evaluation_parameters.hpp>
@@ -16,6 +17,7 @@
#include <mbgl/gfx/backend_scope.hpp>
#include <mbgl/renderer/image_manager.hpp>
#include <mbgl/gfx/renderer_backend.hpp>
+#include <mbgl/gfx/upload_pass.hpp>
#include <mbgl/gfx/render_pass.hpp>
#include <mbgl/gfx/cull_face_mode.hpp>
#include <mbgl/gfx/context.hpp>
@@ -347,8 +349,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
}
}
+ auto& context = backend.getContext();
+
+ // Blocks execution until the renderable is available.
+ backend.getDefaultRenderable().wait();
+
PaintParameters parameters {
- backend.getContext(),
+ context,
pixelRatio,
backend,
updateParameters,
@@ -356,25 +363,51 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
*staticData,
*imageManager,
*lineAtlas,
- placement->getVariableOffsets()
};
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.
{
- const auto debugGroup(parameters.encoder->createDebugGroup("upload"));
+ const auto uploadPass = parameters.encoder->createUploadPass("upload");
- parameters.imageManager.upload(parameters.context);
- parameters.lineAtlas.upload(parameters.context);
-
// Update all clipping IDs + upload buckets.
for (const auto& entry : renderSources) {
if (entry.second->isEnabled()) {
- entry.second->startRender(parameters);
+ entry.second->upload(*uploadPass);
}
}
+
+ UploadParameters uploadParameters{
+ updateParameters.transformState,
+ placement->getVariableOffsets(),
+ *imageManager,
+ *lineAtlas,
+ };
+
+ for (auto& renderItem : renderItems) {
+ RenderLayer& renderLayer = renderItem.layer;
+ if (renderLayer.hasRenderPass(RenderPass::Upload)) {
+ renderLayer.upload(*uploadPass, uploadParameters);
+ }
+ }
+
+ staticData->upload(*uploadPass);
+ imageManager->upload(*uploadPass);
+ lineAtlas->upload(*uploadPass);
}
// - 3D PASS -------------------------------------------------------------------------------------