StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.2 KiB
58 lines
2.2 KiB
// @flow
|
|
|
|
import StencilMode from '../gl/stencil_mode';
|
|
import DepthMode from '../gl/depth_mode';
|
|
import CullFaceMode from '../gl/cull_face_mode';
|
|
import {
|
|
backgroundUniformValues,
|
|
backgroundPatternUniformValues
|
|
} from './program/background_program';
|
|
|
|
import type Painter from './painter';
|
|
import type SourceCache from '../source/source_cache';
|
|
import type BackgroundStyleLayer from '../style/style_layer/background_style_layer';
|
|
|
|
export default drawBackground;
|
|
|
|
function drawBackground(painter: Painter, sourceCache: SourceCache, layer: BackgroundStyleLayer) {
|
|
const color = layer.paint.get('background-color');
|
|
const opacity = layer.paint.get('background-opacity');
|
|
|
|
if (opacity === 0) return;
|
|
|
|
const context = painter.context;
|
|
const gl = context.gl;
|
|
const transform = painter.transform;
|
|
const tileSize = transform.tileSize;
|
|
const image = layer.paint.get('background-pattern');
|
|
if (painter.isPatternMissing(image)) return;
|
|
|
|
const pass = (!image && color.a === 1 && opacity === 1 && painter.opaquePassEnabledForLayer()) ? 'opaque' : 'translucent';
|
|
if (painter.renderPass !== pass) return;
|
|
|
|
const stencilMode = StencilMode.disabled;
|
|
const depthMode = painter.depthModeForSublayer(0, pass === 'opaque' ? DepthMode.ReadWrite : DepthMode.ReadOnly);
|
|
const colorMode = painter.colorModeForRenderPass();
|
|
|
|
const program = painter.useProgram(image ? 'backgroundPattern' : 'background');
|
|
|
|
const tileIDs = transform.coveringTiles({tileSize});
|
|
|
|
if (image) {
|
|
context.activeTexture.set(gl.TEXTURE0);
|
|
painter.imageManager.bind(painter.context);
|
|
}
|
|
|
|
const crossfade = layer.getCrossfadeParameters();
|
|
for (const tileID of tileIDs) {
|
|
const matrix = painter.transform.calculatePosMatrix(tileID.toUnwrapped());
|
|
|
|
const uniformValues = image ?
|
|
backgroundPatternUniformValues(matrix, opacity, painter, image, {tileID, tileSize}, crossfade) :
|
|
backgroundUniformValues(matrix, opacity, color);
|
|
|
|
program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled,
|
|
uniformValues, layer.id, painter.tileExtentBuffer,
|
|
painter.quadTriangleIndexBuffer, painter.tileExtentSegments);
|
|
}
|
|
}
|
|
|