decent bloom system
This commit is contained in:
parent
3c3d925e5a
commit
24dcabfb51
@ -14,8 +14,8 @@ void main() {
|
||||
vec4 color = texture(u_texture, vTexCoord);
|
||||
float brightness = (color.r*0.2126) + (color.g*0.7152) + (color.b * 0.0722);
|
||||
|
||||
if (brightness > 0.7) {
|
||||
gl_FragColor = color;
|
||||
if (brightness > 0.6) {
|
||||
gl_FragColor = color *0.75;
|
||||
} else {
|
||||
gl_FragColor = vec4(0.0);
|
||||
}
|
||||
|
@ -11,18 +11,17 @@ varying vec2 vTexCoord;
|
||||
|
||||
uniform sampler2D u_texture;
|
||||
uniform sampler2D u_texture1;
|
||||
uniform float exposure;
|
||||
|
||||
void main() {
|
||||
vec3 origColor = texture2D(u_texture, vTexCoord).rgb;
|
||||
vec3 blurredColor = texture2D(u_texture1, vTexCoord).rgb;
|
||||
|
||||
const float gamma = 2.2;
|
||||
origColor += blurredColor; // additive blending
|
||||
// tone mapping
|
||||
vec3 result = vec3(1.0) - exp(-origColor * exposure);
|
||||
// also gamma correct while we're at it
|
||||
result = pow(result, vec3(1.0 / gamma));
|
||||
gl_FragColor = vec4(result, 1.0);
|
||||
vec4 origColor = texture2D(u_texture, vTexCoord);
|
||||
vec4 blurredColor = texture2D(u_texture1, vTexCoord);
|
||||
|
||||
vec4 result;
|
||||
result = origColor + blurredColor;
|
||||
result.a = vColor.a;
|
||||
result.rgb *= vColor.rgb;
|
||||
gl_FragColor = result;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@ import com.badlogic.gdx.utils.Disposable;
|
||||
import com.badlogic.gdx.utils.viewport.ScreenViewport;
|
||||
|
||||
public class BloomShader implements Disposable {
|
||||
private int bloomLevel;
|
||||
private ShaderProgram gaussianBlurShader;
|
||||
private ShaderProgram brightFilterShader;
|
||||
private ShaderProgram combineShader;
|
||||
@ -69,10 +68,10 @@ public class BloomShader implements Disposable {
|
||||
|
||||
combineShader.begin();
|
||||
combineShader.setUniformi("u_texture1", 1);
|
||||
combineShader.setUniformf("exposure", 0.5f);
|
||||
combineShader.end();
|
||||
|
||||
gaussianBlurShader.begin();
|
||||
gaussianBlurShader.setUniformf("radius", 1.5f);
|
||||
gaussianBlurShader.setUniformf("resolution", hBlur.getWidth(), vBlur.getHeight());
|
||||
gaussianBlurShader.end();
|
||||
|
||||
@ -110,7 +109,6 @@ public class BloomShader implements Disposable {
|
||||
fboRegion.setTexture(lightFilterBuffer.getColorBufferTexture());
|
||||
hBlur.begin();
|
||||
screenBatch.setShader(gaussianBlurShader);
|
||||
gaussianBlurShader.setUniformf("radius", 1f + 0.2f*(bloomLevel*1.75f));
|
||||
gaussianBlurShader.setUniformi("pass", 0);
|
||||
screenBatch.draw(fboRegion, 0f, 0f, width, height);
|
||||
screenBatch.flush();
|
||||
@ -134,14 +132,6 @@ public class BloomShader implements Disposable {
|
||||
screenBatch.end(); //STAGE BATCH ENDS HERE
|
||||
}
|
||||
|
||||
public void setBloomLevel(int bloomLevel) {
|
||||
this.bloomLevel = bloomLevel;
|
||||
}
|
||||
|
||||
public int getBloomLevel() {
|
||||
return bloomLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
brightFilterShader.dispose();
|
||||
|
@ -5,16 +5,13 @@ import com.badlogic.gdx.Preferences;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
|
||||
public class GraphicsOptions extends Table {
|
||||
private Label resolutions, shaders;
|
||||
private Preferences prefs;
|
||||
private Slider glowShaderLevel;
|
||||
private Label resolutions;
|
||||
|
||||
private ResolutionButton
|
||||
_3840x2160,
|
||||
@ -26,21 +23,9 @@ public class GraphicsOptions extends Table {
|
||||
_1366x768;
|
||||
|
||||
|
||||
public GraphicsOptions(Skin skin, final Preferences prefs, ChangeListener bloomLevelSliderListener) {
|
||||
public GraphicsOptions(Skin skin, final Preferences prefs) {
|
||||
align(Align.center);
|
||||
defaults().space(10f);
|
||||
this.prefs = prefs;
|
||||
shaders = new Label("OpenGL Shader", skin);
|
||||
add(shaders).fillX();
|
||||
row();
|
||||
|
||||
glowShaderLevel = new Slider(0, 4, 1, false, skin);
|
||||
add(glowShaderLevel).fillX();
|
||||
glowShaderLevel.addListener(bloomLevelSliderListener);
|
||||
glowShaderLevel.setValue(prefs.getInteger("glow shader"));
|
||||
|
||||
row();
|
||||
|
||||
resolutions = new Label("Resolutions: ", skin);
|
||||
add(resolutions).left();
|
||||
row();
|
||||
@ -90,14 +75,4 @@ public class GraphicsOptions extends Table {
|
||||
row();
|
||||
pack();
|
||||
}
|
||||
|
||||
public void saveOptions() {
|
||||
Gdx.app.debug("Preferences", "Saved shading values values.");
|
||||
prefs.putInteger("glow shader", (int) glowShaderLevel.getValue());
|
||||
}
|
||||
|
||||
public int getBloomShaderLevel() {
|
||||
return (int) glowShaderLevel.getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,9 +15,9 @@ public class GraphicsPage extends Page {
|
||||
private GraphicsOptions graphicsTable;
|
||||
private TextButton backButton;
|
||||
|
||||
public GraphicsPage(Skin skin, Preferences preferences, ChangeListener backButtonListener, ChangeListener bloomLevelSliderListener) {
|
||||
public GraphicsPage(Skin skin, Preferences preferences, ChangeListener backButtonListener) {
|
||||
super(-1, 1);
|
||||
graphicsTable = new GraphicsOptions(skin, preferences, bloomLevelSliderListener);
|
||||
graphicsTable = new GraphicsOptions(skin, preferences);
|
||||
scrollPane = new ScrollPane(graphicsTable, skin);
|
||||
scrollPane.setFadeScrollBars(false);
|
||||
scrollPane.setFillParent(true);
|
||||
@ -40,12 +40,4 @@ public class GraphicsPage extends Page {
|
||||
public void act(float delta) {
|
||||
super.act(delta);
|
||||
}
|
||||
|
||||
public void saveOptions() {
|
||||
graphicsTable.saveOptions();
|
||||
}
|
||||
|
||||
public int getBloomLevel() {
|
||||
return graphicsTable.getBloomShaderLevel();
|
||||
}
|
||||
}
|
||||
|
@ -22,8 +22,6 @@ import zero1hd.rhythmbullet.graphics.ui.Page;
|
||||
import zero1hd.rhythmbullet.util.ResizeReadyScreen;
|
||||
|
||||
public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
private boolean resizing;
|
||||
|
||||
private Stage stage;
|
||||
private Vector3 cameraPosition;
|
||||
private Listeners listeners;
|
||||
@ -84,18 +82,15 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
}
|
||||
|
||||
private void draw() {
|
||||
if (!resizing) {
|
||||
stage.getViewport().apply();
|
||||
screenBatch.begin();
|
||||
screenBatch.draw(background, 0, 0, stage.getViewport().getScreenWidth(), stage.getViewport().getScreenHeight());
|
||||
screenBatch.end();
|
||||
stage.draw();
|
||||
}
|
||||
stage.getViewport().apply();
|
||||
screenBatch.begin();
|
||||
screenBatch.draw(background, 0, 0, stage.getViewport().getScreenWidth(), stage.getViewport().getScreenHeight());
|
||||
screenBatch.end();
|
||||
stage.draw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preAssetLoad() {
|
||||
resizing = true;
|
||||
stage.clear();
|
||||
if (bloomShader != null) {
|
||||
bloomShader.dispose();
|
||||
@ -109,6 +104,8 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
@Override
|
||||
public void postAssetLoad() {
|
||||
|
||||
bloomShader = new BloomShader(screenBatch);
|
||||
|
||||
background = rhythmBullet.getAssetManager().get("backgrounds/mainBG.png", Texture.class);
|
||||
|
||||
mainPage = new MainPage(musicController, musicMetadataController, rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), rhythmBullet.getScreenConfiguration(), listeners.musicSelectionPageButtonListener, listeners.optionsPageButtonListener);
|
||||
@ -121,7 +118,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
keybindPage = new KeybindPage(rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), listeners.optionsPageButtonListener);
|
||||
stage.addActor(keybindPage);
|
||||
|
||||
graphicsPage = new GraphicsPage(rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.optionsPageButtonListener, listeners.bloomLevelShaderListener);
|
||||
graphicsPage = new GraphicsPage(rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.optionsPageButtonListener);
|
||||
stage.addActor(graphicsPage);
|
||||
|
||||
creditsPage = new CreditsPage(rhythmBullet.getSkin());
|
||||
@ -134,7 +131,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
stage.addActor(analysisPage);
|
||||
|
||||
musicController.getMusicList().asyncSearch(false);
|
||||
resizing = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -152,7 +148,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
public void saveAll() {
|
||||
if (optionsPage != null) {
|
||||
optionsPage.saveOptions();
|
||||
graphicsPage.saveOptions();
|
||||
rhythmBullet.getPreferences().flush();
|
||||
}
|
||||
}
|
||||
@ -228,25 +223,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener bloomLevelShaderListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
int bloomLevel = 0;
|
||||
if (graphicsPage != null) {
|
||||
bloomLevel = graphicsPage.getBloomLevel();
|
||||
} else {
|
||||
bloomLevel = rhythmBullet.getPreferences().getInteger("glow shader");
|
||||
}
|
||||
if (bloomLevel > 0) {
|
||||
if (bloomShader == null) bloomShader = new BloomShader(screenBatch);
|
||||
bloomShader.setBloomLevel((bloomLevel-1));
|
||||
} else if (bloomShader != null) {
|
||||
bloomShader.dispose();
|
||||
bloomShader = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener confirmedSongListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user