public static GLShaderProgram Create(string shaderName) { if (sShaderPrograms.TryGetValue(shaderName, out var shaderProgram)) { return(shaderProgram); } string fragmentShaderFilePath = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".frag")); string vertexShaderFilePath = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".vert")); if (!File.Exists(fragmentShaderFilePath) || !File.Exists(vertexShaderFilePath)) { return(null); } int fragmentShader = CreateShader(ShaderType.FragmentShader, File.ReadAllText(fragmentShaderFilePath)); if (fragmentShader == -1) { return(null); } int vertexShader = CreateShader(ShaderType.VertexShader, File.ReadAllText(vertexShaderFilePath)); if (vertexShader == -1) { return(null); } int shaderProgramId = GL.CreateProgram(); GL.AttachShader(shaderProgramId, fragmentShader); GL.AttachShader(shaderProgramId, vertexShader); GL.LinkProgram(shaderProgramId); GL.DeleteShader(fragmentShader); GL.DeleteShader(vertexShader); shaderProgram = new GLShaderProgram(shaderName, shaderProgramId); sShaderPrograms.Add(shaderName, shaderProgram); return(shaderProgram); }
private static string GetPath(string path) => ResourceStore.GetPath("material_presets\\" + path);