[core] Enable face culling for fill extrusion layers

Use face culling for fill extrusion layers. Winding order is changed to
ensure correct rendering.
This commit is contained in:
Bruno de Oliveira Abinader
2018-09-10 10:59:27 +03:00
committed by Ander Conselvan de Oliveira
parent 05a7b78aa8
commit 5b1925d521
2 changed files with 10 additions and 4 deletions

View File

@@ -126,7 +126,12 @@ void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature,
vertices.emplace_back(
FillExtrusionProgram::layoutVertex(p2, perp.x, perp.y, 0, 1, edgeDistance));
triangles.emplace_back(triangleIndex, triangleIndex + 1, triangleIndex + 2);
// ┌──────┐
// │ 0 1 │ Counter-Clockwise winding order.
// │ │ Triangle 1: 0 => 2 => 1
// │ 2 3 │ Triangle 2: 1 => 2 => 3
// └──────┘
triangles.emplace_back(triangleIndex, triangleIndex + 2, triangleIndex + 1);
triangles.emplace_back(triangleIndex + 1, triangleIndex + 2, triangleIndex + 3);
triangleIndex += 4;
triangleSegment.vertexLength += 4;
@@ -141,8 +146,9 @@ void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature,
assert(nIndices % 3 == 0);
for (uint32_t i = 0; i < nIndices; i += 3) {
triangles.emplace_back(flatIndices[indices[i]], flatIndices[indices[i + 1]],
flatIndices[indices[i + 2]]);
// Counter-Clockwise winding order.
triangles.emplace_back(flatIndices[indices[i]], flatIndices[indices[i + 2]],
flatIndices[indices[i + 1]]);
}
triangleSegment.vertexLength += totalVertices;

View File

@@ -109,7 +109,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
parameters.depthModeFor3D(gl::DepthMode::ReadWrite),
gl::StencilMode::disabled(),
parameters.colorModeForRenderPass(),
gl::CullFaceMode::disabled(),
gl::CullFaceMode::backCCW(),
*tileBucket.indexBuffer,
tileBucket.triangleSegments,
allUniformValues,