|
2 | 2 |
|
3 | 3 | var textVertices = require('../lib/debugtext');
|
4 | 4 | var browser = require('../util/browser');
|
| 5 | +var mat4 = require('gl-matrix').mat4; |
| 6 | +var EXTENT = require('../data/buffer').EXTENT; |
5 | 7 |
|
6 | 8 | module.exports = drawDebug;
|
7 | 9 |
|
8 |
| -function drawDebug(painter, coords) { |
| 10 | +function drawDebug(painter, source, coords) { |
9 | 11 | if (painter.isOpaquePass) return;
|
10 | 12 | if (!painter.options.debug) return;
|
11 | 13 |
|
12 | 14 | for (var i = 0; i < coords.length; i++) {
|
13 |
| - drawDebugTile(painter, coords[i]); |
| 15 | + drawDebugTile(painter, source, coords[i]); |
14 | 16 | }
|
15 | 17 | }
|
16 | 18 |
|
17 |
| -function drawDebugTile(painter, coord) { |
| 19 | +function drawDebugTile(painter, source, coord) { |
18 | 20 | var gl = painter.gl;
|
19 | 21 |
|
| 22 | + gl.lineWidth(1 * browser.devicePixelRatio); |
| 23 | + |
| 24 | + var posMatrix = painter.calculatePosMatrix(coord, source.maxzoom); |
20 | 25 | var shader = painter.debugShader;
|
21 |
| - gl.switchShader(shader, painter.calculatePosMatrix(coord)); |
| 26 | + gl.switchShader(shader, posMatrix); |
22 | 27 |
|
23 | 28 | // draw bounding rectangle
|
24 | 29 | gl.bindBuffer(gl.ARRAY_BUFFER, painter.debugBuffer);
|
25 | 30 | gl.vertexAttribPointer(shader.a_pos, painter.debugBuffer.itemSize, gl.SHORT, false, 0, 0);
|
26 | 31 | gl.uniform4f(shader.u_color, 1, 0, 0, 1);
|
27 |
| - gl.lineWidth(4); |
28 | 32 | gl.drawArrays(gl.LINE_STRIP, 0, painter.debugBuffer.itemCount);
|
29 | 33 |
|
30 | 34 | var vertices = textVertices(coord.toString(), 50, 200, 5);
|
31 |
| - |
32 | 35 | gl.bindBuffer(gl.ARRAY_BUFFER, painter.debugTextBuffer);
|
33 | 36 | gl.bufferData(gl.ARRAY_BUFFER, new Int16Array(vertices), gl.STREAM_DRAW);
|
34 | 37 | gl.vertexAttribPointer(shader.a_pos, painter.debugTextBuffer.itemSize, gl.SHORT, false, 0, 0);
|
35 |
| - gl.lineWidth(8 * browser.devicePixelRatio); |
36 | 38 | gl.uniform4f(shader.u_color, 1, 1, 1, 1);
|
37 |
| - gl.drawArrays(gl.LINES, 0, vertices.length / painter.debugTextBuffer.itemSize); |
38 |
| - gl.lineWidth(2 * browser.devicePixelRatio); |
| 39 | + |
| 40 | + // Draw the halo with multiple 1px lines instead of one wider line because |
| 41 | + // the gl spec doesn't guarantee support for lines with width > 1. |
| 42 | + var tileSize = source.getTile(coord).tileSize; |
| 43 | + var onePixel = EXTENT / (Math.pow(2, painter.transform.zoom - coord.z) * tileSize); |
| 44 | + for (var x = -1; x <= 1; x += 2) { |
| 45 | + for (var y = -1; y <= 1; y += 2) { |
| 46 | + gl.setPosMatrix(mat4.translate([], posMatrix, [onePixel * x, onePixel * y, 0])); |
| 47 | + gl.drawArrays(gl.LINES, 0, vertices.length / painter.debugTextBuffer.itemSize); |
| 48 | + } |
| 49 | + } |
| 50 | + |
39 | 51 | gl.uniform4f(shader.u_color, 0, 0, 0, 1);
|
| 52 | + gl.setPosMatrix(posMatrix); |
40 | 53 | gl.drawArrays(gl.LINES, 0, vertices.length / painter.debugTextBuffer.itemSize);
|
41 | 54 | }
|
0 commit comments