s3db: disable postprocess mode
- seems old mali having issues with dependent texture reads.. - add bypass shader for testing
This commit is contained in:
parent
e7a015a1d7
commit
a8662d4dce
28
vtm/resources/assets/shaders/post_bypass.glsl
Normal file
28
vtm/resources/assets/shaders/post_bypass.glsl
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifdef GLES
|
||||||
|
precision highp float;
|
||||||
|
#endif
|
||||||
|
uniform vec2 u_pixel;
|
||||||
|
attribute vec4 a_pos;
|
||||||
|
varying vec2 tex_pos;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = a_pos;
|
||||||
|
tex_pos = (a_pos.xy + 1.0) * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
$$
|
||||||
|
|
||||||
|
#ifdef GLES
|
||||||
|
precision highp float;
|
||||||
|
#endif
|
||||||
|
uniform sampler2D u_texColor;
|
||||||
|
uniform vec2 u_pixel;
|
||||||
|
varying vec2 tex_pos;
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
|
||||||
|
gl_FragColor = texture2D(u_texColor, tex_pos) * 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -8,6 +8,7 @@ import org.oscim.map.Map;
|
|||||||
import org.oscim.renderer.ExtrusionRenderer;
|
import org.oscim.renderer.ExtrusionRenderer;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.OffscreenRenderer;
|
import org.oscim.renderer.OffscreenRenderer;
|
||||||
|
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||||
import org.oscim.tiling.TileSource;
|
import org.oscim.tiling.TileSource;
|
||||||
import org.oscim.utils.ColorUtil;
|
import org.oscim.utils.ColorUtil;
|
||||||
import org.oscim.utils.ColorsCSS;
|
import org.oscim.utils.ColorsCSS;
|
||||||
@ -16,6 +17,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
public class S3DBLayer extends TileLayer {
|
public class S3DBLayer extends TileLayer {
|
||||||
static final Logger log = LoggerFactory.getLogger(S3DBLayer.class);
|
static final Logger log = LoggerFactory.getLogger(S3DBLayer.class);
|
||||||
|
static final boolean POST_FXAA = false;
|
||||||
|
|
||||||
private final static int MAX_CACHE = 20;
|
private final static int MAX_CACHE = 20;
|
||||||
private final static int SRC_ZOOM = 16;
|
private final static int SRC_ZOOM = 16;
|
||||||
@ -46,23 +48,31 @@ public class S3DBLayer extends TileLayer {
|
|||||||
|
|
||||||
public S3DBRenderer() {
|
public S3DBRenderer() {
|
||||||
mExtRenderer = new ExtrusionRenderer(this, 16, true, false);
|
mExtRenderer = new ExtrusionRenderer(this, 16, true, false);
|
||||||
|
if (POST_FXAA) {
|
||||||
or = new OffscreenRenderer();
|
or = new OffscreenRenderer(Mode.FXAA);
|
||||||
or.setRenderer(mExtRenderer);
|
or.setRenderer(mExtRenderer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized void update(GLViewport v) {
|
protected synchronized void update(GLViewport v) {
|
||||||
super.update(v);
|
super.update(v);
|
||||||
//mExtRenderer.update(v);
|
if (POST_FXAA) {
|
||||||
or.update(v);
|
or.update(v);
|
||||||
setReady(or.isReady());
|
setReady(or.isReady());
|
||||||
|
} else {
|
||||||
|
mExtRenderer.update(v);
|
||||||
|
setReady(mExtRenderer.isReady());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized void render(GLViewport v) {
|
protected synchronized void render(GLViewport v) {
|
||||||
or.render(v);
|
if (POST_FXAA) {
|
||||||
//mExtRenderer.render(v);
|
or.render(v);
|
||||||
|
} else {
|
||||||
|
mExtRenderer.render(v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ import org.oscim.map.Map;
|
|||||||
import org.oscim.renderer.ExtrusionRenderer;
|
import org.oscim.renderer.ExtrusionRenderer;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.OffscreenRenderer;
|
import org.oscim.renderer.OffscreenRenderer;
|
||||||
|
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||||
import org.oscim.renderer.elements.ElementLayers;
|
import org.oscim.renderer.elements.ElementLayers;
|
||||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||||
import org.oscim.theme.styles.ExtrusionStyle;
|
import org.oscim.theme.styles.ExtrusionStyle;
|
||||||
@ -100,7 +101,7 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (POST_AA) {
|
if (POST_AA) {
|
||||||
OffscreenRenderer or = new OffscreenRenderer();
|
OffscreenRenderer or = new OffscreenRenderer(Mode.FXAA);
|
||||||
or.setRenderer(mExtRenderer);
|
or.setRenderer(mExtRenderer);
|
||||||
mRenderer = or;
|
mRenderer = or;
|
||||||
} else {
|
} else {
|
||||||
|
@ -9,6 +9,13 @@ import org.slf4j.LoggerFactory;
|
|||||||
public class OffscreenRenderer extends LayerRenderer {
|
public class OffscreenRenderer extends LayerRenderer {
|
||||||
final static Logger log = LoggerFactory.getLogger(OffscreenRenderer.class);
|
final static Logger log = LoggerFactory.getLogger(OffscreenRenderer.class);
|
||||||
|
|
||||||
|
public enum Mode {
|
||||||
|
FXAA,
|
||||||
|
SSAO,
|
||||||
|
SSAO_FXAA,
|
||||||
|
BYPASS
|
||||||
|
}
|
||||||
|
|
||||||
int fb;
|
int fb;
|
||||||
int renderTex;
|
int renderTex;
|
||||||
int renderDepth;
|
int renderDepth;
|
||||||
@ -20,6 +27,7 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
private float[] mClearColor = { 0, 0, 0, 0 };
|
private float[] mClearColor = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
private boolean useDepthTexture = false;
|
private boolean useDepthTexture = false;
|
||||||
|
private Shader mShader;
|
||||||
|
|
||||||
static class Shader extends GLShader {
|
static class Shader extends GLShader {
|
||||||
int aPos, uTexDepth, uTexColor, uPixel;
|
int aPos, uTexDepth, uTexColor, uPixel;
|
||||||
@ -34,6 +42,12 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final Mode mode;
|
||||||
|
|
||||||
|
public OffscreenRenderer(Mode mode) {
|
||||||
|
this.mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean setupFBO(GLViewport viewport) {
|
protected boolean setupFBO(GLViewport viewport) {
|
||||||
IntBuffer buf = MapRenderer.getIntBuffer(1);
|
IntBuffer buf = MapRenderer.getIntBuffer(1);
|
||||||
|
|
||||||
@ -54,8 +68,11 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
// generate color texture
|
// generate color texture
|
||||||
GL.glBindTexture(GL20.GL_TEXTURE_2D, renderTex);
|
GL.glBindTexture(GL20.GL_TEXTURE_2D, renderTex);
|
||||||
|
|
||||||
GLUtils.setTextureParameter(GL20.GL_NEAREST,
|
GLUtils.setTextureParameter(
|
||||||
GL20.GL_NEAREST,
|
GL20.GL_LINEAR,
|
||||||
|
GL20.GL_LINEAR,
|
||||||
|
//GL20.GL_NEAREST,
|
||||||
|
//GL20.GL_NEAREST,
|
||||||
GL20.GL_CLAMP_TO_EDGE,
|
GL20.GL_CLAMP_TO_EDGE,
|
||||||
GL20.GL_CLAMP_TO_EDGE);
|
GL20.GL_CLAMP_TO_EDGE);
|
||||||
|
|
||||||
@ -121,13 +138,8 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
static void init(GL20 gl20) {
|
static void init(GL20 gl20) {
|
||||||
GL = gl20;
|
GL = gl20;
|
||||||
shaders[0] = new Shader("post_fxaa");
|
|
||||||
shaders[1] = new Shader("post_ssao");
|
|
||||||
shaders[2] = new Shader("post_combined");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Shader[] shaders = new Shader[3];
|
|
||||||
|
|
||||||
public void enable(boolean on) {
|
public void enable(boolean on) {
|
||||||
if (on)
|
if (on)
|
||||||
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, fb);
|
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, fb);
|
||||||
@ -149,9 +161,23 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(GLViewport viewport) {
|
public void update(GLViewport viewport) {
|
||||||
if (texW != viewport.getWidth() || texH != viewport.getHeight())
|
if (texW != viewport.getWidth() || texH != viewport.getHeight()) {
|
||||||
setupFBO(viewport);
|
setupFBO(viewport);
|
||||||
|
switch (mode) {
|
||||||
|
case FXAA:
|
||||||
|
mShader = new Shader("post_fxaa");
|
||||||
|
break;
|
||||||
|
case SSAO:
|
||||||
|
mShader = new Shader("post_ssao");
|
||||||
|
break;
|
||||||
|
case SSAO_FXAA:
|
||||||
|
mShader = new Shader("post_combined");
|
||||||
|
break;
|
||||||
|
case BYPASS:
|
||||||
|
mShader = new Shader("post_bypass");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
mRenderer.update(viewport);
|
mRenderer.update(viewport);
|
||||||
setReady(mRenderer.isReady());
|
setReady(mRenderer.isReady());
|
||||||
}
|
}
|
||||||
@ -168,27 +194,26 @@ public class OffscreenRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0);
|
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
Shader s = shaders[0];
|
mShader.useProgram();
|
||||||
s.useProgram();
|
|
||||||
|
|
||||||
/* bind depth texture */
|
/* bind depth texture */
|
||||||
if (useDepthTexture) {
|
if (useDepthTexture) {
|
||||||
GL.glActiveTexture(GL20.GL_TEXTURE1);
|
GL.glActiveTexture(GL20.GL_TEXTURE1);
|
||||||
GLState.bindTex2D(renderDepth);
|
GLState.bindTex2D(renderDepth);
|
||||||
GL.glUniform1i(s.uTexDepth, 1);
|
GL.glUniform1i(mShader.uTexDepth, 1);
|
||||||
GL.glActiveTexture(GL20.GL_TEXTURE0);
|
GL.glActiveTexture(GL20.GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
/* bind color texture */
|
/* bind color texture */
|
||||||
GLState.bindTex2D(renderTex);
|
GLState.bindTex2D(renderTex);
|
||||||
GL.glUniform1i(s.uTexColor, 0);
|
GL.glUniform1i(mShader.uTexColor, 0);
|
||||||
|
|
||||||
MapRenderer.bindQuadVertexVBO(s.aPos, true);
|
MapRenderer.bindQuadVertexVBO(mShader.aPos, true);
|
||||||
|
|
||||||
GL.glUniform2f(s.uPixel,
|
GL.glUniform2f(mShader.uPixel,
|
||||||
(float) (1.0 / texW * 0.5),
|
(float) (1.0 / texW * 0.5),
|
||||||
(float) (1.0 / texH * 0.5));
|
(float) (1.0 / texH * 0.5));
|
||||||
|
|
||||||
GLState.enableVertexArrays(s.aPos, -1);
|
GLState.enableVertexArrays(mShader.aPos, -1);
|
||||||
|
|
||||||
GLState.test(false, false);
|
GLState.test(false, false);
|
||||||
GLState.blend(true);
|
GLState.blend(true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user