glow shader works better, changed way of loading assets, default song set up

This commit is contained in:
Harrison Deng 2017-10-08 19:07:34 -05:00
parent 4c329e8d8f
commit 6d135e3b2b
21 changed files with 255 additions and 82 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

View File

@ -11,7 +11,7 @@ max: 50
lowMin: 0.0 lowMin: 0.0
lowMax: 0.0 lowMax: 0.0
highMin: 45.0 highMin: 45.0
highMax: 70.0 highMax: 60.0
relative: false relative: false
scalingCount: 3 scalingCount: 3
scaling0: 1.0 scaling0: 1.0
@ -125,9 +125,9 @@ timeline0: 0.0
active: false active: false
- Tint - - Tint -
colorsCount: 3 colorsCount: 3
colors0: 0.7411765 colors0: 1.0
colors1: 0.20392157 colors1: 0.6627451
colors2: 0.0 colors2: 0.23921569
timelineCount: 1 timelineCount: 1
timeline0: 0.0 timeline0: 0.0
- Transparency - - Transparency -
@ -138,13 +138,13 @@ highMax: 1.0
relative: false relative: false
scalingCount: 5 scalingCount: 5
scaling0: 0.21052632 scaling0: 0.21052632
scaling1: 0.5263158 scaling1: 0.45614034
scaling2: 0.54385966 scaling2: 0.54385966
scaling3: 0.45614034 scaling3: 0.45614034
scaling4: 0.0 scaling4: 0.0
timelineCount: 5 timelineCount: 5
timeline0: 0.0 timeline0: 0.0
timeline1: 0.38356164 timeline1: 0.56164384
timeline2: 0.67808217 timeline2: 0.67808217
timeline3: 0.7671233 timeline3: 0.7671233
timeline4: 1.0 timeline4: 1.0

View File

