51 lines
1.5 KiB
Java
51 lines
1.5 KiB
Java
package com.mojang.blaze3d.shaders;
|
|
|
|
import com.mojang.blaze3d.platform.GlStateManager;
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
import com.mojang.logging.LogUtils;
|
|
import java.io.IOException;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import org.slf4j.Logger;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class ProgramManager {
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
|
|
public static void glUseProgram(int program) {
|
|
RenderSystem.assertOnRenderThread();
|
|
GlStateManager._glUseProgram(program);
|
|
}
|
|
|
|
public static void releaseProgram(Shader shader) {
|
|
RenderSystem.assertOnRenderThread();
|
|
shader.getFragmentProgram().close();
|
|
shader.getVertexProgram().close();
|
|
GlStateManager.glDeleteProgram(shader.getId());
|
|
}
|
|
|
|
public static int createProgram() throws IOException {
|
|
RenderSystem.assertOnRenderThread();
|
|
int i = GlStateManager.glCreateProgram();
|
|
if (i <= 0) {
|
|
throw new IOException("Could not create shader program (returned program ID " + i + ")");
|
|
} else {
|
|
return i;
|
|
}
|
|
}
|
|
|
|
public static void linkShader(Shader shader) {
|
|
RenderSystem.assertOnRenderThread();
|
|
shader.attachToProgram();
|
|
GlStateManager.glLinkProgram(shader.getId());
|
|
int i = GlStateManager.glGetProgrami(shader.getId(), 35714);
|
|
if (i == 0) {
|
|
LOGGER.warn(
|
|
"Error encountered when linking program containing VS {} and FS {}. Log output:",
|
|
shader.getVertexProgram().getName(),
|
|
shader.getFragmentProgram().getName()
|
|
);
|
|
LOGGER.warn(GlStateManager.glGetProgramInfoLog(shader.getId(), 32768));
|
|
}
|
|
}
|
|
}
|