From 867555b1c9ef51fec23ce77c682cf7d5b5a23c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Mon, 13 May 2019 17:13:31 -0700 Subject: [core] add gfx::UploadPass, split startRender into prepare and upload --- src/mbgl/renderer/render_tile.cpp | 63 +++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 25 deletions(-) (limited to 'src/mbgl/renderer/render_tile.cpp') diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp index 2c2a82a8a8..828163bd6e 100644 --- a/src/mbgl/renderer/render_tile.cpp +++ b/src/mbgl/renderer/render_tile.cpp @@ -12,6 +12,11 @@ namespace mbgl { using namespace style; +RenderTile::RenderTile(UnwrappedTileID id_, Tile& tile_) : id(std::move(id_)), tile(tile_) { +} + +RenderTile::~RenderTile() = default; + mat4 RenderTile::translateVtxMatrix(const mat4& tileMatrix, const std::array& translation, TranslateAnchorType anchor, @@ -57,8 +62,27 @@ void RenderTile::setMask(TileMask&& mask) { tile.setMask(std::move(mask)); } -void RenderTile::startRender(PaintParameters& parameters) { - tile.upload(parameters.context); +void RenderTile::upload(gfx::UploadPass& uploadPass) { + tile.upload(uploadPass); + + if (debugBucket) { + debugBucket->upload(uploadPass); + } +} + +void RenderTile::prepare(PaintParameters& parameters) { + if (parameters.debugOptions != MapDebugOptions::NoDebug && + (!debugBucket || debugBucket->renderable != tile.isRenderable() || + debugBucket->complete != tile.isComplete() || + !(debugBucket->modified == tile.modified) || + !(debugBucket->expires == tile.expires) || + debugBucket->debugMode != parameters.debugOptions)) { + debugBucket = std::make_unique( + tile.id, tile.isRenderable(), tile.isComplete(), tile.modified, tile.expires, + parameters.debugOptions); + } else if (parameters.debugOptions == MapDebugOptions::NoDebug) { + debugBucket.reset(); + } // Calculate two matrices for this tile: matrix is the standard tile matrix; nearClippedMatrix // clips the near plane to 100 to save depth buffer precision @@ -77,21 +101,10 @@ void RenderTile::finishRender(PaintParameters& parameters) { auto& program = parameters.programs.debug; - if (parameters.debugOptions != MapDebugOptions::NoDebug && - (!tile.debugBucket || tile.debugBucket->renderable != tile.isRenderable() || - tile.debugBucket->complete != tile.isComplete() || - !(tile.debugBucket->modified == tile.modified) || - !(tile.debugBucket->expires == tile.expires) || - tile.debugBucket->debugMode != parameters.debugOptions)) { - tile.debugBucket = std::make_unique( - tile.id, tile.isRenderable(), tile.isComplete(), tile.modified, tile.expires, - parameters.debugOptions, parameters.context); - } - if (parameters.debugOptions & (MapDebugOptions::Timestamps | MapDebugOptions::ParseStatus)) { - assert(tile.debugBucket); + assert(debugBucket); const auto allAttributeBindings = program.computeAllAttributeBindings( - *tile.debugBucket->vertexBuffer, + *debugBucket->vertexBuffer, paintAttributeData, properties ); @@ -104,8 +117,8 @@ void RenderTile::finishRender(PaintParameters& parameters) { gfx::StencilMode::disabled(), gfx::ColorMode::unblended(), gfx::CullFaceMode::disabled(), - *tile.debugBucket->indexBuffer, - tile.debugBucket->segments, + *debugBucket->indexBuffer, + debugBucket->segments, program.computeAllUniformValues( DebugProgram::LayoutUniformValues { uniforms::matrix::Value( matrix ), @@ -117,7 +130,7 @@ void RenderTile::finishRender(PaintParameters& parameters) { ), allAttributeBindings, DebugProgram::TextureBindings{}, - "__debug/" + tile.debugBucket->drawScopeID + "/text-outline" + "__debug/" + debugBucket->drawScopeID + "/text-outline" ); program.draw( @@ -128,8 +141,8 @@ void RenderTile::finishRender(PaintParameters& parameters) { gfx::StencilMode::disabled(), gfx::ColorMode::unblended(), gfx::CullFaceMode::disabled(), - *tile.debugBucket->indexBuffer, - tile.debugBucket->segments, + *debugBucket->indexBuffer, + debugBucket->segments, program.computeAllUniformValues( DebugProgram::LayoutUniformValues { uniforms::matrix::Value( matrix ), @@ -141,12 +154,12 @@ void RenderTile::finishRender(PaintParameters& parameters) { ), allAttributeBindings, DebugProgram::TextureBindings{}, - "__debug/" + tile.debugBucket->drawScopeID + "/text" + "__debug/" + debugBucket->drawScopeID + "/text" ); } if (parameters.debugOptions & MapDebugOptions::TileBorders) { - assert(tile.debugBucket); + assert(debugBucket); parameters.programs.debug.draw( parameters.context, *parameters.renderPass, @@ -155,7 +168,7 @@ void RenderTile::finishRender(PaintParameters& parameters) { gfx::StencilMode::disabled(), gfx::ColorMode::unblended(), gfx::CullFaceMode::disabled(), - parameters.staticData.tileBorderIndexBuffer, + *parameters.staticData.tileBorderIndexBuffer, parameters.staticData.tileBorderSegments, program.computeAllUniformValues( DebugProgram::LayoutUniformValues { @@ -167,12 +180,12 @@ void RenderTile::finishRender(PaintParameters& parameters) { parameters.state.getZoom() ), program.computeAllAttributeBindings( - parameters.staticData.tileVertexBuffer, + *parameters.staticData.tileVertexBuffer, paintAttributeData, properties ), DebugProgram::TextureBindings{}, - "__debug/" + tile.debugBucket->drawScopeID + "__debug/" + debugBucket->drawScopeID ); } } -- cgit v1.2.1