2020-07-22 06:23:34 +01:00
package com.mojang.blaze3d.shaders ;
import org.apache.logging.log4j.LogManager ;
import java.io.IOException ;
2020-07-22 06:25:47 +01:00
import com.mojang.blaze3d.platform.GlStateManager ;
import com.mojang.blaze3d.systems.RenderSystem ;
2020-07-22 06:23:34 +01:00
import org.apache.logging.log4j.Logger ;
public class ProgramManager {
private static final Logger LOGGER ;
2020-07-22 06:25:47 +01:00
public static void glUseProgram ( final int integer ) {
RenderSystem . assertThread ( RenderSystem : : isOnRenderThread ) ;
GlStateManager . _glUseProgram ( integer ) ;
2020-07-22 06:23:34 +01:00
}
2020-07-22 06:30:03 +01:00
public static void releaseProgram ( final Effect cyb ) {
2020-07-22 06:25:47 +01:00
RenderSystem . assertThread ( RenderSystem : : isOnRenderThread ) ;
2020-07-22 06:30:03 +01:00
cyb . getFragmentProgram ( ) . close ( ) ;
cyb . getVertexProgram ( ) . close ( ) ;
GlStateManager . glDeleteProgram ( cyb . getId ( ) ) ;
2020-07-22 06:23:34 +01:00
}
2020-07-22 06:25:47 +01:00
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 + " ) " ) ;
2020-07-22 06:23:34 +01:00
}
2020-07-22 06:25:47 +01:00
return integer1 ;
2020-07-22 06:23:34 +01:00
}
2020-07-22 06:30:03 +01:00
public static void linkProgram ( final Effect cyb ) throws IOException {
2020-07-22 06:25:47 +01:00
RenderSystem . assertThread ( RenderSystem : : isOnRenderThread ) ;
2020-07-22 06:30:03 +01:00
cyb . getFragmentProgram ( ) . attachToEffect ( cyb ) ;
cyb . getVertexProgram ( ) . attachToEffect ( cyb ) ;
GlStateManager . glLinkProgram ( cyb . getId ( ) ) ;
final int integer2 = GlStateManager . glGetProgrami ( cyb . getId ( ) , 35714 ) ;
2020-07-22 06:25:47 +01:00
if ( integer2 = = 0 ) {
2020-07-22 06:30:03 +01:00
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 ) ) ;
2020-07-22 06:23:34 +01:00
}
}
static {
LOGGER = LogManager . getLogger ( ) ;
}
}