Spark.Emit.HLSL.EmitContextHLSL.DeclareConnectorAndBind C# (CSharp) Method

DeclareConnectorAndBind() public method

public DeclareConnectorAndBind ( MidElementDecl element, MidAttributeWrapperDecl attr, bool &firstParam, Span span ) : void
element Spark.Mid.MidElementDecl
attr Spark.Mid.MidAttributeWrapperDecl
firstParam bool
span Span
return void
        public void DeclareConnectorAndBind(
            MidElementDecl element,
            MidAttributeWrapperDecl attr,
            ref bool firstParam,
            Span span)
        {
            var attrType = GenerateConnectorType(element);
            DeclareParamAndBind(
                attr,
                attrType,
                null,
                ref firstParam,
                span );
        }

Usage Example

        public override void EmitImplSetup()
        {
            var uniformElement = GetElement("Uniform");
            var vertexElement = GetElement("CoarseVertex");
            var assembledVertex = GetElement("AssembledVertex");

            var constantElement = GetElement("Constant");
            var tessEnabledAttr = FindAttribute( constantElement, "__D3D11TessellationEnabled" );
            var gsEnabledAttr = FindAttribute( constantElement, "__D3D11GeometryShaderEnabled" );

            // \todo: We eventually need to support both tessellation enabled/disabled...

            var fineVertexElement = GetElement("FineVertex");
            var rasterVertexElement = GetElement("RasterVertex");

            var outputElement = vertexElement;
            if( tessEnabledAttr == null )
            {
                if( gsEnabledAttr == null )
                {
                    outputElement = rasterVertexElement;
                }
                else
                {
                    outputElement = fineVertexElement;
                }
            }

            InitBlock.AppendComment("D3D11 Vertex Shader");

            var outputAttributes = new List<MidAttributeDecl>();
            foreach (var a in outputElement.Attributes)
            {
                if (a.IsOutput) outputAttributes.Add(a);
            }

            hlslContext = new EmitContextHLSL(SharedHLSL, Range, this.EmitClass.GetName());

            var entryPointSpan = hlslContext.EntryPointSpan;

            entryPointSpan.WriteLine("{0} main(",
                hlslContext.GenerateConnectorType(outputElement));

            bool first = true;

            hlslContext.DeclareConnectorAndBind(
                assembledVertex,
                GetAttribute(vertexElement, "__ia2vs"),
                ref first,
                entryPointSpan);

            hlslContext.DeclareParamAndBind(
                GetAttribute(vertexElement, "VS_VertexID"),
                "SV_VertexID",
                ref first,
                entryPointSpan);
            hlslContext.DeclareParamAndBind(
                GetAttribute(vertexElement, "VS_InstanceID"),
                "SV_InstanceID",
                ref first,
                entryPointSpan);

            entryPointSpan.WriteLine("\t)");
            entryPointSpan.WriteLine("{");

            if( tessEnabledAttr == null )
            {
                hlslContext.EmitTempRecordCtor(
                    entryPointSpan,
                    vertexElement,
                    GetAttribute(fineVertexElement, "__c2fhelper"));

                if( gsEnabledAttr == null )
                {
                    hlslContext.EmitTempRecordCtor(
                        entryPointSpan,
                        fineVertexElement,
                        GetAttribute(rasterVertexElement, "__f2rhelper"));
                }
            }

            var resultVal = hlslContext.EmitConnectorCtor(
                entryPointSpan,
                outputElement);
            entryPointSpan.WriteLine("\treturn {0};", resultVal);
            entryPointSpan.WriteLine("}");

            hlslContext.EmitConstantBufferDecl();

            //

            EmitShaderSetup(
                hlslContext,
                "vs_5_0",
                "Vertex",
                "VS");
        }
All Usage Examples Of Spark.Emit.HLSL.EmitContextHLSL::DeclareConnectorAndBind