예제 #1
0
        public unsafe void DAGUsageCase2()
        {
            // We first initialize our shader.
            ShaderCode code = new ShaderCode(BindingStage.VertexShader);

            {
                // We write a simple Tranform code:
                code.InputOperation.AddInput(PinComponent.Position, PinFormat.Floatx3);
                Pin positon = code.InputOperation.PinAsOutput(PinComponent.Position);


                // We create 3 interations.
                LoopOperation loop = new LoopOperation();
                loop.InputOperation.BindInputs(code.CreateFixed((uint)3).Outputs[0], positon);

                AddOperation add = new AddOperation();
                add.BindInputs(loop.InputOperation.Outputs[1], code.CreateFixed(new Vector3f(1, 0, 0)).Outputs[0]);

                loop.OutputOperation.BindInputs(add.Outputs[0]);

                ExpandOperation expand = new ExpandOperation(PinFormat.Floatx4, ExpandType.AddOnesAtW);
                expand.BindInputs(loop.OutputOperation.Outputs[0]);

                // We just bind transformed position to output.
                code.OutputOperation.AddComponentAndLink(PinComponent.Position, expand.Outputs[0]);
            }

            // Immutate it.
            code.Immutable = true;

            // We now compile it.
            FixedShaderParameters p = code.FixedParameters;

            using (GraphicsDevice device = InitializeDevice())
            {
                code.Compile(device, p).Dispose();
            }
        }