diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-03-07 17:50:02 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-03-12 11:03:54 +0100 |
commit | e27f33062994a1b0155b44b9d471e48e93b09f8e (patch) | |
tree | eff2ba71134b9721c16fd53378b9256b94396712 /src/mbgl/renderer/layers/render_hillshade_layer.cpp | |
parent | cb64c380fbbd209cb68af60e76b7a770805353a8 (diff) | |
download | qtlocation-mapboxgl-e27f33062994a1b0155b44b9d471e48e93b09f8e.tar.gz |
[core] add texture bindings to draw call instead of Context member fn
Diffstat (limited to 'src/mbgl/renderer/layers/render_hillshade_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_hillshade_layer.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index 70ff2379d4..b428e357e7 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -67,7 +67,8 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src const auto& vertexBuffer, const auto& indexBuffer, const auto& segments, - const UnwrappedTileID& id) { + const UnwrappedTileID& id, + const auto& textureBindings) { auto& programInstance = parameters.programs.getHillshadeLayerPrograms().hillshade; const HillshadeProgram::Binders paintAttributeData{ evaluated, 0 }; @@ -75,7 +76,6 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src const auto allUniformValues = programInstance.computeAllUniformValues( HillshadeProgram::UniformValues { uniforms::u_matrix::Value( matrix ), - uniforms::u_image::Value( 0 ), uniforms::u_highlight::Value( evaluated.get<HillshadeHighlightColor>() ), uniforms::u_shadow::Value( evaluated.get<HillshadeShadowColor>() ), uniforms::u_accent::Value( evaluated.get<HillshadeAccentColor>() ), @@ -105,7 +105,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src segments, allUniformValues, allAttributeBindings, - HillshadeProgram::TextureBindings{}, + textureBindings, getID() ); }; @@ -126,12 +126,12 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src } if (!bucket.isPrepared() && parameters.pass == RenderPass::Pass3D) { + assert(bucket.dem); const uint16_t stride = bucket.getDEMData().stride; const uint16_t tilesize = bucket.getDEMData().dim; OffscreenTexture view(parameters.context, { tilesize, tilesize }); view.bind(); - - parameters.context.bindTexture(*bucket.dem, 0, gfx::TextureFilterType::Nearest, gfx::TextureMipMapType::No, gfx::TextureWrapType::Clamp, gfx::TextureWrapType::Clamp); + const Properties<>::PossiblyEvaluated properties; const HillshadePrepareProgram::Binders paintAttributeData{ properties, 0 }; @@ -143,7 +143,6 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src uniforms::u_dimension::Value( {{stride, stride}} ), uniforms::u_zoom::Value( float(tile.id.canonical.z) ), uniforms::u_maxzoom::Value( float(maxzoom) ), - uniforms::u_image::Value( 0 ) }, paintAttributeData, properties, @@ -168,14 +167,15 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src parameters.staticData.rasterSegments, allUniformValues, allAttributeBindings, - HillshadePrepareProgram::TextureBindings{}, + HillshadePrepareProgram::TextureBindings{ + textures::u_image::Value{ *bucket.dem->resource }, + }, getID() ); bucket.texture = std::move(view.getTexture()); bucket.setPrepared(true); } else if (parameters.pass == RenderPass::Translucent) { assert(bucket.texture); - parameters.context.bindTexture(*bucket.texture, 0, gfx::TextureFilterType::Linear, gfx::TextureMipMapType::No, gfx::TextureWrapType::Clamp, gfx::TextureWrapType::Clamp); if (bucket.vertexBuffer && bucket.indexBuffer && !bucket.segments.empty()) { // Draw only the parts of the tile that aren't drawn by another tile in the layer. @@ -183,14 +183,20 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src *bucket.vertexBuffer, *bucket.indexBuffer, bucket.segments, - tile.id); + tile.id, + HillshadeProgram::TextureBindings{ + textures::u_image::Value{ *bucket.texture->resource, gfx::TextureFilterType::Linear }, + }); } else { // Draw the full tile. draw(parameters.matrixForTile(tile.id, true), parameters.staticData.rasterVertexBuffer, parameters.staticData.quadTriangleIndexBuffer, parameters.staticData.rasterSegments, - tile.id); + tile.id, + HillshadeProgram::TextureBindings{ + textures::u_image::Value{ *bucket.texture->resource, gfx::TextureFilterType::Linear }, + }); } } |