This repository has been archived on 2026-05-22. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Tetrahedrons/Platformer/Util/Shader.cs

41 lines
1.1 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using OpenTK.Graphics.OpenGL4;
namespace Platformer.Util
{
public class Shader : GlObj
{
private static Dictionary<string, ShaderType> _shaderTypes = new Dictionary<string, ShaderType>()
{
[".vert"] = ShaderType.VertexShader,
[".frag"] = ShaderType.FragmentShader,
[".geom"] = ShaderType.GeometryShader,
[".comp"] = ShaderType.ComputeShader,
};
public Shader(ShaderType type) : base(GL.CreateShader(type))
{
}
public static Shader Compile(ShaderType type, string source)
{
var s = new Shader(type);
GL.ShaderSource(s, source);
GL.CompileShader(s);
Console.Error.WriteLine(GL.GetShaderInfoLog(s));
return s;
}
public static Shader Compile(string filename)
{
var ext = Path.GetExtension(filename);
if (!_shaderTypes.ContainsKey(ext))
throw new InvalidOperationException($"Can't infer shader type for {filename}");
return Compile(_shaderTypes[ext], File.ReadAllText(filename));
}
}
}