public static ShaderOptions CreateExample0() { ShaderOptions item = new ShaderOptions() { Mode = new Mode() { Group0 = true, ModeSwitch = ModeSwitch.EnableGroup1, ModeFlag = ModeFlag.Property | ModeFlag.Field, }, Values0 = new Values0() { floatValue = 115884.484f, intValue = 5486313, ColorValue = Color.red, Vector2Value = new Vector2(1.55f, 2.66f), Vector3Value = new Vector3(684.55f, 4206f), Vector4Value = new Vector4(16.25f, 19.65f), EnumValue = ModeFlag.Property, TextureValue = CreateTempTexture(), TextureScale = new Vector2(2f, 5f), TextureOffset = new Vector2(35, 25f), }, Values1 = new Values1() { FieldType0 = 123, FieldType1 = 486, PropertyType = 789, IgnoreProperty0Type = 120, IgnoreProperty1Type = 159, }, }; return(item); }
public static ShaderOptions CreateEmpty() { ShaderOptions item = new ShaderOptions() { Mode = new Mode(), Values0 = new Values0(), Values1 = new Values1(), }; return(item); }
public ShaderProgram GetProgram(ShaderOptions options) { var program = programs[(int)options]; if (program == null) { var preamble = CreateShaderPreamble(options); programs[(int)options] = program = new ShaderProgram( new Shader[] { new VertexShader(preamble + vertexShader), new FragmentShader(preamble + fragmentShader) }, attribLocations, samplers); } return(program); }
public void CopyInstanceWithoutKeywordTest() { try { ShaderOptions shaderOptions = ShaderOptions.CreateExample0(); ShaderOptions newShaderOptions = ShaderOptions.CreateEmpty(); ShaderOptions.Accessor.CopyWithoutKeywords(shaderOptions, newShaderOptions); shaderOptions.Mode.AreNotEqual(newShaderOptions.Mode); shaderOptions.Values0.AreEqual(newShaderOptions.Values0); shaderOptions.Values1.AreEqual(newShaderOptions.Values1); } finally { ReleaseTemporary(); } }
private string CreateShaderPreamble(ShaderOptions options) { string result = ""; int bit = 1; while (options != ShaderOptions.None) { if (((int)options & 1) == 1) { var name = Enum.GetName(typeof(ShaderOptions), (ShaderOptions)bit); result += "#define " + name + "\n"; } bit <<= 1; options = (ShaderOptions)((int)options >> 1); } return(result); }
public void GlobalAssignmentTest() { try { ShaderOptions shaderOptions = ShaderOptions.CreateExample0(); ShaderOptions.Accessor.SetGlobalValues(shaderOptions); var newShaderOptions = ShaderOptions.CreateEmpty(); ShaderOptions.Accessor.GetGlobalValues(newShaderOptions); shaderOptions.Mode.AreEqual(newShaderOptions.Mode); shaderOptions.Values0.AreEqualWithoutTextureOffsetScale(newShaderOptions.Values0); shaderOptions.Values1.AreEqual(newShaderOptions.Values1); } finally { ReleaseTemporary(); } }
public void GlobalAssignmentMaskTest() { try { int mask = (int)(Mask.Group0 | Mask.Group1 | Mask.Group2); ShaderOptions shaderOptions = ShaderOptions.CreateExample0(); ShaderOptions.Accessor.SetGlobalValues(shaderOptions, group => ShaderAccessor.FilterByMask(group, mask)); var newShaderOptions = ShaderOptions.CreateEmpty(); ShaderOptions.Accessor.GetGlobalValues(newShaderOptions); shaderOptions.Values0.AreEqualWithoutTextureOffsetScale(newShaderOptions.Values0); shaderOptions.Values1.AreNotEqual(newShaderOptions.Values1); } finally { ReleaseTemporary(); } }
public void Reload(Material material) { ShaderArchive = ""; ShaderModel = ""; ShaderParams.Clear(); ShaderOptions.Clear(); Samplers.Clear(); TextureMaps.Clear(); UpdateRenderState(); if (material.ShaderAssign != null) { ShaderArchive = material.ShaderAssign.ShaderArchiveName; ShaderModel = material.ShaderAssign.ShadingModelName; } foreach (var param in material.ShaderParams) { ShaderParams.Add(param.Key, param.Value); } foreach (var option in material.ShaderAssign.ShaderOptions) { ShaderOptions.Add(option.Key, option.Value); } // if (ShaderParams.ContainsKey("gsys_i_color_ratio0")) // ShaderParams["gsys_i_color_ratio0"].DataValue = 0.1f; for (int i = 0; i < material.TextureRefs.Count; i++) { string name = material.TextureRefs[i].Name; Sampler sampler = material.Samplers[i]; var texSampler = material.Samplers[i].TexSampler; string samplerName = sampler.Name; string fragSampler = ""; //Force frag shader sampler to be used if (material.ShaderAssign.SamplerAssigns.ContainsValue(samplerName)) { material.ShaderAssign.SamplerAssigns.TryGetKey(samplerName, out fragSampler); } Samplers.Add(fragSampler); this.TextureMaps.Add(new TextureMap() { Name = name, Sampler = samplerName, MagFilter = GXConverter.ConvertMagFilter(texSampler.MagFilter), MinFilter = GXConverter.ConvertMinFilter( texSampler.MipFilter, texSampler.MinFilter), Type = GetTextureType(fragSampler), WrapU = GXConverter.ConvertWrapMode(texSampler.ClampX), WrapV = GXConverter.ConvertWrapMode(texSampler.ClampY), LODBias = texSampler.LodBias, MaxLOD = texSampler.MaxLod, MinLOD = texSampler.MinLod, }); } }
public ShaderProgram GetShaderProgram(ShaderId shader, int numTextures, ShaderOptions options) { return(GetShaderProgram(shader, numTextures).GetProgram(options)); }
public ShaderProgram GetShaderProgram(ShaderId shader, ITexture texture1, ITexture texture2, ShaderOptions options) { int numTextures = texture2 != null ? 2 : (texture1 != null ? 1 : 0); return(GetShaderProgram(shader, numTextures, options)); }