package engine.utils; import engine.utils.FileUtils; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL20.*; public class ShaderUtils { private ShaderUtils(){ } public static int load(String vertPath, String fragPath){ String vert = FileUtils.loadAsString(vertPath); String frag = FileUtils.loadAsString(fragPath); return create(vert, frag); } public static int create(String vert, String frag){ // On crée et compile le vertex et le fragment shader int vertID = glCreateShader(GL_VERTEX_SHADER); int fragID = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(vertID, vert); glShaderSource(fragID, frag); glCompileShader(vertID); if (glGetShaderi(vertID, GL_COMPILE_STATUS) == GL_FALSE){ System.err.println("Failed to compile vertex shader"); System.err.println(glGetShaderInfoLog(vertID)); return -1; } glCompileShader(fragID); if (glGetShaderi(fragID, GL_COMPILE_STATUS) == GL_FALSE){ System.err.println("Failed to compile fragment shader"); System.err.println(glGetShaderInfoLog(fragID)); return -1; } //on lie les shaders au programme int program = glCreateProgram(); glAttachShader(program, vertID); glAttachShader(program, fragID); glLinkProgram(program); if(glGetProgrami(program, GL_LINK_STATUS) == GL_FALSE) { System.err.println("Failed to link vertex and fragment shader"); System.err.println(glGetShaderInfoLog(program)); return -1; } glValidateProgram(program); glDeleteShader(vertID); glDeleteShader(fragID); return program; } }