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.GLViewport;
|
||||
import org.oscim.renderer.OffscreenRenderer;
|
||||
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.utils.ColorUtil;
|
||||
import org.oscim.utils.ColorsCSS;
|
||||
@ -16,6 +17,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
public class S3DBLayer extends TileLayer {
|
||||
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 SRC_ZOOM = 16;
|
||||
@ -46,23 +48,31 @@ public class S3DBLayer extends TileLayer {
|
||||
|
||||
public S3DBRenderer() {
|
||||
mExtRenderer = new ExtrusionRenderer(this, 16, true, false);
|
||||
|
||||
or = new OffscreenRenderer();
|
||||
or.setRenderer(mExtRenderer);
|
||||
if (POST_FXAA) {
|
||||
or = new OffscreenRenderer(Mode.FXAA);
|
||||
or.setRenderer(mExtRenderer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected synchronized void update(GLViewport v) {
|
||||
super.update(v);
|
||||
//mExtRenderer.update(v);
|
||||
or.update(v);
|
||||
setReady(or.isReady());
|
||||
if (POST_FXAA) {
|
||||
or.update(v);
|
||||
setReady(or.isReady());
|
||||
} else {
|
||||
mExtRenderer.update(v);
|
||||
setReady(mExtRenderer.isReady());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected synchronized void render(GLViewport v) {
|
||||
or.render(v);
|
||||
//mExtRenderer.render(v);
|
||||
if (POST_FXAA) {
|
||||
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.GLViewport;
|
||||
import org.oscim.renderer.OffscreenRenderer;
|
||||
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||
import org.oscim.theme.styles.ExtrusionStyle;
|
||||
@ -100,7 +101,7 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
||||
};
|
||||
|
||||
if (POST_AA) {
|
||||
OffscreenRenderer or = new OffscreenRenderer();
|
||||
OffscreenRenderer or = new OffscreenRenderer(Mode.FXAA);
|
||||
or.setRenderer(mExtRenderer);
|
||||
mRenderer = or;
|
||||
} else {
|
||||
|
@ -9,6 +9,13 @@ import org.slf4j.LoggerFactory;
|
||||
public class OffscreenRenderer extends LayerRenderer {
|
||||
final static Logger log = LoggerFactory.getLogger(OffscreenRenderer.class);
|
||||
|
||||
public enum Mode {
|
||||
FXAA,
|
||||
SSAO,
|
||||
SSAO_FXAA,
|
||||
BYPASS
|
||||
}
|
||||
|
||||
int fb;
|
||||
int renderTex;
|
||||
int renderDepth;
|
||||
@ -20,6 +27,7 @@ public class OffscreenRenderer extends LayerRenderer {
|
||||
private float[] mClearColor = { 0, 0, 0, 0 };
|
||||
|
||||
private boolean useDepthTexture = false;
|
||||
private Shader mShader;
|
||||
|
||||
static class Shader extends GLShader {
|
||||
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) {
|
||||
IntBuffer buf = MapRenderer.getIntBuffer(1);
|
||||
|
||||
@ -54,8 +68,11 @@ public class OffscreenRenderer extends LayerRenderer {
|
||||
// generate color texture
|
||||
GL.glBindTexture(GL20.GL_TEXTURE_2D, renderTex);
|
||||
|
||||
GLUtils.setTextureParameter(GL20.GL_NEAREST,
|
||||
GL20.GL_NEAREST,
|
||||
GLUtils.setTextureParameter(
|
||||
GL20.GL_LINEAR,
|
||||
GL20.GL_LINEAR,
|
||||
//GL20.GL_NEAREST,
|
||||
//GL20.GL_NEAREST,
|
||||
GL20.GL_CLAMP_TO_EDGE,
|
||||
GL20.GL_CLAMP_TO_EDGE);
|
||||
|
||||
@ -121,13 +138,8 @@ public class OffscreenRenderer extends LayerRenderer {
|
||||
|
||||
static void init(GL20 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) {
|
||||
if (on)
|
||||
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, fb);
|
||||
@ -149,9 +161,23 @@ public class OffscreenRenderer extends LayerRenderer {
|
||||
|
||||
@Override
|
||||
public void update(GLViewport viewport) {
|
||||
if (texW != viewport.getWidth() || texH != viewport.getHeight())
|
||||
if (texW != viewport.getWidth() || texH != viewport.getHeight()) {
|
||||
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);
|
||||
setReady(mRenderer.isReady());
|
||||
}
|
||||
@ -168,27 +194,26 @@ public class OffscreenRenderer extends LayerRenderer {
|
||||
|
||||
GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0);
|
||||
|
||||
Shader s = shaders[0];
|
||||
s.useProgram();
|
||||
mShader.useProgram();
|
||||
|
||||
/* bind depth texture */
|
||||
if (useDepthTexture) {
|
||||
GL.glActiveTexture(GL20.GL_TEXTURE1);
|
||||
GLState.bindTex2D(renderDepth);
|
||||
GL.glUniform1i(s.uTexDepth, 1);
|
||||
GL.glUniform1i(mShader.uTexDepth, 1);
|
||||
GL.glActiveTexture(GL20.GL_TEXTURE0);
|
||||
}
|
||||
/* bind color texture */
|
||||
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 / texH * 0.5));
|
||||
|
||||
GLState.enableVertexArrays(s.aPos, -1);
|
||||
GLState.enableVertexArrays(mShader.aPos, -1);
|
||||
|
||||
GLState.test(false, false);
|
||||
GLState.blend(true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user