49 lines
1.9 KiB
Java
49 lines
1.9 KiB
Java
package com.mojang.blaze3d.shaders;
|
|
|
|
import org.apache.logging.log4j.LogManager;
|
|
import java.io.IOException;
|
|
import com.mojang.blaze3d.platform.GlStateManager;
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
import org.apache.logging.log4j.Logger;
|
|
|
|
public class ProgramManager {
|
|
private static final Logger LOGGER;
|
|
|
|
public static void glUseProgram(final int integer) {
|
|
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
|
|
GlStateManager._glUseProgram(integer);
|
|
}
|
|
|
|
public static void releaseProgram(final Effect cyb) {
|
|
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
|
|
cyb.getFragmentProgram().close();
|
|
cyb.getVertexProgram().close();
|
|
GlStateManager.glDeleteProgram(cyb.getId());
|
|
}
|
|
|
|
public static int createProgram() throws IOException {
|
|
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
|
|
final int integer1 = GlStateManager.glCreateProgram();
|
|
if (integer1 <= 0) {
|
|
throw new IOException("Could not create shader program (returned program ID " + integer1 + ")");
|
|
}
|
|
return integer1;
|
|
}
|
|
|
|
public static void linkProgram(final Effect cyb) throws IOException {
|
|
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
|
|
cyb.getFragmentProgram().attachToEffect(cyb);
|
|
cyb.getVertexProgram().attachToEffect(cyb);
|
|
GlStateManager.glLinkProgram(cyb.getId());
|
|
final int integer2 = GlStateManager.glGetProgrami(cyb.getId(), 35714);
|
|
if (integer2 == 0) {
|
|
ProgramManager.LOGGER.warn("Error encountered when linking program containing VS {} and FS {}. Log output:", cyb.getVertexProgram().getName(), cyb.getFragmentProgram().getName());
|
|
ProgramManager.LOGGER.warn(GlStateManager.glGetProgramInfoLog(cyb.getId(), 32768));
|
|
}
|
|
}
|
|
|
|
static {
|
|
LOGGER = LogManager.getLogger();
|
|
}
|
|
}
|