sync viewport

This commit is contained in:
Hannes Janetzek 2014-11-26 18:39:50 +01:00
parent 6f85e24ed9
commit d492358a94
4 changed files with 46 additions and 60 deletions

View File

@ -174,14 +174,16 @@ public class MapView extends GLSurfaceView {
@Override
public void updateMap(boolean redraw) {
if (mPausing)
return;
synchronized (mRedrawCb) {
if (mPausing)
return;
if (!mRenderRequest) {
mRenderRequest = true;
mMapView.post(mRedrawCb);
} else {
mRenderWait = true;
if (!mRenderRequest) {
mRenderRequest = true;
mMapView.post(mRedrawCb);
} else {
mRenderWait = true;
}
}
}
@ -190,7 +192,8 @@ public class MapView extends GLSurfaceView {
if (mPausing)
return;
updateMap(true);
/** TODO should not need to call prepareFrame in mRedrawCb */
updateMap(false);
}
@Override
@ -198,15 +201,13 @@ public class MapView extends GLSurfaceView {
}
@Override
public void doneFrame() {
mRenderRequest = false;
if (mRenderWait) {
//log.debug("redraw");
mRenderWait = false;
updateMap(true);
//prepareFrame();
//mGLView.requestRender();
public void doneFrame(boolean animate) {
synchronized (mRedrawCb) {
mRenderRequest = false;
if (animate || mRenderWait) {
mRenderWait = false;
render();
}
}
}

View File

@ -157,24 +157,25 @@ public abstract class GdxMap implements ApplicationListener {
@Override
public void updateMap(boolean forceRender) {
if (!mRenderRequest) {
mRenderRequest = true;
Gdx.app.postRunnable(mRedrawCb);
} else {
mRenderWait = true;
synchronized (mRedrawCb) {
if (!mRenderRequest) {
mRenderRequest = true;
Gdx.app.postRunnable(mRedrawCb);
} else {
mRenderWait = true;
}
}
}
@Override
public void render() {
//updateMap(true);
mRenderRequest = true;
if (mClearMap)
updateMap(false);
else {
Gdx.graphics.requestRendering();
synchronized (mRedrawCb) {
mRenderRequest = true;
if (mClearMap)
updateMap(false);
else {
Gdx.graphics.requestRendering();
}
}
}
@ -200,16 +201,13 @@ public abstract class GdxMap implements ApplicationListener {
}
@Override
public void doneFrame() {
mRenderRequest = false;
if (mRenderWait) {
mRenderWait = false;
mRenderRequest = true;
prepareFrame();
Gdx.graphics.requestRendering();
public void doneFrame(boolean animate) {
synchronized (mRedrawCb) {
mRenderRequest = false;
if (animate || mRenderWait) {
mRenderWait = false;
updateMap(true);
}
}
}
}

View File

@ -340,7 +340,9 @@ public abstract class Map implements TaskQueue {
return mLayers.handleGesture(g, e);
}
/** Called on render thread, use synchronized! */
public abstract void beginFrame();
public abstract void doneFrame();
/** Called on render thread, use synchronized! */
public abstract void doneFrame(boolean needsRedraw);
}

View File

@ -70,33 +70,22 @@ public class MapRenderer {
mClearColor = GLUtils.colorToFloat(color);
}
private final Runnable renderBegin = new Runnable() {
@Override
public void run() {
mMap.beginFrame();
}
};
private final Runnable renderDone = new Runnable() {
@Override
public void run() {
mMap.doneFrame();
}
};
public void onDrawFrame() {
frametime = System.currentTimeMillis();
rerender = false;
mMap.post(renderBegin);
mMap.beginFrame();
draw();
mMap.post(renderDone);
mMap.doneFrame(rerender);
mBufferPool.releaseBuffers();
TextureItem.disposeTextures();
}
private void draw() {
GLState.setClearColor(mClearColor);
gl.depthMask(true);
@ -150,10 +139,6 @@ public class MapRenderer {
BufferObject.checkBufferUsage(true);
// FIXME also throw out some textures etc
}
if (rerender) {
mMap.render();
rerender = false;
}
}
public void onSurfaceChanged(int width, int height) {