BuildingLayer: add shadow parameter #575

This commit is contained in:
Emux 2019-02-21 20:12:20 +02:00
parent 7cfbe1c115
commit f348296a8c
No known key found for this signature in database
GPG Key ID: 64ED9980896038C3
5 changed files with 39 additions and 46 deletions

View File

@ -1,5 +1,6 @@
/*
* Copyright 2019 Gustl22
* Copyright 2019 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
@ -19,34 +20,25 @@ import android.view.View;
import android.widget.SeekBar;
import android.widget.ToggleButton;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.renderer.ExtrusionRenderer;
import org.oscim.renderer.light.Sun;
public class ShadowActivity extends SimpleMapActivity implements SeekBar.OnSeekBarChangeListener {
public ShadowActivity() {
super(R.layout.activity_shadow);
}
private SeekBar mSeekBar;
public ShadowActivity() {
super(true, R.layout.activity_shadow);
}
@Override
public void onCreate(Bundle savedInstanceState) {
BuildingLayer.SHADOW = true;
super.onCreate(savedInstanceState);
mSeekBar = findViewById(R.id.seekBarShadow);
mSeekBar.setOnSeekBarChangeListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
BuildingLayer.SHADOW = false;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int id = seekBar.getId();

View File

@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86
* Copyright 2016-2019 devemux86
* Copyright 2019 Gustl22
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@ -41,14 +41,20 @@ public class SimpleMapActivity extends BaseMapActivity {
private DefaultMapScaleBar mapScaleBar;
BuildingLayer mBuildingLayer;
LabelLayer mLabelLayer;
public SimpleMapActivity(int contentView) {
super(contentView);
}
private boolean mShadow;
public SimpleMapActivity() {
this(false);
}
public SimpleMapActivity(boolean shadow) {
super();
mShadow = shadow;
}
public SimpleMapActivity(boolean shadow, int contentView) {
super(contentView);
mShadow = shadow;
}
@Override
@ -60,10 +66,9 @@ public class SimpleMapActivity extends BaseMapActivity {
void createLayers() {
GroupLayer groupLayer = new GroupLayer(mMap);
mBuildingLayer = new BuildingLayer(mMap, mBaseLayer);
mBuildingLayer = new BuildingLayer(mMap, mBaseLayer, false, mShadow);
groupLayer.layers.add(mBuildingLayer);
mLabelLayer = new LabelLayer(mMap, mBaseLayer);
groupLayer.layers.add(mLabelLayer);
groupLayer.layers.add(new LabelLayer(mMap, mBaseLayer));
mMap.layers().add(groupLayer);
mapScaleBar = new DefaultMapScaleBar(mMap);

View File

@ -68,8 +68,7 @@ public class MapsforgeTest extends GdxMapApp {
VectorTileLayer l = mMap.setBaseMap(tileSource);
loadTheme(null);
BuildingLayer.SHADOW = SHADOWS;
BuildingLayer buildingLayer = s3db ? new S3DBLayer(mMap, l) : new BuildingLayer(mMap, l);
BuildingLayer buildingLayer = s3db ? new S3DBLayer(mMap, l, SHADOWS) : new BuildingLayer(mMap, l, false, SHADOWS);
mMap.layers().add(buildingLayer);
if (poi3d)
@ -117,9 +116,6 @@ public class MapsforgeTest extends GdxMapApp {
@Override
public void dispose() {
if (SHADOWS)
BuildingLayer.SHADOW = false;
MapPreferences.saveMapPosition(mMap.getMapPosition());
super.dispose();
}

View File

@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86
* Copyright 2016-2019 devemux86
* Copyright 2016 Robin Boldt
* Copyright 2017-2019 Gustl22
*
@ -60,11 +60,6 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
*/
public static boolean RAW_DATA = false;
/**
* Use shadow rendering.
*/
public static boolean SHADOW = false;
/**
* Let vanish extrusions / meshes which are covered by others.
* {@link org.oscim.renderer.bucket.RenderBucket#EXTRUSION}: roofs are always translucent.
@ -95,11 +90,11 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
}
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
this(map, tileLayer, false);
this(map, tileLayer, false, false);
}
public BuildingLayer(Map map, VectorTileLayer tileLayer, boolean mesh) {
this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel(), mesh);
public BuildingLayer(Map map, VectorTileLayer tileLayer, boolean mesh, boolean shadow) {
this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel(), mesh, shadow);
}
/**
@ -108,9 +103,9 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
* @param zoomMin The minimum zoom at which the layer appears
* @param zoomMax The maximum zoom at which the layer appears
* @param mesh Declare if using mesh or polygon renderer
* @param shadow Declare if using shadow renderer
*/
public BuildingLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax, boolean mesh) {
public BuildingLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax, boolean mesh, boolean shadow) {
super(map);
tileLayer.addHook(this);
@ -119,8 +114,8 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook, ZoomLim
mZoomLimiter = new ZoomLimiter(tileLayer.getManager(), zoomMin, zoomMax, zoomMin);
mRenderer = mExtrusionRenderer = new BuildingRenderer(tileLayer.tileRenderer(), mZoomLimiter, mesh, TRANSLUCENT);
// TODO Allow SHADOW and POST_AA at same time
if (SHADOW)
// TODO Allow shadow and POST_AA at same time
if (shadow)
mRenderer = new ShadowRenderer(mExtrusionRenderer);
else if (POST_AA)
mRenderer = new OffscreenRenderer(Mode.SSAO_FXAA, mRenderer);

View File

@ -1,6 +1,6 @@
/*
* Copyright 2018 Gustl22
* Copyright 2018 devemux86
* Copyright 2018-2019 devemux86
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
@ -38,7 +38,7 @@ import java.util.Set;
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
/**
* An experimental layer to display S3DB elements.
* A layer to display S3DB elements.
*/
public class S3DBLayer extends BuildingLayer {
@ -50,7 +50,11 @@ public class S3DBLayer extends BuildingLayer {
private boolean mTransparent = true;
public S3DBLayer(Map map, VectorTileLayer tileLayer) {
this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel());
this(map, tileLayer, false);
}
public S3DBLayer(Map map, VectorTileLayer tileLayer, boolean shadow) {
this(map, tileLayer, MIN_ZOOM, map.viewport().getMaxZoomLevel(), shadow);
}
/**
@ -58,9 +62,10 @@ public class S3DBLayer extends BuildingLayer {
* @param tileLayer The vector tile layer which contains the tiles and map elements
* @param zoomMin The minimum zoom at which the layer appears
* @param zoomMax The maximum zoom at which the layer appears
* @param shadow Declare if using shadow renderer
*/
public S3DBLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax) {
super(map, tileLayer, zoomMin, zoomMax, true);
public S3DBLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax, boolean shadow) {
super(map, tileLayer, zoomMin, zoomMax, true, shadow);
}
public boolean isColored() {