public void Read(AssetReader reader)
        {
            m_nameIndices = new Dictionary <string, int>();

            m_nameIndices.Read(reader);
            Type = (SerializedPassType)reader.ReadInt32();
            State.Read(reader);
            ProgramMask = reader.ReadUInt32();
            ProgVertex.Read(reader);
            ProgFragment.Read(reader);
            ProgGeometry.Read(reader);
            ProgHull.Read(reader);
            ProgDomain.Read(reader);
            if (HasProgRayTracing(reader.Version))
            {
                ProgRayTracing.Read(reader);
            }
            HasInstancingVariant = reader.ReadBoolean();
            reader.AlignStream();

            UseName     = reader.ReadString();
            Name        = reader.ReadString();
            TextureName = reader.ReadString();
            Tags.Read(reader);
        }
コード例 #2
0
        public void Export(ShaderWriter writer)
        {
            writer.WriteIndent(2);
            writer.Write("{0} ", Type.ToString());

            if (Type == SerializedPassType.UsePass)
            {
                writer.Write("\"{0}\"\n", UseName);
            }
            else
            {
                writer.Write("{\n");

                if (Type == SerializedPassType.GrabPass)
                {
                    if (TextureName != string.Empty)
                    {
                        writer.WriteIndent(3);
                        writer.Write("\"{0}\"\n", TextureName);
                    }
                }
                else if (Type == SerializedPassType.Pass)
                {
                    State.Export(writer);

                    if ((ProgramMask & ShaderType.Vertex.ToProgramMask()) != 0)
                    {
                        ProgVertex.Export(writer, ShaderType.Vertex);
                    }
                    if ((ProgramMask & ShaderType.Fragment.ToProgramMask()) != 0)
                    {
                        ProgFragment.Export(writer, ShaderType.Fragment);
                    }
                    if ((ProgramMask & ShaderType.Geometry.ToProgramMask()) != 0)
                    {
                        ProgGeometry.Export(writer, ShaderType.Geometry);
                    }
                    if ((ProgramMask & ShaderType.Hull.ToProgramMask()) != 0)
                    {
                        ProgHull.Export(writer, ShaderType.Hull);
                    }
                    if ((ProgramMask & ShaderType.Domain.ToProgramMask()) != 0)
                    {
                        ProgDomain.Export(writer, ShaderType.Domain);
                    }

#warning HasInstancingVariant?
                }
                else
                {
                    throw new NotSupportedException($"Unsupported pass type {Type}");
                }

                writer.WriteIndent(2);
                writer.Write("}\n");
            }
        }
コード例 #3
0
        public void Export(TextWriter writer, Shader shader, Func <ShaderGpuProgramType, ShaderTextExporter> exporterInstantiator)
        {
            writer.WriteIntent(2);
            writer.Write("{0} ", Type.ToString());

            if (Type == SerializedPassType.UsePass)
            {
                writer.Write("\"{0}\"\n", UseName);
            }
            else
            {
                writer.Write("{\n");

                if (Type == SerializedPassType.GrabPass)
                {
                    if (TextureName != string.Empty)
                    {
                        writer.WriteIntent(3);
                        writer.Write("\"{0}\"\n", TextureName);
                    }
                }
                else if (Type == SerializedPassType.Pass)
                {
                    State.Export(writer);

                    ProgVertex.Export(writer, shader, ShaderType.Vertex, exporterInstantiator);
                    ProgFragment.Export(writer, shader, ShaderType.Fragment, exporterInstantiator);
                    ProgGeometry.Export(writer, shader, ShaderType.Geometry, exporterInstantiator);
                    ProgHull.Export(writer, shader, ShaderType.Hull, exporterInstantiator);
                    ProgDomain.Export(writer, shader, ShaderType.Domain, exporterInstantiator);

#warning ProgramMask?
#warning HasInstancingVariant?
                }
                else
                {
                    throw new NotSupportedException($"Unsupported pass type {Type}");
                }

                writer.WriteIntent(2);
                writer.Write("}\n");
            }
        }
コード例 #4
0
        public void Read(EndianStream stream)
        {
            m_nameIndices.Read(stream);
            Type = stream.ReadInt32();
            State.Read(stream);
            ProgramMask = stream.ReadUInt32();
            ProgVertex.Read(stream);
            ProgFragment.Read(stream);
            ProgGeometry.Read(stream);
            ProgHull.Read(stream);
            progDomain.Read(stream);
            HasInstancingVariant = stream.ReadBoolean();
            stream.AlignStream(AlignType.Align4);

            UseName     = stream.ReadStringAligned();
            Name        = stream.ReadStringAligned();
            TextureName = stream.ReadStringAligned();
            Tags.Read(stream);
        }
コード例 #5
0
        public StringBuilder ToString(StringBuilder sb, SShader shader)
        {
            sb.AppendIntent(2).Append(Type.ToString()).Append(' ');

            if (Type == SerializedPassType.UsePass)
            {
                sb.Append('"').Append(UseName).Append('"').Append('\n');
            }
            else
            {
                sb.Append('{').Append('\n');

                if (Type == SerializedPassType.GrabPass)
                {
                    if (TextureName != string.Empty)
                    {
                        sb.AppendIntent(3).Append('"').Append(TextureName).Append('"').Append('\n');
                    }
                }
                else if (Type == SerializedPassType.Pass)
                {
                    State.ToString(sb);

                    ProgVertex.ToString(sb, shader, ShaderType.Vertex);
                    ProgFragment.ToString(sb, shader, ShaderType.Fragment);
                    ProgGeometry.ToString(sb, shader, ShaderType.Geometry);
                    ProgHull.ToString(sb, shader, ShaderType.Hull);
                    ProgDomain.ToString(sb, shader, ShaderType.Domain);

#warning ProgramMask?
#warning HasInstancingVariant?
                }
                else
                {
                    throw new NotSupportedException($"Unsupported pass type {Type}");
                }

                sb.AppendIntent(2).Append('}').Append('\n');
            }
            return(sb);
        }
コード例 #6
0
        public void Read(AssetStream stream)
        {
            m_nameIndices = new Dictionary <string, int>();

            m_nameIndices.Read(stream);
            Type = (SerializedPassType)stream.ReadInt32();
            State.Read(stream);
            ProgramMask = stream.ReadUInt32();
            ProgVertex.Read(stream);
            ProgFragment.Read(stream);
            ProgGeometry.Read(stream);
            ProgHull.Read(stream);
            ProgDomain.Read(stream);
            HasInstancingVariant = stream.ReadBoolean();
            stream.AlignStream(AlignType.Align4);

            UseName     = stream.ReadStringAligned();
            Name        = stream.ReadStringAligned();
            TextureName = stream.ReadStringAligned();
            Tags.Read(stream);
        }