vtm-playground: add SpriteBatch test (#337)
This commit is contained in:
parent
6c004b8be7
commit
32c57a42a4
128
vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java
Normal file
128
vtm-playground/src/org/oscim/test/GdxSpriteBatchTest.java
Normal file
@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright 2017 Gerber Lóránt Viktor
|
||||
*
|
||||
* 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
|
||||
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.test;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.graphics.GL20;
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||
import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.utils.viewport.ScreenViewport;
|
||||
import com.badlogic.gdx.utils.viewport.Viewport;
|
||||
|
||||
import org.oscim.backend.GL;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.core.Point;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
|
||||
|
||||
import static org.oscim.backend.GLAdapter.gl;
|
||||
|
||||
public class GdxSpriteBatchTest extends GdxMap {
|
||||
private GeoPoint position = new GeoPoint(47.1970869, 18.4398422);
|
||||
private int mapScale = 2000 << 6;
|
||||
|
||||
// I'm guessing it is private in GdxMap?
|
||||
private MapRenderer mapRenderer;
|
||||
|
||||
private OrthographicCamera camera;
|
||||
private Viewport viewport;
|
||||
private SpriteBatch spriteBatch;
|
||||
|
||||
private Texture texture;
|
||||
|
||||
@Override
|
||||
protected void createLayers() {
|
||||
TileSource tileSource = new OSciMap4TileSource();
|
||||
initDefaultLayers(tileSource, false, true, false);
|
||||
mMap.setMapPosition(position.getLatitude(), position.getLongitude(), mapScale);
|
||||
|
||||
camera = new OrthographicCamera();
|
||||
viewport = new ScreenViewport(camera);
|
||||
spriteBatch = new SpriteBatch();
|
||||
|
||||
mapRenderer = new MapRenderer(mMap);
|
||||
mapRenderer.onSurfaceCreated();
|
||||
mapRenderer.onSurfaceChanged(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
||||
mMap.viewport().setScreenSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
||||
|
||||
// Generate a simple texture for testing
|
||||
Pixmap pixmap = new Pixmap(64, 64, Pixmap.Format.RGB565);
|
||||
pixmap.setColor(0, 0, 0, 1);
|
||||
pixmap.fillRectangle(0, 0, 64, 64);
|
||||
pixmap.setColor(1, 0, 1, 1);
|
||||
pixmap.fillRectangle(0, 0, 32, 32);
|
||||
pixmap.fillRectangle(32, 32, 32, 32);
|
||||
texture = new Texture(pixmap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
// Centre the camera
|
||||
camera.position.x = Gdx.graphics.getWidth() / 2;
|
||||
camera.position.y = Gdx.graphics.getHeight() / 2;
|
||||
camera.update();
|
||||
|
||||
// Code taken from Cachebox
|
||||
Gdx.gl.glClearColor(0, 0, 0, 1);
|
||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling ?
|
||||
GL20.GL_COVERAGE_BUFFER_BIT_NV : 0));
|
||||
|
||||
GLState.enableVertexArrays(-1, -1);
|
||||
|
||||
gl.viewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
||||
gl.frontFace(GL.CW);
|
||||
|
||||
mapRenderer.onDrawFrame();
|
||||
|
||||
gl.flush();
|
||||
GLState.bindVertexBuffer(0);
|
||||
GLState.bindElementBuffer(0);
|
||||
gl.frontFace(GL.CCW);
|
||||
|
||||
spriteBatch.setProjectionMatrix(camera.combined);
|
||||
spriteBatch.begin();
|
||||
Point point = new Point();
|
||||
mMap.viewport().toScreenPoint(mMap.getMapPosition().getGeoPoint(), false, point);
|
||||
Vector2 worldPos = viewport.unproject(new Vector2((int) point.x, (int) point.y));
|
||||
spriteBatch.draw(texture, worldPos.x - 32, worldPos.y - 32, 64, 64);
|
||||
spriteBatch.end();
|
||||
|
||||
// Fly over the city.
|
||||
double lon = position.getLongitude();
|
||||
lon += 0.0001;
|
||||
position = new GeoPoint(position.getLatitude(), lon);
|
||||
mMap.setMapPosition(position.getLatitude(), position.getLongitude(), mapScale);
|
||||
mMap.updateMap(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(int w, int h) {
|
||||
mapRenderer.onSurfaceChanged(w, h);
|
||||
mMap.viewport().setScreenSize(w, h);
|
||||
viewport.update(w, h);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
GdxMapApp.init();
|
||||
GdxMapApp.run(new GdxSpriteBatchTest());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user