MCPcopy Create free account
hub / github.com/SuperMap/iClient-JavaScript / draw$4

Function draw$4

libs/mapv/mapv.js:2254–2332  ·  view source on GitHub ↗
(gl, data, options)

Source from the content-addressed store, hash-verified

2252var fs_s$2 = ['precision mediump float;', 'uniform vec4 u_FragColor;', 'void main() {', 'gl_FragColor = u_FragColor;', '}'].join('');
2253
2254function draw$4(gl, data, options) {
2255
2256 if (!data) {
2257 return;
2258 }
2259
2260 // gl.clearColor(0.0, 0.0, 0.0, 1.0);
2261 gl.clear(gl.COLOR_BUFFER_BIT);
2262 gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
2263
2264 var program = initShaders(gl, vs_s$2, fs_s$2);
2265
2266 gl.enable(gl.BLEND);
2267 gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
2268
2269 var halfCanvasWidth = gl.canvas.width / 2;
2270 var halfCanvasHeight = gl.canvas.height / 2;
2271
2272 // Bind the buffer object to target
2273 gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
2274 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());
2275
2276 var a_Position = gl.getAttribLocation(program, 'a_Position');
2277 // Assign the buffer object to a_Position variable
2278 gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
2279
2280 // Enable the assignment to a_Position variable
2281 gl.enableVertexAttribArray(a_Position);
2282
2283 var uFragColor = gl.getUniformLocation(program, 'u_FragColor');
2284
2285 var colored = getColorData(options.fillStyle || 'red');
2286
2287 gl.uniform4f(uFragColor, colored[0] / 255, colored[1] / 255, colored[2] / 255, colored[3] / 255);
2288
2289 gl.lineWidth(options.lineWidth || 1);
2290
2291 var verticesArr = [];
2292 var trianglesArr = [];
2293
2294 var maxSize = 65536;
2295 var indexOffset = 0;
2296
2297 for (var i = 0, len = data.length; i < len; i++) {
2298
2299 var flatten = earcut.flatten(data[i].geometry._coordinates || data[i].geometry.coordinates);
2300 var vertices = flatten.vertices;
2301 indexOffset = verticesArr.length / 2;
2302 for (var j = 0; j < vertices.length; j += 2) {
2303 vertices[j] = (vertices[j] - halfCanvasWidth) / halfCanvasWidth;
2304 vertices[j + 1] = (halfCanvasHeight - vertices[j + 1]) / halfCanvasHeight;
2305 }
2306
2307 if ((verticesArr.length + vertices.length) / 2 > maxSize) {
2308 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(verticesArr), gl.STATIC_DRAW);
2309 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(trianglesArr), gl.STATIC_DRAW);
2310 gl.drawElements(gl.TRIANGLES, trianglesArr.length, gl.UNSIGNED_SHORT, 0);
2311 verticesArr.length = 0;

Callers

nothing calls this directly

Calls 6

getColorDataFunction · 0.85
earcutFunction · 0.85
flattenMethod · 0.80
pushMethod · 0.80
initShadersFunction · 0.70
clearMethod · 0.45

Tested by

no test coverage detected