Пример #1
0
 //public SemanticField(FieldQualifier varQualifier, Type type, string varName)
 public SemanticField(QualifierAttribute attribute, Type type, string varName, CSShaderCode shaderCode)
 {
     //this.varQualifier = varQualifier;
     this.attribute  = attribute;
     this.varType    = type;
     this.varName    = varName;
     this.shaderCode = shaderCode;
 }
Пример #2
0
 public static SemanticShader GetSemanticShader(this CSShaderCode shaderCode, CSSLFileGroup fullnames)
 {
     if (shaderCode.GetType().IsSubclassOf(typeof(VertexCSShaderCode)))
     {
         return(new SemanticVertexShader(shaderCode, fullnames));
     }
     else if (shaderCode.GetType().IsSubclassOf(typeof(FragmentCSShaderCode)))
     {
         return(new SemanticFragmentShader(shaderCode, fullnames));
     }
     else if (shaderCode.GetType().IsSubclassOf(typeof(GeometryCSShaderCode)))
     {
         return(new SemanticGeometryShader(shaderCode, fullnames));
     }
     else
     {
         throw new NotImplementedException();
     }
 }
Пример #3
0
        ///// <summary>
        ///// 此类型的shader保存到GLSL文件时的扩展名。(不包含'.')
        ///// </summary>
        //public abstract string ExtensionName { get; }

        public static string GetShaderFilename(this CSShaderCode shaderCode)
        {
            Type type = shaderCode.GetType();

            string extensionName = string.Empty;

            if (type.IsSubclassOf(typeof(VertexCSShaderCode)))
            {
                extensionName = "vert";
            }
            else if (type.IsSubclassOf(typeof(FragmentCSShaderCode)))
            {
                extensionName = "frag";
            }
            else if (type.IsSubclassOf(typeof(GeometryCSShaderCode)))
            {
                extensionName = "geom";
            }
            else
            {
                throw new NotImplementedException();
            }

            string name = type.Name;

            if (name.ToLower().EndsWith(extensionName.ToLower()))
            {
                name = name.Substring(0, name.Length - extensionName.Length) + "." + extensionName;
            }
            else
            {
                name = name + "." + extensionName;
            }

            return(name);
        }
Пример #4
0
 public SemanticFragmentShader(CSShaderCode shaderCode, CSSLFileGroup fullname)
     : base(shaderCode, fullname)
 {
 }
Пример #5
0
        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            WorkerData data        = e.Argument as WorkerData;
            int        fileCount   = data.csharpShaderFiles.Length;
            int        fileIndex   = 1;
            const int  magicNumber = 100;

            WorkerResult result = new WorkerResult(null, data);

            e.Result = result;

            StringBuilder builder = new StringBuilder();

            foreach (var fullname in this.selectedCSharpShaderFiles)
            {
                builder.Append(fileIndex); builder.Append("/"); builder.Append(fileCount);
                builder.Append(": "); builder.AppendLine(fullname);

                FileInfo fileInfo = new FileInfo(fullname);
                string   filename = fileInfo.Name;

                try
                {
                    CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

                    CompilerParameters objCompilerParameters = new CompilerParameters();
                    objCompilerParameters.ReferencedAssemblies.Add("CSharpShadingLanguage.dll");
                    objCompilerParameters.GenerateExecutable      = false;
                    objCompilerParameters.GenerateInMemory        = true;
                    objCompilerParameters.IncludeDebugInformation = true;
                    CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromFile(
                        objCompilerParameters, fullname);

                    if (cr.Errors.HasErrors)
                    {
                        builder.AppendLine(string.Format("编译错误:{0}", fullname));
                        foreach (CompilerError err in cr.Errors)
                        {
                            Console.WriteLine(err.ErrorText);
                            builder.AppendLine(err.ErrorText);
                        }
                    }
                    else
                    {
                        List <SemanticShader> semanticShaderList = new List <SemanticShader>();
                        Assembly assembly = cr.CompiledAssembly;
                        Type[]   types    = assembly.GetTypes();
                        foreach (var type in types)
                        {
                            if (type.IsSubclassOf(typeof(CSShaderCode)))
                            {
                                CSShaderCode   shaderCode     = Activator.CreateInstance(type) as CSShaderCode;
                                SemanticShader semanticShader = shaderCode.GetSemanticShader(fullname);
                                semanticShaderList.Add(semanticShader);
                            }
                        }

                        //var semanticShaderList =
                        //    from type in cr.CompiledAssembly.GetTypes()
                        //    where type.IsSubclassOf(typeof(ShaderCode))
                        //    select (Activator.CreateInstance(type) as ShaderCode).Dump(fullname);

                        foreach (var item in semanticShaderList)
                        {
                            item.Dump2File();
                        }
                    }
                }
                catch (Exception ex)
                {
                    string message = string.Format("{0}", ex);
                    builder.AppendLine(message);
                    result.builder = builder;
                }

                if (result.builder != builder)
                {
                    builder.AppendLine("sucessfully done!");
                }
                builder.AppendLine();

                SingleFileProgress thisFileDone = new SingleFileProgress()
                {
                    filename = filename,
                    progress = magicNumber,
                    message  = string.Format("All is done for {0}", fileInfo.Name),
                };
                bgWorker.ReportProgress(fileIndex++ *magicNumber / fileCount, thisFileDone);
            }
        }
Пример #6
0
 public SemanticGeometryShader(CSShaderCode shaderCode, string fullname)
     : base(shaderCode, fullname)
 {
 }
Пример #7
0
 public SemanticVertexShader(CSShaderCode shaderCode, string fullname)
     : base(shaderCode, fullname)
 {
 }
Пример #8
0
 public SemanticGeometryShader(CSShaderCode shaderCode, CSSLFileGroup fileGroup)
     : base(shaderCode, fileGroup)
 {
 }
Пример #9
0
 public SemanticFragmentShader(CSShaderCode shaderCode, string fullname)
     : base(shaderCode, fullname)
 {
 }
Пример #10
0
 public SemanticShader(CSShaderCode shaderCode, CSSLFileGroup fileGroup)
 {
     this.shaderCode = shaderCode;
     this.fileGroup  = fileGroup;
 }
Пример #11
0
 public SemanticShader(CSShaderCode shaderCode, string fullname)
 {
     this.shaderCode = shaderCode;
     this.fullname   = fullname;
 }
Пример #12
0
 public SemanticVertexShader(CSShaderCode shaderCode, CSSLFileGroup fullname)
     : base(shaderCode, fullname)
 {
 }