Imported Upstream version 2.81
[platform/upstream/libbullet.git] / Demos / DX11ClothDemo / cloth_renderer_PS.hlsl
1 //--------------------------------------------------------------------------------------\r
2 // File: BasicHLSL11_PS.hlsl\r
3 //\r
4 // The pixel shader file for the BasicHLSL11 sample.  \r
5 // \r
6 // Copyright (c) Microsoft Corporation. All rights reserved.\r
7 //--------------------------------------------------------------------------------------\r
8 \r
9 //--------------------------------------------------------------------------------------\r
10 // Globals\r
11 //--------------------------------------------------------------------------------------\r
12 cbuffer cbPerObject : register( b0 )\r
13 {\r
14         float4          g_vObjectColor                  : packoffset( c0 );\r
15 };\r
16 \r
17 cbuffer cbPerFrame : register( b1 )\r
18 {\r
19         float3          g_vLightDir                             : packoffset( c0 );\r
20         float           g_fAmbient                              : packoffset( c0.w );\r
21 };\r
22 \r
23 //--------------------------------------------------------------------------------------\r
24 // Textures and Samplers\r
25 //--------------------------------------------------------------------------------------\r
26 Texture2D       g_txDiffuse : register( t0 );\r
27 SamplerState g_samLinear : register( s0 );\r
28 \r
29 //--------------------------------------------------------------------------------------\r
30 // Input / Output structures\r
31 //--------------------------------------------------------------------------------------\r
32 struct PS_INPUT\r
33 {\r
34         float3 vNormal          : NORMAL;\r
35         float2 vTexcoord        : TEXCOORD0;\r
36         float4 vPosition : SV_POSITION;\r
37 };\r
38 \r
39 //--------------------------------------------------------------------------------------\r
40 // Pixel Shader\r
41 //--------------------------------------------------------------------------------------\r
42 float4 PSMain( PS_INPUT Input ) : SV_TARGET\r
43 {\r
44         float4 vDiffuse = g_txDiffuse.Sample( g_samLinear, Input.vTexcoord );\r
45         \r
46         \r
47         float fLighting = saturate( dot( g_vLightDir, (Input.vNormal)/length(Input.vNormal) ) );\r
48         //float fLighting = saturate( dot( g_vLightDir, float3(Input.vTexcoord.x,0,0) )  );\r
49         fLighting = max( fLighting, g_fAmbient );\r
50         \r
51         //fLighting = dot(g_vLightDir,float3(0,1,0));\r
52         \r
53         return vDiffuse * fLighting;\r
54 }\r
55 \r
56 \r
57 struct VS_OUTPUT\r
58 {\r
59         float3 vNormal          : NORMAL;\r
60         float2 vTexcoord        : TEXCOORD0;\r
61         float4 vPosition        : SV_POSITION;\r
62 };\r
63 \r
64 [maxvertexcount(3)]\r
65 void GSMain(triangle VS_OUTPUT input[3], inout TriangleStream<PS_INPUT> OutputStream)\r
66 {\r
67 PS_INPUT output = (PS_INPUT)0;\r
68 \r
69 \r
70 /*\r
71 float3 v1 = input[1].vPosition - input[0].vPosition;\r
72 float3 v2 = input[2].vPosition - input[0].vPosition;\r
73 float3 normal = cross(v1,v2);\r
74 \r
75 normal = normalize(normal);\r
76 */\r
77 \r
78 \r
79 for(int i = 0; i < 3; i++)\r
80 {\r
81 \r
82 output.vNormal = input[i].vNormal;\r
83 output.vTexcoord = input[i].vTexcoord;\r
84 output.vPosition = input[i].vPosition;\r
85 OutputStream.Append(output);\r
86 }\r
87 \r
88 OutputStream.RestartStrip();\r
89 \r
90 }