private ShaderProgram _compileProgram(string vertexSource, string fragmentSource, string name = null) { Shader vertexShader = null; Shader fragmentShader = null; try { try { vertexShader = new Shader(this, ShaderType.VertexShader, vertexSource); } catch (ShaderCompilationException e) { throw new ShaderCompilationException( "Failed to compile vertex shader, see inner for details.", e); } try { fragmentShader = new Shader(this, ShaderType.FragmentShader, fragmentSource); } catch (ShaderCompilationException e) { throw new ShaderCompilationException( "Failed to compile fragment shader, see inner for details.", e); } var program = new ShaderProgram(this, name); program.Add(vertexShader); program.Add(fragmentShader); try { program.Link(); } catch (ShaderCompilationException e) { program.Delete(); throw new ShaderCompilationException("Failed to link shaders. See inner for details.", e); } return(program); } finally { vertexShader?.Delete(); fragmentShader?.Delete(); } }
public ShaderProgram Get(string name) { if (_shaders.ContainsKey(name)) return _shaders[name]; var program = new ShaderProgram(); if (File.Exists(Path.Combine("Shaders", name + ".Vert"))) { using (var sr = new StreamReader("Shaders/" + name + ".Vert")) { program.Add(new VertexShader(sr.ReadToEnd())); } } if (File.Exists(Path.Combine("Shaders", name + ".Frag"))) { using (var sr = new StreamReader("Shaders/" + name + ".Frag")) { program.Add(new FragmentShader(sr.ReadToEnd())); } } program.Link(); _shaders.Add(name,program); return program; }
private ShaderProgram _compileProgram(ResourcePath vertex, ResourcePath fragment, string name = null) { string vertexSource; string fragmentSource; using (var vertexReader = new StreamReader(_resourceCache.ContentFileRead(vertex), Encoding.UTF8)) { vertexSource = vertexReader.ReadToEnd(); } using (var fragmentReader = new StreamReader(_resourceCache.ContentFileRead(fragment), Encoding.UTF8)) { fragmentSource = fragmentReader.ReadToEnd(); } Shader vertexShader = null; Shader fragmentShader = null; try { try { vertexShader = new Shader(this, ShaderType.VertexShader, vertexSource, vertex.ToString()); } catch (ShaderCompilationException e) { throw new ShaderCompilationException( $"Failed to compile vertex shader {vertex}, see inner for details.", e); } try { fragmentShader = new Shader(this, ShaderType.FragmentShader, fragmentSource, fragment.ToString()); } catch (ShaderCompilationException e) { throw new ShaderCompilationException( $"Failed to compile fragment shader {fragment}, see inner for details.", e); } var program = new ShaderProgram(this, name); program.Add(vertexShader); program.Add(fragmentShader); try { program.Link(); } catch (ShaderCompilationException e) { program.Delete(); throw new ShaderCompilationException( $"Failed to link shaders. vert: {vertex}, frag: {fragment}, see inner for details.", e); } return(program); } finally { vertexShader?.Delete(); fragmentShader?.Delete(); } }