コード例 #1
0
ファイル: HlslBackend.cs プロジェクト: feliwir/ShaderGen
        protected void WriteStructure(StringBuilder sb, StructureDefinition sd)
        {
            sb.AppendLine($"struct {CSharpToShaderType(sd.Name)}");
            sb.AppendLine("{");
            HlslSemanticTracker tracker = new HlslSemanticTracker();
            StringBuilder       fb      = new StringBuilder();

            foreach (FieldDefinition field in sd.Fields)
            {
                fb.Append(CSharpToShaderType(field.Type.Name.Trim()));
                fb.Append(' ');
                fb.Append(CorrectIdentifier(field.Name.Trim()));
                int arrayCount = field.ArrayElementCount;
                if (arrayCount > 0)
                {
                    fb.Append('['); fb.Append(arrayCount); fb.Append(']');
                }
                fb.Append(HlslSemantic(field.SemanticType, ref tracker));
                fb.Append(';');
                sb.Append("    ");
                sb.AppendLine(fb.ToString());
                fb.Clear();
            }
            sb.AppendLine("};");
            sb.AppendLine();
        }
コード例 #2
0
ファイル: HlslBackend.cs プロジェクト: feliwir/ShaderGen
        private string HlslSemantic(SemanticType semanticType, ref HlslSemanticTracker tracker)
        {
            switch (semanticType)
            {
            case SemanticType.None:
                return(string.Empty);

            case SemanticType.Position:
            {
                int val = tracker.Position++;
                return(" : POSITION" + val.ToString());
            }

            case SemanticType.Normal:
            {
                int val = tracker.Normal++;
                return(" : NORMAL" + val.ToString());
            }

            case SemanticType.TextureCoordinate:
            {
                int val = tracker.TexCoord++;
                return(" : TEXCOORD" + val.ToString());
            }

            case SemanticType.Color:
            {
                int val = tracker.Color++;
                return(" : COLOR" + val.ToString());
            }

            case SemanticType.Tangent:
            {
                int val = tracker.Tangent++;
                return(" : TANGENT" + val.ToString());
            }

            case SemanticType.SystemPosition:
            {
                return(" : SV_Position");
            }

            case SemanticType.ColorTarget:
            {
                int val = tracker.ColorTarget++;
                return(" : SV_Target" + val.ToString());
            }

            default: throw new ShaderGenerationException("Invalid semantic type: " + semanticType);
            }
        }
コード例 #3
0
ファイル: HlslBackend.cs プロジェクト: zcyemi/ShaderGen
        private string HlslSemantic(SemanticType semanticType, bool fragmentSemantics, ref HlslSemanticTracker tracker)
        {
            switch (semanticType)
            {
            case SemanticType.None:
                return(string.Empty);

            case SemanticType.Position:
                if (fragmentSemantics)
                {
                    if (!tracker.emittedSvPosition)
                    {
                        tracker.emittedSvPosition = true;
                        return(" : SV_POSITION");
                    }
                    else
                    {
                        int val = tracker.Position++;
                        return(" : POSITION" + val.ToString());
                    }
                }
                else
                {
                    int val = tracker.Position++;
                    return(" : POSITION" + val.ToString());
                }

            case SemanticType.Normal:
            {
                int val = tracker.Normal++;
                return(" : NORMAL" + val.ToString());
            }

            case SemanticType.TextureCoordinate:
            {
                int val = tracker.TexCoord++;
                return(" : TEXCOORD" + val.ToString());
            }

            case SemanticType.Color:
            {
                int val = tracker.Color++;
                return(" : COLOR" + val.ToString());
            }

            case SemanticType.Tangent:
            {
                int val = tracker.Tangent++;
                return(" : TANGENT" + val.ToString());
            }

            default: throw new ShaderGenerationException("Invalid semantic type: " + semanticType);
            }
        }