Skip to content

Commit c258cda

Browse files
committed
Simplified render for low-end devices
1 parent d565b06 commit c258cda

File tree

6 files changed

+99
-58
lines changed

6 files changed

+99
-58
lines changed

assets/bundles/bundle.properties

+2
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ setting.pm-graphics-settings.name = Graphics Settings
353353
setting.pm-sword-opacity.name = Sword Opacity
354354
setting.pm-zone-opacity.name = Zone Opacity
355355
setting.pm-tesla-range.name = Display Tesla Range When Attacking
356+
setting.pm-advanced-blackhole-rendering.name = Advanced Black Hole Rendering
357+
setting.pm-advanced-blackhole-rendering.description = Advanced rendering may be laggy on low-end devices.\nDisable if you have framerate issues.
356358
setting.pm-other-settings.name = Other Settings
357359
setting.pm-farting.name = Funi Mode :)
358360
setting.pm-farting.description = Restart required to apply changes.

assets/shaders/accretiondisk.frag assets/shaders/blackholerim.frag

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ uniform vec4 u_colors[MAX_COUNT];
1414
varying vec2 v_texCoords;
1515

1616
//https://stackoverflow.com/a/72973369
17-
vec4 blendOver(float4 a, float4 b) {
17+
vec4 blendOver(vec4 a, vec4 b) {
1818
float newAlpha = mix(b.w, 1.0, a.w);
1919
vec3 newColor = mix(b.w * b.xyz, a.xyz, a.w);
2020
float divideFactor = (newAlpha > 0.001 ? (1.0 / newAlpha) : 1.0);
21-
return float4(newColor * divideFactor, newAlpha);
21+
return vec4(newColor * divideFactor, newAlpha);
2222
}
2323

2424
void main() {

src/progressed/ProgMats.java

+1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ void loadSettings(){
142142
t.sliderPref("pm-sword-opacity", 100, 20, 100, 5, s -> s + "%");
143143
t.sliderPref("pm-zone-opacity", 100, 0, 100, 5, s -> s + "%");
144144
t.checkPref("pm-tesla-range", true);
145+
t.checkPref("pm-advanced-blackhole-rendering", true, PMRenders::toggleAdvancedBlackholes);
145146
t.pref(new Separator("pm-other-settings"));
146147
t.checkPref("pm-farting", false, b -> Sounds.wind3.play(Interp.pow2In.apply(Core.settings.getInt("sfxvol") / 100f) * 5f));
147148
});

src/progressed/graphics/PMShaders.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class PMShaders{
1717
public static AlphaShader alphaShader;
1818
public static DimShader dimShader;
1919
public static GravitationalLensingShader blackHole;
20-
public static AccretionDiskShader accretionDisk;
20+
public static BlackholeRimShader blackholeRim;
2121
public static PassThroughShader passThrough;
2222

2323
public static void init(){
@@ -36,12 +36,12 @@ public static void createBlackholeShader(){
3636
if(blackHole != null){
3737
GravitationalLensingShader.len *= 2;
3838
blackHole.dispose();
39-
accretionDisk.dispose();
39+
blackholeRim.dispose();
4040
}
4141

4242
Shader.prependFragmentCode = "#define MAX_COUNT " + GravitationalLensingShader.len + "\n";
4343
blackHole = new GravitationalLensingShader();
44-
accretionDisk = new AccretionDiskShader();
44+
blackholeRim = new BlackholeRimShader();
4545
Shader.prependFragmentCode = "";
4646
}
4747

@@ -181,12 +181,12 @@ public void apply(){
181181
}
182182
}
183183

184-
public static class AccretionDiskShader extends PMLoadShader{
184+
public static class BlackholeRimShader extends PMLoadShader{
185185
public float[] blackholes;
186186
public float[] colors;
187187

188-
AccretionDiskShader(){
189-
super("screenspace", "accretiondisk");
188+
BlackholeRimShader(){
189+
super("screenspace", "blackholerim");
190190
}
191191

192192
@Override

src/progressed/graphics/renders/BlackHoleRenderer.java

+83-49
Original file line numberDiff line numberDiff line change
@@ -14,63 +14,97 @@
1414
import static arc.Core.*;
1515
import static mindustry.Vars.renderer;
1616

17-
/** Renders the glowing area around black holes. (Do I even need this?) */
17+
/** Handles rendering of gravitational lensing and the glow around the center. */
1818
public class BlackHoleRenderer{
1919
private final Seq<BlackHoleZone> zones = new Seq<>(BlackHoleZone.class);
20-
private final FrameBuffer buffer;
20+
private FrameBuffer buffer;
21+
private boolean advanced = true;
2122

22-
public BlackHoleRenderer(){ //TODO setting
23-
buffer = new FrameBuffer();
23+
public BlackHoleRenderer(boolean advanced){
24+
toggleAdvanced(advanced);
2425

2526
Events.run(Trigger.draw, () -> {
26-
Draw.draw(Layer.min + 0.01f, () -> {
27-
buffer.resize(graphics.getWidth(), graphics.getHeight());
28-
buffer.begin();
29-
});
30-
31-
Draw.draw(Layer.max, () -> {
32-
buffer.end();
33-
34-
if(zones.size >= GravitationalLensingShader.len) PMShaders.createBlackholeShader();
35-
36-
float[] blackholes = new float[zones.size * 4];
37-
float[] colors = new float[zones.size * 4];
38-
for(int i = 0; i < zones.size; i++){
39-
BlackHoleZone zone = zones.get(i);
40-
blackholes[i * 4] = zone.x;
41-
blackholes[i * 4 + 1] = zone.y;
42-
blackholes[i * 4 + 2] = zone.inRadius;
43-
blackholes[i * 4 + 3] = zone.outRadius;
44-
45-
Tmp.c1.abgr8888(zone.color);
46-
colors[i * 4] = Tmp.c1.r;
47-
colors[i * 4 + 1] = Tmp.c1.g;
48-
colors[i * 4 + 2] = Tmp.c1.b;
49-
colors[i * 4 + 3] = Tmp.c1.a;
50-
}
51-
PMShaders.blackHole.blackholes = blackholes;
52-
buffer.blit(PMShaders.blackHole);
53-
54-
PMShaders.accretionDisk.blackholes = blackholes;
55-
PMShaders.accretionDisk.colors = colors;
56-
buffer.begin();
57-
Draw.rect();
58-
buffer.end();
59-
60-
Bloom bloom = renderer.bloom;
61-
if(bloom != null){
62-
bloom.capture();
63-
buffer.blit(PMShaders.accretionDisk);
64-
bloom.render();
65-
}else{
66-
buffer.blit(PMShaders.accretionDisk);
67-
}
68-
69-
zones.clear();
70-
});
27+
if(this.advanced){
28+
advancedDraw();
29+
}else{
30+
simplifiedDraw();
31+
}
7132
});
7233
}
7334

35+
public void advancedDraw(){
36+
Draw.draw(Layer.min + 0.01f, () -> {
37+
buffer.resize(graphics.getWidth(), graphics.getHeight());
38+
buffer.begin();
39+
});
40+
41+
Draw.draw(Layer.max, () -> {
42+
buffer.end();
43+
44+
if(zones.size >= GravitationalLensingShader.len) PMShaders.createBlackholeShader();
45+
46+
float[] blackholes = new float[zones.size * 4];
47+
float[] colors = new float[zones.size * 4];
48+
for(int i = 0; i < zones.size; i++){
49+
BlackHoleZone zone = zones.get(i);
50+
blackholes[i * 4] = zone.x;
51+
blackholes[i * 4 + 1] = zone.y;
52+
blackholes[i * 4 + 2] = zone.inRadius;
53+
blackholes[i * 4 + 3] = zone.outRadius;
54+
55+
Tmp.c1.abgr8888(zone.color);
56+
colors[i * 4] = Tmp.c1.r;
57+
colors[i * 4 + 1] = Tmp.c1.g;
58+
colors[i * 4 + 2] = Tmp.c1.b;
59+
colors[i * 4 + 3] = Tmp.c1.a;
60+
}
61+
PMShaders.blackHole.blackholes = blackholes;
62+
buffer.blit(PMShaders.blackHole);
63+
64+
PMShaders.blackholeRim.blackholes = blackholes;
65+
PMShaders.blackholeRim.colors = colors;
66+
buffer.begin();
67+
Draw.rect();
68+
buffer.end();
69+
70+
Bloom bloom = renderer.bloom;
71+
if(bloom != null){
72+
bloom.capture();
73+
buffer.blit(PMShaders.blackholeRim);
74+
bloom.render();
75+
}else{
76+
buffer.blit(PMShaders.blackholeRim);
77+
}
78+
zones.clear();
79+
});
80+
}
81+
82+
public void simplifiedDraw(){
83+
for(BlackHoleZone zone : zones){
84+
float rad = zone.inRadius * 4;
85+
Fill.light(
86+
zone.x, zone.y,
87+
Lines.circleVertices(rad), rad,
88+
Tmp.c1.abgr8888(zone.color), Tmp.c2.set(Tmp.c1).a(0f)
89+
);
90+
}
91+
Draw.color(Color.black);
92+
for(BlackHoleZone zone : zones){
93+
Fill.circle(zone.x, zone.y, zone.inRadius);
94+
}
95+
Draw.color();
96+
zones.clear();
97+
}
98+
99+
public void toggleAdvanced(boolean advanced){
100+
this.advanced = advanced;
101+
if(advanced){
102+
buffer = new FrameBuffer();
103+
}else{
104+
if(buffer != null) buffer.dispose();
105+
}
106+
}
107+
74108
public void add(float x, float y, float inRadius, float outRadius, Color color){
75109
if(inRadius > outRadius || outRadius <= 0) return;
76110

src/progressed/graphics/renders/PMRenders.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class PMRenders{
2323
flashTime;
2424

2525
public static void init(){
26-
blackHoleRenderer = new BlackHoleRenderer();
26+
blackHoleRenderer = new BlackHoleRenderer(Core.settings.getBool("pm-advanced-blackhole-rendering", true));
2727
dimRenderer = new DimRenderer();
2828

2929
Events.on(ResetEvent.class, e -> {
@@ -47,6 +47,10 @@ public static void init(){
4747
});
4848
}
4949

50+
public static void toggleAdvancedBlackholes(boolean advanced){
51+
if(blackHoleRenderer != null) blackHoleRenderer.toggleAdvanced(advanced);
52+
}
53+
5054
public static void flash(float intensity, float duration){
5155
flashIntensity = intensity;
5256
flashTime = Math.max(flashTime, duration);

0 commit comments

Comments
 (0)