ExtrusionRenderer: fix translucency for meshes (#566)

This commit is contained in:
Gustl22 2018-08-23 22:54:25 +02:00 committed by Emux
parent 334a5e3fdb
commit 2a0ec3d82e
No known key found for this signature in database
GPG Key ID: 64ED9980896038C3
2 changed files with 10 additions and 5 deletions

View File

@ -52,8 +52,10 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
public static boolean POST_AA = false;
/**
* Don't draw extrusions which are covered by others.
* Especially if the side of extrusion is translucent.
* Let vanish extrusions / meshes which are covered by others.
* {@link org.oscim.renderer.bucket.RenderBucket#EXTRUSION}: roofs are always translucent.
* <p>
* To better notice the difference, reduce the alpha value of extrusion colors in themes.
*/
public static boolean TRANSLUCENT = true;
@ -98,9 +100,7 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
// Use zoomMin as zoomLimit to render buildings only once
mZoomLimiter = new ZoomLimiter(tileLayer.getManager(), zoomMin, zoomMax, zoomMin);
// Covered extrusions must be drawn for mesh renderer
mRenderer = new BuildingRenderer(tileLayer.tileRenderer(), mZoomLimiter,
mesh, !mesh && TRANSLUCENT);
mRenderer = new BuildingRenderer(tileLayer.tileRenderer(), mZoomLimiter, mesh, TRANSLUCENT);
if (POST_AA)
mRenderer = new OffscreenRenderer(Mode.SSAO_FXAA, mRenderer);
}

View File

@ -232,6 +232,11 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
/* draw triangle meshes (mMesh == true) */
if (eb.idx[4] > 0) {
if (mTranslucent) {
gl.depthFunc(GL.EQUAL);
setMatrix(s, v, ebs[i]);
}
gl.drawElements(GL.TRIANGLES, eb.idx[4],
GL.UNSIGNED_SHORT, eb.off[4]);
}