mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-01-10 22:36:06 +01:00
7a080a5538
- *make the errors understandable without actually solving them - Straighten out shader compilation/error generation - Interpret errors in generated code - Compilation returns a result type instead of throwing an exception - Still need to reimplement source checks? - Make error messages prettier
54 lines
1.6 KiB
Java
54 lines
1.6 KiB
Java
package com.jozufozu.flywheel.backend;
|
|
|
|
import com.jozufozu.flywheel.backend.instancing.InstancedRenderDispatcher;
|
|
import com.jozufozu.flywheel.backend.instancing.compile.FlwCompiler;
|
|
import com.jozufozu.flywheel.core.source.ShaderSources;
|
|
import com.jozufozu.flywheel.core.source.error.ErrorReporter;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.multiplayer.ClientLevel;
|
|
import net.minecraft.server.packs.resources.ReloadableResourceManager;
|
|
import net.minecraft.server.packs.resources.ResourceManager;
|
|
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
|
|
|
|
/**
|
|
* The main entity for loading shaders.
|
|
*
|
|
* <p>
|
|
* This class is responsible for invoking the loading, parsing, and compilation stages.
|
|
* </p>
|
|
*/
|
|
public class Loader implements ResourceManagerReloadListener {
|
|
|
|
Loader() {
|
|
// Can be null when running datagenerators due to the unfortunate time we call this
|
|
Minecraft minecraft = Minecraft.getInstance();
|
|
if (minecraft == null) {
|
|
return;
|
|
}
|
|
|
|
if (minecraft.getResourceManager() instanceof ReloadableResourceManager reloadable) {
|
|
reloadable.registerReloadListener(this);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onResourceManagerReload(ResourceManager manager) {
|
|
Backend.refresh();
|
|
|
|
var errorReporter = new ErrorReporter();
|
|
ShaderSources sources = new ShaderSources(errorReporter, manager);
|
|
|
|
if (FlwCompiler.INSTANCE != null) {
|
|
FlwCompiler.INSTANCE.delete();
|
|
}
|
|
|
|
FlwCompiler.INSTANCE = new FlwCompiler(sources);
|
|
|
|
ClientLevel level = Minecraft.getInstance().level;
|
|
if (Backend.canUseInstancing(level)) {
|
|
InstancedRenderDispatcher.resetInstanceLevel(level);
|
|
}
|
|
|
|
}
|
|
}
|