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;
|
public static boolean POST_AA = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Don't draw extrusions which are covered by others.
|
* Let vanish extrusions / meshes which are covered by others.
|
||||||
* Especially if the side of extrusion is translucent.
|
* {@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;
|
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
|
// Use zoomMin as zoomLimit to render buildings only once
|
||||||
mZoomLimiter = new ZoomLimiter(tileLayer.getManager(), zoomMin, zoomMax, zoomMin);
|
mZoomLimiter = new ZoomLimiter(tileLayer.getManager(), zoomMin, zoomMax, zoomMin);
|
||||||
|
|
||||||
// Covered extrusions must be drawn for mesh renderer
|
mRenderer = new BuildingRenderer(tileLayer.tileRenderer(), mZoomLimiter, mesh, TRANSLUCENT);
|
||||||
mRenderer = new BuildingRenderer(tileLayer.tileRenderer(), mZoomLimiter,
|
|
||||||
mesh, !mesh && TRANSLUCENT);
|
|
||||||
if (POST_AA)
|
if (POST_AA)
|
||||||
mRenderer = new OffscreenRenderer(Mode.SSAO_FXAA, mRenderer);
|
mRenderer = new OffscreenRenderer(Mode.SSAO_FXAA, mRenderer);
|
||||||
}
|
}
|
||||||
|
@ -232,6 +232,11 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
/* draw triangle meshes (mMesh == true) */
|
/* draw triangle meshes (mMesh == true) */
|
||||||
if (eb.idx[4] > 0) {
|
if (eb.idx[4] > 0) {
|
||||||
|
if (mTranslucent) {
|
||||||
|
gl.depthFunc(GL.EQUAL);
|
||||||
|
setMatrix(s, v, ebs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
gl.drawElements(GL.TRIANGLES, eb.idx[4],
|
gl.drawElements(GL.TRIANGLES, eb.idx[4],
|
||||||
GL.UNSIGNED_SHORT, eb.off[4]);
|
GL.UNSIGNED_SHORT, eb.off[4]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user