Skip to content

Commit f0e7cf6

Browse files
committed
move wireframe mesh transform into separate file
1 parent d60e307 commit f0e7cf6

File tree

3 files changed

+37
-29
lines changed

3 files changed

+37
-29
lines changed

src/builders/wireframe.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Rearranges element array for triangles into a new element array that draws a wireframe
2+
// Used for debugging
3+
export default function makeWireframeForTriangleElementData (element_data) {
4+
const wireframe_data = new Uint16Array(element_data.length * 2);
5+
6+
// Draw triangles as lines:
7+
// Make a copy of element_data, and for every group of three vertices, duplicate
8+
// each vertex according to the following pattern:
9+
// [1, 2, 3] => [1, 2, 2, 3, 3, 1]
10+
// This takes three vertices which would have been interpreted as a triangle,
11+
// and converts them into three 2-vertex line segments.
12+
for (let i = 0; i < element_data.length; i += 3) {
13+
wireframe_data.set(
14+
[
15+
element_data[i],
16+
element_data[i+1],
17+
element_data[i+1],
18+
element_data[i+2],
19+
element_data[i+2],
20+
element_data[i]
21+
],
22+
i * 2
23+
);
24+
}
25+
return wireframe_data;
26+
}

src/gl/vbo_mesh.js

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default class VBOMesh {
1515
this.vertex_layout = vertex_layout;
1616
this.vertex_buffer = this.gl.createBuffer();
1717
this.buffer_size = this.vertex_data.byteLength;
18-
this.draw_mode = options.wireframe ? this.gl.LINES : (options.draw_mode || this.gl.TRIANGLES);
18+
this.draw_mode = options.draw_mode || this.gl.TRIANGLES;
1919
this.data_usage = options.data_usage || this.gl.STATIC_DRAW;
2020
this.vertices_per_geometry = 3; // TODO: support lines, strip, fan, etc.
2121
this.uniforms = options.uniforms;
@@ -29,31 +29,7 @@ export default class VBOMesh {
2929
this.vaos = {}; // map of VertexArrayObjects, keyed by program
3030

3131
this.toggle_element_array = false;
32-
3332
if (this.element_data) {
34-
// NB: wireframe mode only works with triangles, provided as element data
35-
// undefined results if passing in vertex buffer only, or non-triangle draw mode
36-
if (options.wireframe) {
37-
const wireframe_data = new Uint16Array(this.element_data.length * 2);
38-
// Draw triangles as lines:
39-
// Make a copy of element_data, and for every group of three vertices, duplicate
40-
// each vertex according to the following pattern:
41-
// [1, 2, 3] => [1, 2, 2, 3, 3, 1]
42-
// This takes three vertices which would have been interpreted as a triangle,
43-
// and converts them into three 2-vertex line segments.
44-
for (let i = 0; i < this.element_data.length; i += 3) {
45-
wireframe_data.set([
46-
this.element_data[i],
47-
this.element_data[i+1],
48-
this.element_data[i+1],
49-
this.element_data[i+2],
50-
this.element_data[i+2],
51-
this.element_data[i]
52-
], i * 2
53-
);
54-
}
55-
this.element_data = wireframe_data;
56-
}
5733
this.toggle_element_array = true;
5834
this.element_count = this.element_data.length;
5935
this.geometry_count = this.element_count / this.vertices_per_geometry;

src/styles/style.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import log from '../utils/log';
1313
import mergeObjects from '../utils/merge';
1414
import Thread from '../utils/thread';
1515
import WorkerBroker from '../utils/worker_broker';
16+
import makeWireframeForTriangleElementData from '../builders/wireframe';
1617
import debugSettings from '../utils/debug_settings';
1718

1819
import selection_fragment_source from '../selection/selection_fragment.glsl';
@@ -411,10 +412,15 @@ export var Style = {
411412

412413
makeMesh (vertex_data, vertex_elements, options = {}) {
413414
let vertex_layout = this.vertexLayoutForMeshVariant(options.variant);
414-
return new VBOMesh(this.gl,
415-
vertex_data, vertex_elements, vertex_layout,
416-
{ ...options, wireframe: debugSettings.wireframe }
417-
);
415+
416+
if (debugSettings.wireframe) {
417+
// In wireframe debug mode, transform mesh into lines
418+
vertex_elements = makeWireframeForTriangleElementData(vertex_elements);
419+
return new VBOMesh(this.gl, vertex_data, vertex_elements, vertex_layout,
420+
{ ...options, draw_mode: this.gl.LINES });
421+
}
422+
423+
return new VBOMesh(this.gl, vertex_data, vertex_elements, vertex_layout, options);
418424
},
419425

420426
render (mesh) {

0 commit comments

Comments
 (0)