Exemplo n.º 1
0
        private void processNormalFields(StreamWriter stream, List <FieldInfo> normalFields, BaseCompilerOutputs baseType)
        {
            if (outputType == CompilerOutputs.D3D11)
            {
                int fieldCount = 0;
                foreach (var field in normalFields)
                {
                    Type filedType = field.FieldType;
                    if (filedType == typeof(Texture2D))
                    {
                        ++fieldCount;
                    }
                }

                if (fieldCount != 0)
                {
                    stream.WriteLine(string.Format("{0} {1}[{2}];", "sampler", "Samplers", fieldCount));
                }
            }

            int samplerFieldCount = 0, registerIndex = 0;

            foreach (var field in normalFields)
            {
                string fieldType = convertToBasicType(field.FieldType, true);
                if (baseType == BaseCompilerOutputs.GLSL || baseType == BaseCompilerOutputs.CG)
                {
                    stream.Write("uniform ");
                }

                int arrayLength = -1;
                if (field.FieldType.IsArray && field.GetCustomAttributes(typeof(ArrayType), true).Length != 0)
                {
                    var attributes = field.GetCustomAttributes(typeof(ArrayType), true)[0] as ArrayType;
                    if (attributes != null)
                    {
                        arrayLength = attributes.Length;
                    }
                }

                if (outputType == CompilerOutputs.Silverlight)
                {
                    if (field.FieldType == typeof(Texture2D))
                    {
                        stream.WriteLine(string.Format("sampler2D {0} : register(s{1});", field.Name, samplerFieldCount));
                        ++samplerFieldCount;
                    }
                    else
                    {
                        int registerSize = getRegisterySize(field);
                        stream.WriteLine(string.Format("{0} {1} : register(c{2});", fieldType, field.Name + ((arrayLength == -1) ? "" : "[" + arrayLength.ToString() + "]"), registerIndex));
                        registerIndex += registerSize;
                    }
                }
                else
                {
                    stream.WriteLine(string.Format("{0} {1};", fieldType, field.Name + ((arrayLength == -1) ? "" : "[" + arrayLength.ToString() + "]")));
                }

                if (outputType == CompilerOutputs.XNA && field.FieldType == typeof(Texture2D))
                {
                    stream.Write(string.Format("sampler2D {0}_S : register(s{1}) = sampler_state", field.Name, samplerFieldCount) + " {");
                    stream.WriteLine(string.Format("Texture = <{0}>;", field.Name) + "};");
                    ++samplerFieldCount;
                }
            }
            stream.WriteLine();
        }
Exemplo n.º 2
0
        private void processNormalFields(StreamWriter stream, List<FieldInfo> normalFields, BaseCompilerOutputs baseType)
        {
            if (outputType == CompilerOutputs.D3D11)
            {
                int fieldCount = 0;
                foreach (var field in normalFields)
                {
                    Type filedType = field.FieldType;
                    if (filedType == typeof(Texture2D))
                    {
                        ++fieldCount;
                    }
                }

                if (fieldCount != 0)
                {
                    stream.WriteLine(string.Format("{0} {1}[{2}];", "sampler", "Samplers", fieldCount));
                }
            }

            int samplerFieldCount = 0, registerIndex = 0;
            foreach (var field in normalFields)
            {
                string fieldType = convertToBasicType(field.FieldType, true);
                if (baseType == BaseCompilerOutputs.GLSL || baseType == BaseCompilerOutputs.CG) stream.Write("uniform ");

                int arrayLength = -1;
                if (field.FieldType.IsArray && field.GetCustomAttributes(typeof(ArrayType), true).Length != 0)
                {
                    var attributes = field.GetCustomAttributes(typeof(ArrayType), true)[0] as ArrayType;
                    if (attributes != null)
                    {
                        arrayLength = attributes.Length;
                    }
                }

                if (outputType == CompilerOutputs.Silverlight)
                {
                    if (field.FieldType == typeof(Texture2D))
                    {
                        stream.WriteLine(string.Format("sampler2D {0} : register(s{1});", field.Name, samplerFieldCount));
                        ++samplerFieldCount;
                    }
                    else
                    {
                        int registerSize = getRegisterySize(field);
                        stream.WriteLine(string.Format("{0} {1} : register(c{2});", fieldType, field.Name + ((arrayLength == -1) ? "" : "[" + arrayLength.ToString() + "]"), registerIndex));
                        registerIndex += registerSize;
                    }
                }
                else
                {
                    stream.WriteLine(string.Format("{0} {1};", fieldType, field.Name + ((arrayLength == -1) ? "" : "[" + arrayLength.ToString() + "]")));
                }

                if (outputType == CompilerOutputs.XNA && field.FieldType == typeof(Texture2D))
                {
                    stream.Write(string.Format("sampler2D {0}_S : register(s{1}) = sampler_state", field.Name, samplerFieldCount) + " {");
                    stream.WriteLine(string.Format("Texture = <{0}>;", field.Name) + "};");
                    ++samplerFieldCount;
                }
            }
            stream.WriteLine();
        }