//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; }
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(); } }
///// <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); }
public SemanticFragmentShader(CSShaderCode shaderCode, CSSLFileGroup fullname) : base(shaderCode, fullname) { }
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); } }
public SemanticGeometryShader(CSShaderCode shaderCode, string fullname) : base(shaderCode, fullname) { }
public SemanticVertexShader(CSShaderCode shaderCode, string fullname) : base(shaderCode, fullname) { }
public SemanticGeometryShader(CSShaderCode shaderCode, CSSLFileGroup fileGroup) : base(shaderCode, fileGroup) { }
public SemanticFragmentShader(CSShaderCode shaderCode, string fullname) : base(shaderCode, fullname) { }
public SemanticShader(CSShaderCode shaderCode, CSSLFileGroup fileGroup) { this.shaderCode = shaderCode; this.fileGroup = fileGroup; }
public SemanticShader(CSShaderCode shaderCode, string fullname) { this.shaderCode = shaderCode; this.fullname = fullname; }
public SemanticVertexShader(CSShaderCode shaderCode, CSSLFileGroup fullname) : base(shaderCode, fullname) { }