public FullScreenQuadVS() { Name = "FullScreenQuadVS"; Type = ShaderType.Vertex; FeatureLevel = FeatureLevel.VS_4_0_Level_9_1; KeyPart = new TechniqueKey(vs: VertexShaderFlags.Position | VertexShaderFlags.TextureUV | VertexShaderFlags.Normal); EnableSeparators = true; InputStruct = Struct.VertexPositionNormalTexture; OutputStruct = SpriteVS.VSOut; Structs.ConstantBuffer cbStatic = SpriteVS.CBStatic; Add(cbStatic); DeclarationNode nClip = ClipSpaceTransformNode.FullScreenNode(InputStruct, cbStatic[Param.Vectors.ViewportSize]); CustomOutputNode outputNode = new CustomOutputNode() { Output = OutputStruct }; outputNode.RegisterField(Vector.ClipPosition, nClip, Shaders.Type.Float4); outputNode.RegisterField(Vector.TextureUV, new ReferenceNode { Value = InputStruct[Param.SemanticVariables.Texture] }, Shaders.Type.Float2); Result = outputNode; }
public SpriteVS() { Name = "SpriteVS"; Type = ShaderType.Vertex; FeatureLevel = FeatureLevel.VS_4_0_Level_9_1; KeyPart = new TechniqueKey(vs: VertexShaderFlags.Position | VertexShaderFlags.TextureUV | VertexShaderFlags.Normal); EnableSeparators = true; InputStruct = Struct.VertexPositionNormalTexture; OutputStruct = VSOut; Structs.ConstantBuffer cbStatic = CBStatic; Structs.ConstantBuffer cbInstance = CBPerInstance; Add(cbStatic); Add(cbInstance); ClipSpaceTransformNode cstNode = new ClipSpaceTransformNode { Position = new ReferenceNode { Value = InputStruct[Param.SemanticVariables.ObjectPosition] }, InstancePosition = cbInstance[Param.Vectors.SpritePosition], Size = cbInstance[Param.Vectors.SpriteSize], ScreenSize = cbStatic[Param.Vectors.ViewportSize] }; CustomOutputNode outputNode = new CustomOutputNode() { Output = OutputStruct }; outputNode.RegisterField(Vector.ClipPosition, cstNode, Shaders.Type.Float4); outputNode.RegisterField(Vector.TextureUV, new ReferenceNode { Value = InputStruct[Param.SemanticVariables.Texture] }, Shaders.Type.Float2); Result = outputNode; }