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_raster_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_raster_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index a9fdcc0320..f68acd4061 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -77,14 +77,13 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source auto draw = [&] (const mat4& matrix, const auto& vertexBuffer, const auto& indexBuffer, - const auto& segments) { + const auto& segments, + const auto& textureBindings) { auto& programInstance = parameters.programs.getRasterLayerPrograms().raster; const auto allUniformValues = programInstance.computeAllUniformValues( RasterProgram::UniformValues { uniforms::u_matrix::Value( matrix ), - uniforms::u_image0::Value( 0 ), - uniforms::u_image1::Value( 1 ), uniforms::u_opacity::Value( evaluated.get<RasterOpacity>() ), uniforms::u_fade_t::Value( 1 ), uniforms::u_brightness_low::Value( evaluated.get<RasterBrightnessMin>() ), @@ -119,7 +118,7 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source segments, allUniformValues, allAttributeBindings, - RasterProgram::TextureBindings{}, + textureBindings, getID() ); }; @@ -129,16 +128,17 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source if (RenderImageSource* imageSource = source->as<RenderImageSource>()) { if (imageSource->isEnabled() && imageSource->isLoaded() && !imageSource->bucket->needsUpload()) { RasterBucket& bucket = *imageSource->bucket; - assert(bucket.texture); - parameters.context.bindTexture(*bucket.texture, 0, filter); - parameters.context.bindTexture(*bucket.texture, 1, filter); for (auto matrix_ : imageSource->matrices) { draw(matrix_, *bucket.vertexBuffer, *bucket.indexBuffer, - bucket.segments); + bucket.segments, + RasterProgram::TextureBindings{ + textures::u_image0::Value{ *bucket.texture->resource, filter }, + textures::u_image1::Value{ *bucket.texture->resource, filter }, + }); } } } else { @@ -153,21 +153,26 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source continue; assert(bucket.texture); - parameters.context.bindTexture(*bucket.texture, 0, filter); - parameters.context.bindTexture(*bucket.texture, 1, filter); - 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. draw(parameters.matrixForTile(tile.id, true), *bucket.vertexBuffer, *bucket.indexBuffer, - bucket.segments); + bucket.segments, + RasterProgram::TextureBindings{ + textures::u_image0::Value{ *bucket.texture->resource, filter }, + textures::u_image1::Value{ *bucket.texture->resource, filter }, + }); } else { // Draw the full tile. draw(parameters.matrixForTile(tile.id, true), parameters.staticData.rasterVertexBuffer, parameters.staticData.quadTriangleIndexBuffer, - parameters.staticData.rasterSegments); + parameters.staticData.rasterSegments, + RasterProgram::TextureBindings{ + textures::u_image0::Value{ *bucket.texture->resource, filter }, + textures::u_image1::Value{ *bucket.texture->resource, filter }, + }); } } } |