Partial 7.0 merge - API preview
This commit is contained in:
@@ -6,92 +6,80 @@ import arc.graphics.gl.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public enum CacheLayer{
|
||||
water{
|
||||
@Override
|
||||
public void begin(){
|
||||
beginShader();
|
||||
}
|
||||
public class CacheLayer{
|
||||
public static CacheLayer
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
endShader(Shaders.water);
|
||||
}
|
||||
},
|
||||
mud{
|
||||
@Override
|
||||
public void begin(){
|
||||
beginShader();
|
||||
}
|
||||
water, mud, tar, slag, space, normal, walls;
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
endShader(Shaders.mud);
|
||||
}
|
||||
},
|
||||
tar{
|
||||
@Override
|
||||
public void begin(){
|
||||
beginShader();
|
||||
}
|
||||
public static CacheLayer[] all = {};
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
endShader(Shaders.tar);
|
||||
}
|
||||
},
|
||||
slag{
|
||||
@Override
|
||||
public void begin(){
|
||||
beginShader();
|
||||
}
|
||||
public int id;
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
endShader(Shaders.slag);
|
||||
}
|
||||
},
|
||||
space{
|
||||
@Override
|
||||
public void begin(){
|
||||
beginShader();
|
||||
}
|
||||
/** Register a new CacheLayer. */
|
||||
public static void add(CacheLayer... layers){
|
||||
int newSize = all.length + layers.length;
|
||||
var prev = all;
|
||||
//reallocate the array and copy everything over; performance matters very little here anyway
|
||||
all = new CacheLayer[newSize];
|
||||
System.arraycopy(prev, 0, all, 0, prev.length);
|
||||
System.arraycopy(layers, 0, all, prev.length, layers.length);
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
endShader(Shaders.space);
|
||||
for(int i = 0; i < all.length; i++){
|
||||
all[i].id = i;
|
||||
}
|
||||
},
|
||||
normal,
|
||||
walls;
|
||||
}
|
||||
|
||||
public static final CacheLayer[] all = values();
|
||||
/** Loads default cache layers. */
|
||||
public static void init(){
|
||||
add(
|
||||
water = new ShaderLayer(Shaders.water),
|
||||
mud = new ShaderLayer(Shaders.mud),
|
||||
tar = new ShaderLayer(Shaders.tar),
|
||||
slag = new ShaderLayer(Shaders.slag),
|
||||
space = new ShaderLayer(Shaders.space),
|
||||
normal = new CacheLayer(),
|
||||
walls = new CacheLayer()
|
||||
);
|
||||
}
|
||||
|
||||
/** Called before the cache layer begins rendering. Begin FBOs here. */
|
||||
public void begin(){
|
||||
|
||||
}
|
||||
|
||||
/** Called after the cache layer ends rendering. Blit FBOs here. */
|
||||
public void end(){
|
||||
|
||||
}
|
||||
|
||||
void beginShader(){
|
||||
if(!Core.settings.getBool("animatedwater")) return;
|
||||
public static class ShaderLayer extends CacheLayer{
|
||||
public Shader shader;
|
||||
|
||||
renderer.blocks.floor.endc();
|
||||
renderer.effectBuffer.begin();
|
||||
Core.graphics.clear(Color.clear);
|
||||
renderer.blocks.floor.beginc();
|
||||
}
|
||||
public ShaderLayer(Shader shader){
|
||||
//shader will be null on headless backend, but that's ok
|
||||
this.shader = shader;
|
||||
}
|
||||
|
||||
void endShader(Shader shader){
|
||||
if(!Core.settings.getBool("animatedwater")) return;
|
||||
@Override
|
||||
public void begin(){
|
||||
if(!Core.settings.getBool("animatedwater")) return;
|
||||
|
||||
renderer.blocks.floor.endc();
|
||||
renderer.effectBuffer.end();
|
||||
renderer.blocks.floor.endc();
|
||||
renderer.effectBuffer.begin();
|
||||
Core.graphics.clear(Color.clear);
|
||||
renderer.blocks.floor.beginc();
|
||||
}
|
||||
|
||||
renderer.effectBuffer.blit(shader);
|
||||
@Override
|
||||
public void end(){
|
||||
if(!Core.settings.getBool("animatedwater")) return;
|
||||
|
||||
renderer.blocks.floor.beginc();
|
||||
renderer.blocks.floor.endc();
|
||||
renderer.effectBuffer.end();
|
||||
|
||||
renderer.effectBuffer.blit(shader);
|
||||
|
||||
renderer.blocks.floor.beginc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user