ExtrusionRenderer: fix translucency for meshes (#566)
This commit is contained in:
parent
334a5e3fdb
commit
2a0ec3d82e
@ -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);
|
||||
}
|
||||
|
@ -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]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user