If you assign the same material index to the two triangles of a quad, you get what you want.
The thing works of course also with BufferGeometry and thus for current revisions.
Take a look at these things.
ColorWave
DoubleSide(gl_FrontFacing)
( From the Collection of examples from discourse.threejs.org . )
Select faces within radius
Wireframe of quads
Magic Box example 20
To THREE.Geometry will be removed from core with r125 - #26 by hofk
ind.BufferGeo SpeedTest_r124
see also Faces on BufferGeometry
To compare old geometry and BufferGeometry (example SpeedTest)
// faces Geometry or BufferGeometry
for ( let j = 0; j < rs; j ++ ) {
j0 = hss * j;
j1 = hss * ( j + 1 );
for ( let i = 0; i < hs; i ++ ) {
// 2 faces / segment, 3 vertex indices
a = j0 + i;
b1 = j1 + i; // right-bottom
c1 = j1 + 1 + i;
// b2 = j1 + 1 + i; =c1// left-top
c2 = j0 + 1 + i;
if ( g.isGeometry ) {
g.faces.push( new THREE.Face3( a, b1, c1 ) ); // right-bottom
g.faces.push( new THREE.Face3( a, c1, c2 ) ); // left-top
}
if ( g.isBufferGeometry ) {
g.faceIndices[ idxCount ] = a; // right-bottom
g.faceIndices[ idxCount + 1 ] = b1;
g.faceIndices[ idxCount + 2 ] = c1;
g.faceIndices[ idxCount + 3 ] = a; // left-top
g.faceIndices[ idxCount + 4 ] = c1,
g.faceIndices[ idxCount + 5 ] = c2;
idxCount += 6;
}
}
}