Guest User

Untitled

a guest
May 20th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. Texture2D Tex;
  2. SamplerState sam
  3. {
  4. Filter = MIN_MAG_MIP_LINEAR;
  5. AddressU = Wrap;
  6. AddressV = Wrap;
  7. };
  8.  
  9. struct VS_IN
  10. {
  11. float2 TexCoord : TEXCOORD;
  12. float4 Color : COLOR;
  13. float2 TexCoordSize : TEXCOORDSIZE;
  14. float2 TopLeft : TOPLEFT;
  15. float2 TopRight : TOPRIGHT;
  16. float2 BottomLeft : BOTTOMLEFT;
  17. float2 BottomRight : BOTTOMRIGHT;
  18. };
  19.  
  20. struct GS_OUT
  21. {
  22. float2 TexCoord : TEXCOORD;
  23. float4 Color : COLOR;
  24. float4 Position : SV_POSITION;
  25. };
  26.  
  27. struct PS_IN
  28. {
  29. float2 TexCoord : TEXCOORD;
  30. float4 Color : COLOR;
  31. };
  32.  
  33. DepthStencilState DisableDepth
  34. {
  35. DepthEnable = FALSE;
  36. DepthWriteMask = ZERO;
  37. };
  38.  
  39. [maxvertexcount(4)]
  40. void mainGS( point VS_IN input[1], inout TriangleStream<GS_OUT> TriStream )
  41. {
  42. /*
  43.  
  44. 0 -- 1
  45. | / |
  46. | / |
  47. 2 -- 3
  48.  
  49. */
  50.  
  51. GS_OUT v;
  52. v.Color = input[0].Color;
  53. v.Position = float4(input[0].TopLeft, 0, 1);
  54. v.TexCoord = input[0].TexCoord;
  55. TriStream.Append(v);
  56.  
  57. v.Position = float4(input[0].TopRight, 0, 1);
  58. v.TexCoord.x += input[0].TexCoordSize.x;
  59. TriStream.Append(v);
  60.  
  61. v.Position = float4(input[0].BottomLeft, 0, 1);
  62. v.TexCoord.x = input[0].TexCoord.x;
  63. v.TexCoord.y += input[0].TexCoordSize.y;
  64. TriStream.Append(v);
  65.  
  66. v.Position = float4(input[0].BottomRight, 0, 1);
  67. v.TexCoord.x += input[0].TexCoordSize.x;
  68. TriStream.Append(v);
  69.  
  70. TriStream.RestartStrip();
  71. }
  72.  
  73. VS_IN mainVS(VS_IN vs_in){
  74. return vs_in;
  75. }
  76.  
  77. float4 mainPS(PS_IN ps_in) : SV_TARGET
  78. {
  79. return Tex.Sample(sam, ps_in.TexCoord) * ps_in.Color;
  80. }
  81.  
  82. float4 mainPremultipliedPS(PS_IN ps_in) : SV_TARGET
  83. {
  84. float4 texel = Tex.Sample(sam, ps_in.TexCoord);
  85. texel.rgb /= texel.a;
  86. return texel * ps_in.Color;
  87. }
  88.  
  89. technique10 Render
  90. {
  91. pass p0
  92. {
  93. SetVertexShader ( CompileShader( vs_4_0 , mainVS() ) );
  94. SetGeometryShader ( CompileShader( gs_4_0 , mainGS() ) );
  95. SetPixelShader ( CompileShader( ps_4_0 , mainPS() ) );
  96.  
  97. //SetDepthStencilState( DisableDepth, 0 );
  98. }
  99. }
  100.  
  101. technique10 RenderPremultiplied
  102. {
  103. pass p0
  104. {
  105. SetVertexShader(CompileShader(vs_4_0, mainVS()));
  106. SetGeometryShader(CompileShader(gs_4_0, mainGS()));
  107. SetPixelShader(CompileShader(ps_4_0, mainPremultipliedPS()));
  108. }
  109. }
Add Comment
Please, Sign In to add comment