Beispiel #1
0
        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;
 }
Beispiel #3
0
        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();
            }
        }