Partial 7.0 merge - API preview

This commit is contained in:
Anuken
2021-06-02 11:08:08 -04:00
parent ea75a357ca
commit 28b235ef07
531 changed files with 12356 additions and 6286 deletions

View File

@@ -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();
}
}
}