Example #1
0
            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);
            }
Example #2
0
            public static ShaderOptions CreateEmpty()
            {
                ShaderOptions item = new ShaderOptions()
                {
                    Mode    = new Mode(),
                    Values0 = new Values0(),
                    Values1 = new Values1(),
                };

                return(item);
            }
Example #3
0
            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);
            }
Example #4
0
        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();
            }
        }
Example #5
0
            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);
            }
Example #6
0
        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();
            }
        }
Example #7
0
        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();
            }
        }
Example #8
0
        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,
                });
            }
        }
Example #9
0
 public ShaderProgram GetShaderProgram(ShaderId shader, int numTextures, ShaderOptions options)
 {
     return(GetShaderProgram(shader, numTextures).GetProgram(options));
 }
Example #10
0
        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));
        }