Support paletted rendering in WebGL

This commit is contained in:
Tim Schaub
2021-12-20 18:25:49 -07:00
parent 0c11a7514d
commit 59186f2afd
6 changed files with 221 additions and 10 deletions

View File

@@ -0,0 +1,62 @@
import DataTile from '../../../../src/ol/source/DataTile.js';
import Map from '../../../../src/ol/Map.js';
import TileLayer from '../../../../src/ol/layer/WebGLTile.js';
import View from '../../../../src/ol/View.js';
const size = 256;
const colors = [
'palegoldenrod',
'palegreen',
'paleturquoise',
'palevioletred',
'papayawhip',
'peachpuff',
'peru',
'pink',
'plum',
'powderblue',
'rosybrown',
'royalblue',
'saddlebrown',
'salmon',
'sandybrown',
'seagreen',
'seashell',
'sienna',
'skyblue',
];
new Map({
target: 'map',
layers: [
new TileLayer({
source: new DataTile({
loader: function () {
const data = new Float32Array(size * size);
const numColors = colors.length;
const numBlocks = 8;
const blockSize = size / numBlocks;
for (let row = 0; row < size; ++row) {
const r = Math.floor(row / blockSize);
for (let col = 0; col < size; ++col) {
const c = Math.floor(col / blockSize);
const colorIndex = (r * numBlocks + c) % numColors;
data[row * size + col] = colorIndex;
}
}
return data;
},
}),
style: {
color: ['palette', ['band', 1], colors],
},
}),
],
view: new View({
center: [0, 0],
zoom: 0,
}),
});
render({message: 'Renders colors from a palette'});