Reputation: 121
I'm trying to make a fade in effect using ShapeRenderer with this code:
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl20.glBlendFunc(GL20.GL_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
//ShaderProgram.pedantic = false;
shapeRenderer.setProjectionMatrix(stage.getCamera().combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(new Color(0,0,0,fadeTimeElapsed/1.5f));
shapeRenderer.rect(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
shapeRenderer.end();
Gdx.gl20.glDisable(GL20.GL_BLEND);
I get the following exception:
FATAL EXCEPTION: GLThread 2715 java.lang.IllegalArgumentException: no uniform with name 'u_projModelView' in shader at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:287) at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:277) at com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformMatrix(ShaderProgram.java:507) at com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformMatrix(ShaderProgram.java:498) at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.flush(ImmediateModeRenderer20.java:147) at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.end(ImmediateModeRenderer20.java:160) at com.badlogic.gdx.graphics.glutils.ShapeRenderer.end(ShapeRenderer.java:1104) at net.ukk.rpg.Level.render(Level.java:93) at com.badlogic.gdx.Game.render(Game.java:46) at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:422) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1542) at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1266)
BTW with ShaderProgram.pedantic=false
, I don't get any filled rectangle.
Thanks in advance.
Upvotes: 3
Views: 809
Reputation: 8456
I had the same crash when I called my method (showAxesTicks) on UI thread that eventually called shapeRenderer.end(). I resolved it by embracing showAxesTicks() inside Gdx.app.postRunnable(new Runnable() ...) as @user1702985 mentioned. I think it causes the functions to get ran on the same OpenGL thread:
------------BEFORE CHANGE----------------
public void onGridMarkersMetricSelected() {
mLibgdxFragment.showAxesTicks(true);
hDebugConsole.consoleLog(TAG, "User enabled Metric Grid Markers");
return;
}
------------AFTER CHANGE----------------
public void onGridMarkersMetricSelected() {
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
mLibgdxFragment.showAxesTicks(true);
}
});
hDebugConsole.consoleLog(TAG, "User enabled Metric Grid Markers");
return;
}
Upvotes: 0
Reputation: 121
The problem was that I was instantiating the ShapeRenderer in a Thread. Calling the constructor in the show()
method solved the issue.
Upvotes: 3