Skip to content

Instantly share code, notes, and snippets.

@simoarpe
Created August 5, 2016 10:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simoarpe/d188817b5e9bcae7b155fbb2265871e7 to your computer and use it in GitHub Desktop.
Save simoarpe/d188817b5e9bcae7b155fbb2265871e7 to your computer and use it in GitHub Desktop.
this is an attempt to port this shader to libgdx https://www.shadertoy.com/view/XdcXDN#
package de.qx.shaders.CustomFrameBuffer;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import de.qx.shaders.ShaderManager;
/**
* @author Michael "molp" Olp
*/
public class FrameBufferScreen implements Screen {
private static final String MARBLE = "img/tex02.jpg";
private static final String BUFFER_A = "img/black.png";
private AssetManager assetManager;
private boolean assetsLoaded;
private final SpriteBatch batch;
private ShaderManager shaderManager;
private TextureRegion marble;
private TextureRegion bufferA;
private float time = 100f;
public FrameBufferScreen() {
assetManager = new AssetManager();
assetManager.load(MARBLE, Texture.class);
assetManager.load(BUFFER_A, Texture.class);
shaderManager = new ShaderManager(assetManager);
shaderManager.loadShader("bufferA", "default.vert", "bufferA.frag");
shaderManager.loadShader("dissolve", "default.vert", "dissolve.frag");
shaderManager.loadShader("default", "default.vert", "default.frag");
batch = new SpriteBatch();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (!assetsLoaded) {
if (assetManager.update()) {
assetsLoaded = true;
build();
}
} else {
shaderManager.beginFrameBuffer("frameBuffer01");
shaderManager.begin("bufferA");
batch.enableBlending();
batch.begin();
batch.setShader(shaderManager.getCurrentShader());
shaderManager.setUniformMatrix("u_projTrans", batch.getProjectionMatrix());
shaderManager.setUniform2fv("iMouse", new float[]{Gdx.input.getX(), Gdx.input.getY()});
shaderManager.setUniformTexture("u_texture", shaderManager.getFrameBuffer("frameBuffer01").getColorBufferTexture());
shaderManager.setUniform2fv("iResolution", new float[]{Gdx.graphics.getWidth(), Gdx.graphics.getHeight()});
batch.draw(bufferA, 0f, 0f);
batch.end();
shaderManager.end();
shaderManager.endFrameBuffer();
shaderManager.begin("dissolve");
shaderManager.setUniformMatrix("u_projTrans", batch.getProjectionMatrix());
shaderManager.setUniform2fv("iResolution", new float[] { Gdx.graphics.getWidth(), Gdx.graphics.getHeight()});
time+= 0.01;
shaderManager.setUniformf("iGlobalTime", time);
shaderManager.setUniformTexture("u_texture", marble.getTexture());
shaderManager.setUniformTexture("u_texture1", shaderManager.getFrameBuffer("frameBuffer01").getColorBufferTexture());
shaderManager.renderFrameBuffer("frameBuffer01");
batch.setShader(shaderManager.getCurrentShader());
batch.begin();
batch.draw(marble, 0f, 0f);
batch.end();
shaderManager.end();
}
}
private void build() {
marble = new TextureRegion(assetManager.<Texture>get(MARBLE));
bufferA = new TextureRegion(assetManager.<Texture>get(BUFFER_A));
shaderManager.createFrameBuffer("frameBuffer01");
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void show() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
shaderManager.dispose();
assetManager.unload(MARBLE);
assetManager.unload(BUFFER_A);
assetManager.dispose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment