/// <summary>
 /// シェーダーとログを指定して作成する
 /// </summary>
 /// <param name="shader">シェーダー</param>
 /// <param name="type">シェーダーの種類</param>
 /// <param name="infoLog">ログ</param>
 public CompileShaderException(int shader, OpenTK.Graphics.OpenGL.ShaderType type, string infoLog)
     : base()
 {
     // シェーダーとログを設定
     this.Shader = shader;
     this.Type = type;
     this.InfoLog = infoLog;
 }
Esempio n. 2
0
 /// <summary>
 /// シェーダーとログを指定して作成する
 /// </summary>
 /// <param name="shader">シェーダー</param>
 /// <param name="type">シェーダーの種類</param>
 /// <param name="infoLog">ログ</param>
 public CompileShaderException(int shader, OpenTK.Graphics.OpenGL.ShaderType type, string infoLog)
     : base()
 {
     // シェーダーとログを設定
     this.Shader  = shader;
     this.Type    = type;
     this.InfoLog = infoLog;
 }
        private int CreateShader(string shaderSource, ShaderType type)
        {
            int shaderHandle = GL.CreateShader(type);

            GL.ShaderSource(shaderHandle, shaderSource);
            GL.CompileShader(shaderHandle);
            Console.WriteLine(GL.GetShaderInfoLog(shaderHandle));
            return(shaderHandle);
        }
Esempio n. 4
0
        //TODO: Move to Core? Dev calls LoadShaders from Core, it analyzes shaders and tells runtime there's shaders to do
        //So this should be scanning for shaders and sending them to appropriate facility
//todo: this side of the renderer should have separate classes for each renderer containing things like that, keep away from plugin since why would it have a xml parser. actually it's about the shadertype type, overrides should be the soluttion
        public static System.Collections.Generic.Dictionary <System.String, System.Collections.Generic.Dictionary <OpenTK.Graphics.OpenGL.ShaderType, System.String> > GetShaders(System.Xml.XmlDocument definitionFile)
        {
            if (definitionFile.GetElementsByTagName("shaderPackage").Count.Equals(0))
            {
                throw new System.Exception("Invalid shader definition file.");
            }

            System.Collections.Generic.Dictionary <OpenTK.Graphics.OpenGL.ShaderType, System.String> shaderGroup = new System.Collections.Generic.Dictionary <OpenTK.Graphics.OpenGL.ShaderType, System.String>(7);
            System.Collections.Generic.Dictionary <System.String, System.Collections.Generic.Dictionary <OpenTK.Graphics.OpenGL.ShaderType, System.String> > shaderPackage = new System.Collections.Generic.Dictionary <System.String, System.Collections.Generic.Dictionary <OpenTK.Graphics.OpenGL.ShaderType, System.String> >();
            System.Xml.XmlNodeList groups = definitionFile.GetElementsByTagName("shaderGroup");
            foreach (System.Xml.XmlNode group in groups)
            {
                System.String namen = group.Attributes["name"].Value;
                foreach (System.Xml.XmlNode shader in group)
                {
                    System.String type = shader.Attributes["type"].Value;
                    OpenTK.Graphics.OpenGL.ShaderType shaderType = OpenTK.Graphics.OpenGL.ShaderType.VertexShader; //init to keep vs silent
                    switch (type)
                    {
                    case "vertex": shaderType = OpenTK.Graphics.OpenGL.ShaderType.VertexShader; break;

                    case "fragment": shaderType = OpenTK.Graphics.OpenGL.ShaderType.FragmentShader; break;

                    case "geometry": shaderType = OpenTK.Graphics.OpenGL.ShaderType.GeometryShader; break;

                    case "compute": shaderType = OpenTK.Graphics.OpenGL.ShaderType.ComputeShader; break;

                    case "tessControl": shaderType = OpenTK.Graphics.OpenGL.ShaderType.TessControlShader; break;

                    case "tessEval": shaderType = OpenTK.Graphics.OpenGL.ShaderType.TessEvaluationShader; break;

                    default: throw new System.Exception("Invalid shader type.");
                    }
                    switch (shader.Name)
                    {
                    case "shaderCode": shaderGroup.Add(shaderType, shader.InnerText); break;

                    case "shaderFile": shaderGroup.Add(shaderType, System.IO.File.ReadAllText("Shaders\\" + shader.InnerText)); break;

                    default: throw new System.Exception("Invalid shader source designator.");
                    }
                }
                shaderPackage.Add(namen, shaderGroup);
                shaderGroup.Clear();
            }
            return(shaderPackage);
        }
Esempio n. 5
0
 protected void LoadShader(string filename, ShaderType type, int program, out int address)
 {
     if (!File.Exists(filename))
     {
         Console.WriteLine($"File not found: {filename}");
         address = -1;
         return;
     }
     address = GL.CreateShader(type);
     using (var sr = new StreamReader(filename))
     {
         GL.ShaderSource(address, sr.ReadToEnd());
     }
     GL.CompileShader(address);
     GL.AttachShader(program, address);
     Console.WriteLine(GL.GetShaderInfoLog(address));
 }
Esempio n. 6
0
        public static int ShaderTypeToInt(OpenTK.Graphics.OpenGL.ShaderType type)
        {
            switch (type)
            {
            case OpenTK.Graphics.OpenGL.ShaderType.FragmentShader:
                return(1);

            case OpenTK.Graphics.OpenGL.ShaderType.GeometryShader:
                return(2);

            case OpenTK.Graphics.OpenGL.ShaderType.VertexShader:
                return(0);

            default:
                throw new ContentException("Unknown ShaderType.");
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Build a shader
        /// </summary>
        /// <param name="type">The gl type of shader</param>
        /// <param name="shader_source">The shader_source.</param>
        /// <returns>The reference to the shader</returns>
        private int BuildShader(OpenTK.Graphics.OpenGL.ShaderType type, string shader_source)
        {
            int shader = OpenTK.Graphics.OpenGL.GL.CreateShader(type);

            unsafe
            {
                int length = shader_source.Length;
                OpenTK.Graphics.OpenGL.GL.ShaderSource(shader, 1, new string[] { shader_source }, &length);

                OpenTK.Graphics.OpenGL.GL.CompileShader(shader);

                string infoLog = OpenTK.Graphics.OpenGL.GL.GetShaderInfoLog(shader);

                // TODO: Change this to a different logger
                Debug.WriteLine(infoLog);
            }

            return(shader);
        }
Esempio n. 8
0
        public ShaderManager(string shaderDir)
        {
            allShaders  = new List <Shader>();
            allPrograms = new List <ShaderProgram>();

            Dictionary <string, string> shaderSources = new Dictionary <string, string>();

            // Load all shaders

            string[] files = Directory.GetFiles(shaderDir);

            string sourceType = ".ss";

            foreach (string shaderFile in files)
            {
                if (shaderFile.Contains(sourceType))
                {
                    string fileName = GetFilenameFromPath(shaderFile);
                    shaderSources.Add(fileName, GetSourceFromFile(shaderFile));
                    Logger.LogInfo("Saved shader source " + fileName);
                }
            }

            string vertexType   = ".vs";
            string fragmentType = ".fs";

            foreach (string shaderFile in files)
            {
                // Check shader type

                // Create shader
                OpenTK.Graphics.OpenGL.ShaderType sType = OpenTK.Graphics.OpenGL.ShaderType.VertexShader;
                if (shaderFile.Contains(vertexType))
                {
                    sType = OpenTK.Graphics.OpenGL.ShaderType.VertexShader;
                }
                else if (shaderFile.Contains(fragmentType))
                {
                    sType = OpenTK.Graphics.OpenGL.ShaderType.FragmentShader;
                }
                else
                {
                    continue;
                }


                string shaderName   = GetFilenameFromPath(shaderFile);
                string shaderSource = GetSourceFromFile(shaderFile);

                if (sType == OpenTK.Graphics.OpenGL.ShaderType.FragmentShader)
                {
                    Logger.LogInfoLinePart("Fragment shader ", System.ConsoleColor.Gray);
                }
                else if (sType == OpenTK.Graphics.OpenGL.ShaderType.VertexShader)
                {
                    Logger.LogInfoLinePart("Vertex shader ", System.ConsoleColor.Gray);
                }
                Logger.LogInfoLinePart(shaderName, System.ConsoleColor.Cyan);
                Logger.LogInfoLineEnd();

                AddIncludesAndDefines(ref shaderSource, ref shaderSources);

                Shader newShader = new Shader(shaderName, sType, shaderSource);
                allShaders.Add(newShader);
            }
        }
Esempio n. 9
0
 private int CreateShader(string shaderSource, ShaderType type)
 {
   int shaderHandle = GL.CreateShader(type);
   GL.ShaderSource(shaderHandle, shaderSource);
   GL.CompileShader(shaderHandle);
   Console.WriteLine(GL.GetShaderInfoLog(shaderHandle));
   return shaderHandle;
 }