34
34
import grondag .canvas .material .property .TextureMaterialState ;
35
35
import grondag .canvas .perf .ChunkRebuildCounters ;
36
36
import grondag .canvas .perf .Timekeeper ;
37
+ import grondag .canvas .pipeline .Pipeline ;
37
38
import grondag .canvas .pipeline .PipelineManager ;
38
39
import grondag .canvas .pipeline .config .PipelineLoader ;
39
40
import grondag .canvas .shader .GlMaterialProgramManager ;
46
47
import grondag .canvas .terrain .util .ChunkColorCache ;
47
48
48
49
public class CanvasState {
49
- public static void recompileIfNeeded (boolean forceRecompile ) {
50
- while (CanvasMod .RECOMPILE .consumeClick ()) {
51
- forceRecompile = true ;
50
+ public static void handleRecompileKeybind () {
51
+ final boolean recompilePressed = CanvasMod .RECOMPILE .consumeClick ();
52
+
53
+ while (true ) {
54
+ // consume all clicks
55
+ if (!CanvasMod .RECOMPILE .consumeClick ()) {
56
+ break ;
57
+ }
58
+ }
59
+
60
+ if (recompilePressed ) {
61
+ recompile (false );
62
+ }
63
+ }
64
+
65
+ public static void recompile () {
66
+ recompile (false );
67
+ }
68
+
69
+ private static int loopCounter = 0 ;
70
+
71
+ private static boolean recompilePipeline () {
72
+ final boolean prevColorLightsState = Pipeline .coloredLightsEnabled ();
73
+ final boolean prevAdvancedCullingState = Pipeline .advancedTerrainCulling ();
74
+
75
+ PipelineLoader .reload (Minecraft .getInstance ().getResourceManager ());
76
+ PipelineManager .reload ();
77
+
78
+ final boolean coloredLightsChanged = Pipeline .coloredLightsEnabled () && !prevColorLightsState ;
79
+ final boolean requireCullingRebuild = Pipeline .advancedTerrainCulling () && !prevAdvancedCullingState ;
80
+
81
+ return coloredLightsChanged || requireCullingRebuild ;
82
+ }
83
+
84
+ private static void recompile (boolean alreadyReloaded ) {
85
+ CanvasMod .LOG .info (I18n .get ("info.canvas.recompile" ));
86
+
87
+ final boolean requireReload = recompilePipeline ();
88
+
89
+ if (!alreadyReloaded && loopCounter < 2 && requireReload ) {
90
+ CanvasMod .LOG .info (I18n .get ("info.canvas.recompile_needs_reload" ));
91
+ loopCounter ++;
92
+ Minecraft .getInstance ().levelRenderer .allChanged ();
93
+ return ;
52
94
}
53
95
54
- if (forceRecompile ) {
55
- CanvasMod .LOG .info (I18n .get ("info.canvas.recompile" ));
56
- PipelineLoader .reload (Minecraft .getInstance ().getResourceManager ());
57
- PipelineManager .reload ();
58
- LightDataManager .reload ();
59
- PreReleaseShaderCompat .reload ();
60
- MaterialProgram .reload ();
61
- GlShaderManager .INSTANCE .reload ();
62
- GlProgramManager .INSTANCE .reload ();
63
- GlMaterialProgramManager .INSTANCE .reload ();
64
- // LightmapHdTexture.reload();
65
- // LightmapHd.reload();
66
- TextureMaterialState .reload ();
67
- ShaderDataManager .reload ();
68
- Timekeeper .configOrPipelineReload ();
96
+ LightDataManager .reload ();
97
+ PreReleaseShaderCompat .reload ();
98
+ MaterialProgram .reload ();
99
+ GlShaderManager .INSTANCE .reload ();
100
+ GlProgramManager .INSTANCE .reload ();
101
+ GlMaterialProgramManager .INSTANCE .reload ();
102
+ // LightmapHdTexture.reload();
103
+ // LightmapHd.reload();
104
+ TextureMaterialState .reload ();
105
+ ShaderDataManager .reload ();
106
+ Timekeeper .configOrPipelineReload ();
107
+
108
+ if (loopCounter > 1 ) {
109
+ CanvasMod .LOG .warn ("Reloading recursively twice or more. This isn't supposed to happen." );
69
110
}
111
+
112
+ loopCounter = 0 ;
70
113
}
71
114
72
115
public static void reload () {
@@ -79,6 +122,6 @@ public static void reload() {
79
122
ChunkColorCache .invalidate ();
80
123
AoFace .clampExteriorVertices (Configurator .clampExteriorVertices );
81
124
82
- recompileIfNeeded (true );
125
+ recompile (true );
83
126
}
84
127
}
0 commit comments