use fallback when std_derivative shaders failed to compile

This commit is contained in:
Hannes Janetzek 2013-07-01 03:48:24 +02:00
parent 77721db328
commit ae951dc4bd
2 changed files with 17 additions and 3 deletions

View File

@ -52,7 +52,7 @@ public final class LineRenderer {
lineFragmentShader); lineFragmentShader);
if (lineProgram[0] == 0) { if (lineProgram[0] == 0) {
Log.e(TAG, "Could not create line program."); Log.e(TAG, "Could not create line program.");
return false; //return false;
} }
lineProgram[1] = GlUtils.createProgram(lineVertexShader, lineProgram[1] = GlUtils.createProgram(lineVertexShader,
@ -63,6 +63,9 @@ public final class LineRenderer {
} }
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
if (lineProgram[i] == 0)
continue;
hLineMatrix[i] = GL.glGetUniformLocation(lineProgram[i], "u_mvp"); hLineMatrix[i] = GL.glGetUniformLocation(lineProgram[i], "u_mvp");
hLineScale[i] = GL.glGetUniformLocation(lineProgram[i], "u_wscale"); hLineScale[i] = GL.glGetUniformLocation(lineProgram[i], "u_wscale");
hLineWidth[i] = GL.glGetUniformLocation(lineProgram[i], "u_width"); hLineWidth[i] = GL.glGetUniformLocation(lineProgram[i], "u_width");
@ -90,7 +93,6 @@ public final class LineRenderer {
GL20.GL_NEAREST, GL20.GL_NEAREST, GL20.GL_NEAREST, GL20.GL_NEAREST,
GL20.GL_MIRRORED_REPEAT, GL20.GL_MIRRORED_REPEAT); GL20.GL_MIRRORED_REPEAT, GL20.GL_MIRRORED_REPEAT);
Log.d(TAG, "Line Texture >>>>>>>>> " + mTexID);
return true; return true;
} }
@ -112,6 +114,10 @@ public final class LineRenderer {
GLState.blend(true); GLState.blend(true);
// FIXME HACK: fallback to simple shader
if (lineProgram[mode] == 0)
mode = 1;
GLState.useProgram(lineProgram[mode]); GLState.useProgram(lineProgram[mode]);
int uLineScale = hLineScale[mode]; int uLineScale = hLineScale[mode];
@ -291,7 +297,11 @@ public final class LineRenderer {
// where wscale is 'filter width' / 'line width' and 0 <= len <= sqrt(2) // where wscale is 'filter width' / 'line width' and 0 <= len <= sqrt(2)
//+ " gl_FragColor = u_color * smoothstep(0.0, u_wscale, 1.0 - len);" //+ " gl_FragColor = u_color * smoothstep(0.0, u_wscale, 1.0 - len);"
//+ " gl_FragColor = mix(vec4(1.0,0.0,0.0,1.0), u_color, smoothstep(0.0, u_wscale, 1.0 - len));" //+ " gl_FragColor = mix(vec4(1.0,0.0,0.0,1.0), u_color, smoothstep(0.0, u_wscale, 1.0 - len));"
+ " gl_FragColor = u_color * min(1.0, (1.0 - len) / u_wscale);" + " float alpha = min(1.0, (1.0 - len) / u_wscale);"
+ " if (alpha > 0.2)"
+ " gl_FragColor = u_color * alpha;"
+ " else"
+ " discard;"
+ "}"; + "}";
private final static String lineFragmentShader = "" private final static String lineFragmentShader = ""

View File

@ -107,6 +107,10 @@ public class LineTexRenderer {
public static Layer draw(Layers layers, Layer curLayer, public static Layer draw(Layers layers, Layer curLayer,
MapPosition pos, Matrices m, float div) { MapPosition pos, Matrices m, float div) {
// shader failed to compile
if (shader == 0)
return curLayer.next;
GLState.blend(true); GLState.blend(true);
GLState.useProgram(shader); GLState.useProgram(shader);