@ -14,20 +14,20 @@ uniform sampler2D u_texture;
uniform float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216); uniform float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
void main() { void main() {
vec2 tex_offset = 1.0 /textureSize(u_texture, 0); vec2 tex_offset = 1.0 / textureSize(u_texture, 0);
vec3 result = texture(u_texture, vTexCoord).rgb * weight[0]; vec3 result = texture(u_texture, vTexCoord).rgb * weight[0];
if (horizontal == 1) { if (horizontal == 1) {
for (int i = 1; i < 5; ++i) { for (int i = 1; i < 5; ++i) {
result += texture(u_texture, vTexCoord + vec2(tex_offset.x *i, 0.0)).rgb * weight[i]; result += texture(u_texture, vTexCoord + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
result += texture(u_texture, vTexCoord - vec2(tex_offset.x *i, 0.0)).rgb * weight[i]; result += texture(u_texture, vTexCoord - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
} }
} else { } else {
for (int i = 1; i < 5; ++i) { for (int i = 1; i < 5; ++i) {
result += texture(u_texture, vTexCoord + vec2(0.0, tex_offset.y * i)).rgb * weight[i]; result += texture(u_texture, vTexCoord + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
result += texture(u_texture, vTexCoord - vec2(0.0, tex_offset.y * i)).rgb * weight[i]; result += texture(u_texture, vTexCoord - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
} }
} }
gl_FragColor = vec4(result, 1.0); gl_FragColor = vec4(result, 1.0);
} }

BIN
android/assets/splashlogo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -71,8 +71,9 @@ public class RhythmBullet extends Game {
new Resolution(1920, 1080, "1920x1080"), new Resolution(1920, 1080, "1920x1080"),
new Resolution(1920, 1200, "1920x1200"), new Resolution(1920, 1200, "1920x1200"),
new Resolution(2560, 1440, "2560x1440"), new Resolution(2560, 1440, "2560x1440"),
new Resolution(3840, 2160, "3840x2160"), new Resolution(3840, 2160, "3840x2160")
}; };
InternalFileHandleResolver internalFileResolver = new InternalFileHandleResolver(); InternalFileHandleResolver internalFileResolver = new InternalFileHandleResolver();
rRHandler = new RoundingResolutionHandler(internalFileResolver, resolution); rRHandler = new RoundingResolutionHandler(internalFileResolver, resolution);
GenericFileTypeHandler genericFileFinder = new GenericFileTypeHandler(internalFileResolver); GenericFileTypeHandler genericFileFinder = new GenericFileTypeHandler(internalFileResolver);
@ -101,7 +102,9 @@ public class RhythmBullet extends Game {
generateFonts(Gdx.graphics.getHeight()); generateFonts(Gdx.graphics.getHeight());
defineSkinStyles(); defineSkinStyles();
assetManager.get("standard_thrust.p", ParticleEffect.class).flipY(); assetManager.get("standard_thrust.p", ParticleEffect.class).flipY();
((TransitionAdapter) getScreen()).postTransition(); if (initComplete) {
((TransitionAdapter) getScreen()).postTransition();
}
} }
} }
super.render(); super.render();
@ -123,7 +126,7 @@ public class RhythmBullet extends Game {
@Override @Override
public void resize(int width, int height) { public void resize(int width, int height) {
if (initComplete) { if (initComplete) {
Gdx.app.debug("Resize", "Pre-transition is happening."); Gdx.app.debug("Resize", "Pre-transition is happening. Using resolution " + width + "x" + height);
rRHandler.setResolution(width, height); rRHandler.setResolution(width, height);
((TransitionAdapter) getScreen()).preTransition(); ((TransitionAdapter) getScreen()).preTransition();
assetManager.clear(); assetManager.clear();
@ -137,7 +140,11 @@ public class RhythmBullet extends Game {
} }
public int fontScale(float fontSize, int height) { public int fontScale(float fontSize, int height) {
return MathUtils.round(Gdx.graphics.getDensity()*(fontSize*height)); int size = MathUtils.round(Gdx.graphics.getDensity()*(fontSize*height));
if (size >= 200) {
size = 200;
}
return size;
} }
public AssetManager getAssetManager() { public AssetManager getAssetManager() {
@ -184,9 +191,10 @@ public class RhythmBullet extends Game {
assetManager.load("tpSelector.png", Texture.class); assetManager.load("tpSelector.png", Texture.class);
assetManager.load("magic1.png", Texture.class); assetManager.load("magic1.png", Texture.class);
} }
public void generateFonts(final int height) { public void generateFonts(final int height) {
defaultSkin = new Skin(); defaultSkin = new Skin();
Gdx.app.debug("Prelaunch Debug Info", "Generating fonts..."); Gdx.app.debug("Prelaunch Debug Info", "Generating fonts with screen height of " + height);
skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class); skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class);
getDefaultSkin().addRegions(skinAtlas); getDefaultSkin().addRegions(skinAtlas);

View File

@ -61,10 +61,9 @@ public class Mp3Manager implements MusicManager {
} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) { } catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
lock.unlock();
} }
lock.unlock();
}); });

View File

