void Painter::renderRaster(RasterBucket& bucket, const RasterLayer& layer, const UnwrappedTileID&, const mat4& matrix) { if (pass != RenderPass::Translucent) return; const RasterPaintProperties& properties = layer.impl->paint; if (bucket.hasData()) { config.program = rasterShader->getID(); rasterShader->u_matrix = matrix; rasterShader->u_buffer = 0; rasterShader->u_opacity = properties.rasterOpacity; 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); config.stencilTest = GL_FALSE; rasterShader->u_image = 0; config.activeTexture = GL_TEXTURE0; config.depthFunc.reset(); config.depthTest = GL_TRUE; config.depthMask = GL_FALSE; setDepthSublayer(0); bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray, store); } }
void Painter::renderRaster(RasterBucket& bucket, const StyleLayer &layer_desc, const TileID&, const mat4 &matrix) { if (pass != RenderPass::Translucent) return; const RasterProperties &properties = layer_desc.getProperties<RasterProperties>(); if (bucket.hasData()) { useProgram(rasterShader->program); rasterShader->u_matrix = matrix; rasterShader->u_buffer = 0; rasterShader->u_opacity = properties.opacity; rasterShader->u_brightness_low = properties.brightness[0]; rasterShader->u_brightness_high = properties.brightness[1]; rasterShader->u_saturation_factor = saturationFactor(properties.saturation); rasterShader->u_contrast_factor = contrastFactor(properties.contrast); rasterShader->u_spin_weights = spinWeights(properties.hue_rotate); config.stencilTest = true; config.depthTest = true; setDepthSublayer(0); bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray); } }
void Painter::renderRaster(RasterBucket& bucket, const RasterLayer& layer, const TileID&, const mat4& matrix) { if (pass != RenderPass::Translucent) return; const RasterPaintProperties& properties = layer.paint; if (bucket.hasData()) { config.program = rasterShader->program; rasterShader->u_matrix = matrix; rasterShader->u_buffer = 0; rasterShader->u_opacity = properties.opacity; rasterShader->u_brightness_low = properties.brightnessMin; rasterShader->u_brightness_high = properties.brightnessMax; rasterShader->u_saturation_factor = saturationFactor(properties.saturation); rasterShader->u_contrast_factor = contrastFactor(properties.contrast); rasterShader->u_spin_weights = spinWeights(properties.hueRotate); config.stencilOp.reset(); config.stencilTest = GL_TRUE; config.depthFunc.reset(); config.depthTest = GL_TRUE; setDepthSublayer(0); bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray); } }
void Painter::renderRaster(RasterBucket& bucket, util::ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix) { if (pass != RenderPass::Translucent) return; const RasterProperties &properties = layer_desc->getProperties<RasterProperties>(); if (layer_desc->layers) { if (!bucket.texture.getTexture()) { bucket.texture.bindFramebuffer(); preparePrerender(bucket); const int buffer = bucket.properties.buffer * 4096.0f; const mat4 preMatrix = [&]{ mat4 vtxMatrix; matrix::ortho(vtxMatrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1); matrix::translate(vtxMatrix, vtxMatrix, 0, -4096, 0); return vtxMatrix; }(); for (const util::ptr<StyleLayer> &layer : layer_desc->layers->layers) { setOpaque(); renderLayer(layer, &id, &preMatrix); setTranslucent(); renderLayer(layer, &id, &preMatrix); } if (bucket.properties.blur > 0) { bucket.texture.blur(*this, bucket.properties.blur); } bucket.texture.unbindFramebuffer(); glEnable(GL_DEPTH_TEST); glEnable(GL_STENCIL_TEST); glViewport(0, 0, gl_viewport[0], gl_viewport[1]); } renderPrerenderedTexture(bucket, matrix, properties); } // Only draw non-prerendered raster here if (bucket.hasData()) { depthMask(false); useProgram(rasterShader->program); rasterShader->u_matrix = matrix; rasterShader->u_buffer = 0; rasterShader->u_opacity = properties.opacity; rasterShader->u_brightness_low = properties.brightness[0]; rasterShader->u_brightness_high = properties.brightness[1]; rasterShader->u_saturation_factor = saturationFactor(properties.saturation); rasterShader->u_contrast_factor = contrastFactor(properties.contrast); rasterShader->u_spin_weights = spinWeights(properties.hue_rotate); depthRange(strata + strata_epsilon, 1.0f); bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray); depthMask(true); } }