summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/painter_raster.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/painter_raster.cpp')
-rw-r--r--src/mbgl/renderer/painter_raster.cpp61
1 files changed, 30 insertions, 31 deletions
diff --git a/src/mbgl/renderer/painter_raster.cpp b/src/mbgl/renderer/painter_raster.cpp
index 98299ed342..e77b4cf535 100644
--- a/src/mbgl/renderer/painter_raster.cpp
+++ b/src/mbgl/renderer/painter_raster.cpp
@@ -1,11 +1,11 @@
#include <mbgl/renderer/painter.hpp>
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/render_tile.hpp>
-#include <mbgl/gl/gl.hpp>
#include <mbgl/renderer/raster_bucket.hpp>
#include <mbgl/style/layers/raster_layer.hpp>
#include <mbgl/style/layers/raster_layer_impl.hpp>
#include <mbgl/shader/shaders.hpp>
+#include <mbgl/shader/raster_uniforms.hpp>
namespace mbgl {
@@ -43,40 +43,39 @@ void Painter::renderRaster(PaintParameters& parameters,
RasterBucket& bucket,
const RasterLayer& layer,
const RenderTile& tile) {
- if (pass != RenderPass::Translucent) return;
+ if (pass != RenderPass::Translucent)
+ return;
+ if (!bucket.hasData())
+ return;
const RasterPaintProperties& properties = layer.impl->paint;
- if (bucket.hasData()) {
- auto& rasterShader = parameters.shaders.raster;
- auto& rasterVAO = parameters.shaders.coveringRasterArray;
+ assert(bucket.texture);
+ context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear);
+ context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear);
- context.program = rasterShader.getID();
- rasterShader.u_matrix = tile.matrix;
- rasterShader.u_buffer_scale = 1.0f;
- rasterShader.u_opacity0 = properties.rasterOpacity;
- rasterShader.u_opacity1 = 0;
-
- rasterShader.u_brightness_low = properties.rasterBrightnessMin;
- rasterShader.u_brightness_high = properties.rasterBrightnessMax;
- rasterShader.u_saturation_factor = saturationFactor(properties.rasterSaturation);
- rasterShader.u_contrast_factor = contrastFactor(properties.rasterContrast);
- rasterShader.u_spin_weights = spinWeights(properties.rasterHueRotate);
-
- context.stencilTest = false;
-
- rasterShader.u_image0 = 0; // GL_TEXTURE0
- rasterShader.u_image1 = 1; // GL_TEXTURE1
- rasterShader.u_tl_parent = {{ 0.0f, 0.0f }};
- rasterShader.u_scale_parent = 1.0f;
-
- context.depthFunc = gl::DepthTestFunction::LessEqual;
- context.depthTest = true;
- context.depthMask = false;
- setDepthSublayer(0);
-
- bucket.drawRaster(rasterShader, rasterVertexBuffer, rasterVAO, context);
- }
+ context.draw({
+ depthModeForSublayer(0, gl::DepthMode::ReadOnly),
+ gl::StencilMode::disabled(),
+ colorModeForRenderPass(),
+ parameters.shaders.raster,
+ RasterUniforms::values(
+ tile.matrix,
+ 0,
+ 1,
+ properties.rasterOpacity.value,
+ 0,
+ properties.rasterBrightnessMin.value,
+ properties.rasterBrightnessMax.value,
+ saturationFactor(properties.rasterSaturation.value),
+ contrastFactor(properties.rasterContrast.value),
+ spinWeights(properties.rasterHueRotate.value),
+ 1.0f,
+ 1.0f,
+ std::array<float, 2> {{ 0.0f, 0.0f }}
+ ),
+ gl::Unindexed<gl::TriangleStrip>(rasterVertexBuffer)
+ });
}
} // namespace mbgl