@ -36,7 +36,8 @@ public class SongList {
} }
public MusicManager getMusicInfoFromIndex(int index) { public MusicManager getMusicInfoFromIndex(int index) {
if (index > songList.size) { if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet...");
if (songList.size == 0) {
return null; return null;
} }
return getAudioData(songList.get(index)); return getAudioData(songList.get(index));
@ -48,7 +49,7 @@ public class SongList {
public FileHandle getSongFileHandleFromIndex(int index) { public FileHandle getSongFileHandleFromIndex(int index) {
if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet..."); if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet...");
if (index > songList.size) { if (songList.size == 0) {
return null; return null;
} }
return songList.get(index); return songList.get(index);

View File

@ -36,7 +36,7 @@ public class SongListController implements OnCompletionListener {
public void play() { public void play() {
mdp.play(); mdp.play();
mdp.setVolume(prefs.getFloat("music vol")); mdp.setVolume(prefs.getFloat("music vol", 1f));
} }
public void setSongByIndex(int index) { public void setSongByIndex(int index) {
@ -58,7 +58,11 @@ public class SongListController implements OnCompletionListener {
public void onCompletion(Music music) { public void onCompletion(Music music) {
if (autoPlay) { if (autoPlay) {
if (shuffle) { if (shuffle) {
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); if (songList.getAmountOfSongs() != 0) {
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
} else {
currentPlaybackID = 0;
}
} else { } else {
currentPlaybackID++; currentPlaybackID++;
if (currentPlaybackID > songList.getAmountOfSongs()) { if (currentPlaybackID > songList.getAmountOfSongs()) {
@ -71,7 +75,11 @@ public class SongListController implements OnCompletionListener {
} }
public void shuffle() { public void shuffle() {
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); if (songList.getAmountOfSongs() == 0) {
currentPlaybackID = 0;
} else {
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
}
changeSong(); changeSong();
} }
@ -99,7 +107,10 @@ public class SongListController implements OnCompletionListener {
this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID); this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID);
if (mdp == null) { if (mdp == null) {
mdp = songList.getAudioData(Gdx.files.internal("music/default.mp3")); if (!Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3").exists()) {
Gdx.files.internal("music/Alan Walker - Spectre.mp3").copyTo(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3"));
}
mdp = songList.getAudioData(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3"));
} }
mdp.setOnCompletionListener(this); mdp.setOnCompletionListener(this);
sendEvent(); sendEvent();

View File

@ -29,6 +29,7 @@ public class TitleBarVisualizer extends Group implements Disposable {
ParticleEffectPool beatEffectPool; ParticleEffectPool beatEffectPool;
Array<PooledEffect> effects = new Array<>(); Array<PooledEffect> effects = new Array<>();
private boolean lastEffect;
public TitleBarVisualizer(AssetManager assets) { public TitleBarVisualizer(AssetManager assets) {
if (assets == null) throw new NullPointerException("TitleBarVisualizer requires assets manager... ITS NULL YOU FOOL"); if (assets == null) throw new NullPointerException("TitleBarVisualizer requires assets manager... ITS NULL YOU FOOL");
visual = new Visualizer(); visual = new Visualizer();
@ -67,7 +68,7 @@ public class TitleBarVisualizer extends Group implements Disposable {
titleImage.setColor(Color.WHITE); titleImage.setColor(Color.WHITE);
addActor(titleImage); addActor(titleImage);
beatEffectPool = new ParticleEffectPool(assets.get("beateffect.p", ParticleEffect.class), 0, 5) { beatEffectPool = new ParticleEffectPool(assets.get("beateffect.p", ParticleEffect.class), 0, 8) {
@Override @Override
protected PooledEffect newObject() { protected PooledEffect newObject() {
PooledEffect effect = super.newObject(); PooledEffect effect = super.newObject();
@ -75,14 +76,22 @@ public class TitleBarVisualizer extends Group implements Disposable {
return effect; return effect;
} }
}; };
} }
@Override @Override
public void act(float delta) { public void act(float delta) {
if (visual.getVis().getCurrentAvg() > visual.getVis().getMaxAvgHeight()*0.55f) { if (!lastEffect) {
PooledEffect effect = beatEffectPool.obtain(); if (visual.getVis().getCurrentAvg() > visual.getVis().getMaxAvgHeight()*0.55f) {
effect.setPosition(0, 0); PooledEffect effect = beatEffectPool.obtain();
effects.add(effect); effect.setPosition(0, 0);
effects.add(effect);
lastEffect = true;
}
} else {
lastEffect = false;
} }
super.act(delta); super.act(delta);
} }

View File

@ -1,6 +1,5 @@
package zero1hd.rhythmbullet.graphics.ui.pages; package zero1hd.rhythmbullet.graphics.ui.pages;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label;
@ -16,7 +15,7 @@ public class MainPage extends Page implements OnDifferentSongListener {
private SongListController sc; private SongListController sc;
private TitleBarVisualizer titleBar; private TitleBarVisualizer titleBar;
public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc, OrthographicCamera camera) { public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc) {
this.sc = sc; this.sc = sc;
titleBar = new TitleBarVisualizer(core.getAssetManager()); titleBar = new TitleBarVisualizer(core.getAssetManager());

View File

@ -35,7 +35,7 @@ public class VolumeWindow extends Window {
save(); save();
musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%"); musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%");
if (music != null) { if (music != null) {
music.setVolume(musicVolSlider.getValue()/100f); music.setVolume(musicVolSlider.getValue());
} }
} }
}); });
@ -70,7 +70,7 @@ public class VolumeWindow extends Window {
public void setMusic(MusicManager music) { public void setMusic(MusicManager music) {
this.music = music; this.music = music;
if (music != null) { if (music != null) {
music.setVolume(prefs.getFloat("music vol")/100f); music.setVolume(prefs.getFloat("music vol"));
} }
} }
} }

View File

@ -80,10 +80,10 @@ public class GameScreen extends ScreenAdapter {
} }
/** /**
* needs to be called right after set as screen (should be called in show method). * needs to be called right after set as screen (should be called in show method).
* This is due to the saving preference being done once the screen is hidden. * This is due to the saving preference being done once the screen is hidden.
* @param prefs * @param prefs
*/ */
public void loadShaders() { public void loadShaders() {
if (core.getPrefs().getBoolean("glow shader")) { if (core.getPrefs().getBoolean("glow shader")) {
Gdx.app.debug("Shader", "using glow shader"); Gdx.app.debug("Shader", "using glow shader");
@ -141,6 +141,7 @@ public class GameScreen extends ScreenAdapter {
ShaderProgram.pedantic = false; ShaderProgram.pedantic = false;
} }
@Override @Override
public void render(float delta) { public void render(float delta) {
Gdx.gl.glClearColor(0f, 0f, 0f, 1f); Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
@ -185,9 +186,9 @@ public class GameScreen extends ScreenAdapter {
//Horizontal gaussian blur //Horizontal gaussian blur
hBlur.begin(); hBlur.begin();
fboRegion.setTexture(lightFilterBuffer.getColorBufferTexture()); fboRegion.setRegion(lightFilterBuffer.getColorBufferTexture());
gameArea.getBatch().setShader(gaussianBlurShader); gameArea.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformf("horizontal", 1); gaussianBlurShader.setUniformi("horizontal", 1);
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT); gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
gameArea.getBatch().flush(); gameArea.getBatch().flush();
hBlur.end( hBlur.end(
@ -198,9 +199,9 @@ public class GameScreen extends ScreenAdapter {
//Vertical gaussian blur //Vertical gaussian blur
vBlur.begin(); vBlur.begin();
fboRegion.setTexture(hBlur.getColorBufferTexture()); fboRegion.setRegion(hBlur.getColorBufferTexture());
gameArea.getBatch().setShader(gaussianBlurShader); gameArea.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformf("horizontal", 0); gaussianBlurShader.setUniformi("horizontal", 0);
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT); gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
gameArea.getBatch().flush(); gameArea.getBatch().flush();
vBlur.end( vBlur.end(

View File

@ -6,7 +6,6 @@ import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Image;
@ -16,24 +15,24 @@ import zero1hd.rhythmbullet.RhythmBullet;
public class LoadingScreen extends ScreenAdapter implements ApplicationListener { public class LoadingScreen extends ScreenAdapter implements ApplicationListener {
private Stage stage; private Stage stage;
RhythmBullet core; private RhythmBullet core;
Image zero1HD; private Texture splash;
private Image zero1HD;
private boolean done; private boolean done;
public LoadingScreen(RhythmBullet core) { public LoadingScreen(RhythmBullet core) {
this.core = core; this.core = core;
core.getAssetManager().load("splashlogo.png", Texture.class);
core.getAssetManager().finishLoading();
stage = new Stage(new ScreenViewport()); stage = new Stage(new ScreenViewport());
splash = new Texture(Gdx.files.internal("splashlogo.png"));
zero1HD = new Image(this.core.getAssetManager().get("splashlogo.png", Texture.class)); zero1HD = new Image(splash);
zero1HD.setScale((Gdx.graphics.getHeight()*0.8f)/zero1HD.getHeight());
zero1HD.setColor(0f,1f,1f,0f); zero1HD.setColor(0f,1f,1f,0f);
stage.addActor(zero1HD); stage.addActor(zero1HD);
zero1HD.setPosition(stage.getWidth()/2 - zero1HD.getWidth()/2, stage.getHeight()/2 - zero1HD.getHeight()/2); zero1HD.setPosition((stage.getWidth() - zero1HD.getWidth()*zero1HD.getScaleX())/2f, (stage.getHeight() - zero1HD.getHeight()*zero1HD.getScaleY())/2f);
zero1HD.addAction(Actions.sequence(Actions.color(Color.WHITE, 1f), Actions.fadeOut(0.5f))); zero1HD.addAction(Actions.sequence(Actions.color(Color.WHITE, 1f), Actions.fadeOut(0.5f)));
core.getrRHandler().setResolution(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
core.queueAssets(); core.queueAssets();
} }
@Override @Override
@ -51,6 +50,7 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
if (!zero1HD.hasActions() & core.getAssetManager().update()) { if (!zero1HD.hasActions() & core.getAssetManager().update()) {
moveOn(); moveOn();
} }
stage.draw(); stage.draw();
super.render(delta); super.render(delta);
} }
@ -59,14 +59,11 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
if (!done) { if (!done) {
Gdx.app.debug("Loading Screen", "queue has all been loaded. Action is done playing."); Gdx.app.debug("Loading Screen", "queue has all been loaded. Action is done playing.");
done = true; done = true;
core.generateFonts(Gdx.graphics.getHeight());
core.generateFonts(core.getPrefs().getInteger("screen-height"));
core.defineSkinStyles(); core.defineSkinStyles();
core.setScreen(new MainMenu(core)); core.setScreen(new MainMenu(core));
zero1HD.remove(); zero1HD.remove();
core.getAssetManager().unload("splashlogo.png");
core.getAssetManager().get("standard_thrust.p", ParticleEffect.class).flipY();
} }
} }
@ -79,6 +76,7 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
@Override @Override
public void hide() { public void hide() {
core.setInitComplete(); core.setInitComplete();
splash.dispose();
super.hide(); super.hide();
} }

View File

@ -5,6 +5,10 @@ import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.ScreenAdapter;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.InputListener;
@ -34,6 +38,18 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
private SongListController sc; private SongListController sc;
private float lerpAlpha; private float lerpAlpha;
private ShaderProgram gaussianBlurShader;
private ShaderProgram brightFilterShader;
private ShaderProgram combineShader;
private FrameBuffer lightFilterBuffer;
private FrameBuffer normalBuffer;
private FrameBuffer hBlur, vBlur;
private TextureRegion fboRegion;
private int fboSize;
private int blurlvl = 2;
public MainMenu(final RhythmBullet core) { public MainMenu(final RhythmBullet core) {
this.core = core; this.core = core;
stage = new Stage(new ScreenViewport()); stage = new Stage(new ScreenViewport());
@ -46,9 +62,153 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
sc = new SongListController(songList, core.getPrefs()); sc = new SongListController(songList, core.getPrefs());
sc.setAutoPlay(true); sc.setAutoPlay(true);
sc.setShuffle(true); sc.setShuffle(true);
loadShaders();
postTransition(); postTransition();
} }
public void loadShaders() {
if (core.getPrefs().getBoolean("glow shader")) {
Gdx.app.debug("Shader", "using glow shader");
brightFilterShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/bright_filter.fsh"));
if (!brightFilterShader.isCompiled()) {
System.err.println(brightFilterShader.getLog());
System.exit(0);
}
if (brightFilterShader.getLog().length() != 0) {
System.out.println(brightFilterShader.getLog());
}
gaussianBlurShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/gaussian_blur.fsh"));
if (!gaussianBlurShader.isCompiled()) {
System.err.println(gaussianBlurShader.getLog());
System.exit(0);
}
if (gaussianBlurShader.getLog().length() != 0) {
System.out.println(gaussianBlurShader.getLog());
}
combineShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/combine.fsh"));
if (!combineShader.isCompiled()) {
System.err.println(combineShader.getLog());
System.exit(0);
}
if (combineShader.getLog().length() != 0) {
System.out.println(combineShader.getLog());
}
if (Gdx.graphics.getWidth() < 1024) {
fboSize = 2048;
} else if (Gdx.graphics.getWidth() < 2048) {
fboSize = 4096;
} else {
fboSize = 4096;
}
lightFilterBuffer = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
normalBuffer = new FrameBuffer(Format.RGBA8888, fboSize, fboSize, false);
hBlur = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
vBlur = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
fboRegion = new TextureRegion();
combineShader.begin();
combineShader.setUniformi("u_texture1", 1);
combineShader.end();
vBlur.getColorBufferTexture().bind(1);
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
}
ShaderProgram.pedantic = false;
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(delta);
blurlvl = 5;
if (gaussianBlurShader != null) {
//Begin drawing a normal version of screen
normalBuffer.begin();
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
normalBuffer.end();
//END
//Begin light filtering
lightFilterBuffer.begin();
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.getBatch().setShader(brightFilterShader);
stage.getBatch().begin(); //BATCH STARTS HERE
stage.getRoot().draw(stage.getBatch(), 1f);
stage.getBatch().flush();
lightFilterBuffer.end();
//Horizontal gaussian blur
hBlur.begin();
fboRegion.setRegion(lightFilterBuffer.getColorBufferTexture());
stage.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformi("horizontal", 1);
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
stage.getBatch().flush();
hBlur.end();
//Vertical gaussian blur
vBlur.begin();
fboRegion.setRegion(hBlur.getColorBufferTexture());
stage.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformi("horizontal", 0);
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
stage.getBatch().flush();
vBlur.end();
for (int i = 0; i < blurlvl; i++) {
//Horizontal gaussian blur
hBlur.begin();
fboRegion.setRegion(vBlur.getColorBufferTexture());
stage.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformi("horizontal", 1);
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
stage.getBatch().flush();
hBlur.end();
//Vertical gaussian blur
vBlur.begin();
fboRegion.setRegion(hBlur.getColorBufferTexture());
stage.getBatch().setShader(gaussianBlurShader);
gaussianBlurShader.setUniformi("horizontal", 0);
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
stage.getBatch().flush();
vBlur.end();
}
//Draw everything to screen
stage.getBatch().setShader(combineShader);
fboRegion.setRegion(normalBuffer.getColorBufferTexture());
fboRegion.flip(false, true);
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
stage.getBatch().setShader(null);
stage.getBatch().end(); //BATCH ENDS HERE
} else {
stage.draw();
}
if (stage.getCamera().position.x != targetPosition.x || stage.getCamera().position.y != targetPosition.y) {
stage.getCamera().position.lerp(targetPosition, lerpAlpha);
}
super.render(delta);
}
@Override @Override
public void preTransition() { public void preTransition() {
stage.clear(); stage.clear();
@ -60,7 +220,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
@Override @Override
public void postTransition() { public void postTransition() {
mainPage = new MainPage(core, targetPosition, sc, (OrthographicCamera) stage.getCamera()); mainPage = new MainPage(core, targetPosition, sc);
mainPage.setPosition(0, 0); mainPage.setPosition(0, 0);
stage.addActor(mainPage); stage.addActor(mainPage);
@ -129,19 +289,6 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
} }
} }
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
if (stage.getCamera().position.x != targetPosition.x || stage.getCamera().position.y != targetPosition.y) {
stage.getCamera().position.lerp(targetPosition, lerpAlpha);
}
super.render(delta);
}
@Override @Override
public void resize(int width, int height) { public void resize(int width, int height) {
stage.getViewport().update(width, height, false); stage.getViewport().update(width, height, false);