public static int loadProgram(String path, String vertexName, String fragmentName) {
		int program = glCreateProgram();
		int vertex = glCreateShader(GL_VERTEX_SHADER);
		int fragment = glCreateShader(GL_FRAGMENT_SHADER);
		
		StringBuilder vertexSource = new StringBuilder();
		StringBuilder fragmentSource = new StringBuilder();
		
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(ShaderLoader.class.getResourceAsStream(path + vertexName + ".vert")));
			String line;
			while ((line = reader.readLine()) != null)
				vertexSource.append(line).append('\n');
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(ShaderLoader.class.getResourceAsStream(path + fragmentName + ".frag")));
			String line;
			while ((line = reader.readLine()) != null)
				fragmentSource.append(line).append("\n");
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		glShaderSource(vertex, vertexSource);
		glCompileShader(vertex);
		if (glGetShaderi(vertex, GL_COMPILE_STATUS) == GL_FALSE)
			System.err.println(vertexName + "_vertex " + "Vertex-Shader '" + vertexName + "' could not be compiled \n Error log:\n" + glGetShaderInfoLog(vertex, 1024));
		
		glShaderSource(fragment, fragmentSource);
		glCompileShader(fragment);
		if (glGetShaderi(fragment, GL_COMPILE_STATUS) == GL_FALSE)
			System.err.println(fragmentName + "_fragment " + "Fragment-Shader '" + fragmentName + "' could not be compiled \n Error log:\n" + glGetShaderInfoLog(fragment, 1024));
		
		glAttachShader(program, vertex);
		glAttachShader(program, fragment);
		
		glLinkProgram(program);
		glValidateProgram(program);
		
		return program;
	}