Я хочу поставить кастомный шейдер на 1.21.4 mcp + optifine.
Как мне это сделать? у меня есть класс с инициализацией его:
Как только я начинаю рендрить его:
то происходит вот это:
Что делать? как правильно указать путь или это вообще не из за пути зависит?
я решил закинуть в некоторые места шейдер custom_shader и вот пути:
src/main/resources/assets/minecraft/shaders/core
src/main/java/assets/minecraft/shaders/core
все ровно не получается
Как мне это сделать? у меня есть класс с инициализацией его:
Java:
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import net.minecraft.client.renderer.ShaderDefines;
import net.minecraft.client.renderer.ShaderProgram;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceProvider;
public class CustomShader {
private static ShaderProgram customShaderProgram;
public static void init(ResourceProvider resourceProvider) {
try {
// Регистрация шейдера
ResourceLocation shaderLocation = new ResourceLocation("core/custom_shader");
System.out.println("TEST123 " + shaderLocation.toDebugFileName());
System.out.println("TEST123 " + shaderLocation.getPath());
System.out.println("TEST123 " + shaderLocation.getNamespace());
System.out.println("TEST123 " + shaderLocation.toString());
System.out.println(resourceProvider.getResource(shaderLocation).toString());
customShaderProgram = new ShaderProgram(
shaderLocation,
DefaultVertexFormat.POSITION_COLOR,
ShaderDefines.EMPTY
);
} catch (Exception e) {
throw new RuntimeException("Failed to load custom shader", e);
}
}
public static ShaderProgram getCustomShader() {
return customShaderProgram;
}
}
Как только я начинаю рендрить его:
Java:
public static void drawRect(GuiGraphics guiGraphics, float x, float y, float width, float height, int color) {
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
Matrix4f matrix4f = guiGraphics.pose.last().pose();
CompiledShaderProgram shader = RenderSystem.setShader(CustomShader.getCustomShader());
shader.getUniform("Size").set(width, height);
shader.getUniform("Radius").set(0.f, 0.f, 0.f, 0.f);
shader.getUniform("Smoothness").set(0.f);
BufferBuilder builder = tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
builder.addVertex(matrix4f, x, y, 0).setColor(color);
builder.addVertex(matrix4f, x, y + height, 0).setColor(color);
builder.addVertex(matrix4f, x + width, y + height, 0).setColor(color);
builder.addVertex(matrix4f, x + width, y, 0).setColor(color);
tessellator.draw(builder);
RenderSystem.enableCull();
RenderSystem.disableBlend();
}
то происходит вот это:
Код:
Failed to load shader program: minecraft:core/custom_shader (VertexFormat POSITION_COLOR, 16B, [Position, Color]) net.minecraft.client.renderer.ShaderManager$CompilationException: Could not find program with id: minecraft:core/custom_shader
Что делать? как правильно указать путь или это вообще не из за пути зависит?
Я хочу поставить кастомный шейдер на 1.21.4 mcp + optifine.
Как мне это сделать? у меня есть класс с инициализацией его:
Java:import com.mojang.blaze3d.vertex.DefaultVertexFormat; import net.minecraft.client.renderer.ShaderDefines; import net.minecraft.client.renderer.ShaderProgram; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceProvider; public class CustomShader { private static ShaderProgram customShaderProgram; public static void init(ResourceProvider resourceProvider) { try { // Регистрация шейдера ResourceLocation shaderLocation = new ResourceLocation("core/custom_shader"); System.out.println("TEST123 " + shaderLocation.toDebugFileName()); System.out.println("TEST123 " + shaderLocation.getPath()); System.out.println("TEST123 " + shaderLocation.getNamespace()); System.out.println("TEST123 " + shaderLocation.toString()); System.out.println(resourceProvider.getResource(shaderLocation).toString()); customShaderProgram = new ShaderProgram( shaderLocation, DefaultVertexFormat.POSITION_COLOR, ShaderDefines.EMPTY ); } catch (Exception e) { throw new RuntimeException("Failed to load custom shader", e); } } public static ShaderProgram getCustomShader() { return customShaderProgram; } }
Как только я начинаю рендрить его:
Java:public static void drawRect(GuiGraphics guiGraphics, float x, float y, float width, float height, int color) { RenderSystem.enableBlend(); RenderSystem.defaultBlendFunc(); RenderSystem.disableCull(); Matrix4f matrix4f = guiGraphics.pose.last().pose(); CompiledShaderProgram shader = RenderSystem.setShader(CustomShader.getCustomShader()); shader.getUniform("Size").set(width, height); shader.getUniform("Radius").set(0.f, 0.f, 0.f, 0.f); shader.getUniform("Smoothness").set(0.f); BufferBuilder builder = tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); builder.addVertex(matrix4f, x, y, 0).setColor(color); builder.addVertex(matrix4f, x, y + height, 0).setColor(color); builder.addVertex(matrix4f, x + width, y + height, 0).setColor(color); builder.addVertex(matrix4f, x + width, y, 0).setColor(color); tessellator.draw(builder); RenderSystem.enableCull(); RenderSystem.disableBlend(); }
то происходит вот это:
Код:Failed to load shader program: minecraft:core/custom_shader (VertexFormat POSITION_COLOR, 16B, [Position, Color]) net.minecraft.client.renderer.ShaderManager$CompilationException: Could not find program with id: minecraft:core/custom_shader
Что делать? как правильно указать путь или это вообще не из за пути зависит?
я решил закинуть в некоторые места шейдер custom_shader и вот пути:
src/main/resources/assets/minecraft/shaders/core
src/main/java/assets/minecraft/shaders/core
все ровно не получается
Последнее редактирование: