1 //--------------------------------------------------------------------------------------
\r
2 // File: BasicHLSL11_PS.hlsl
\r
4 // The pixel shader file for the BasicHLSL11 sample.
\r
6 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
7 //--------------------------------------------------------------------------------------
\r
9 //--------------------------------------------------------------------------------------
\r
11 //--------------------------------------------------------------------------------------
\r
12 cbuffer cbPerObject : register( b0 )
\r
14 float4 g_vObjectColor : packoffset( c0 );
\r
17 cbuffer cbPerFrame : register( b1 )
\r
19 float3 g_vLightDir : packoffset( c0 );
\r
20 float g_fAmbient : packoffset( c0.w );
\r
23 //--------------------------------------------------------------------------------------
\r
24 // Textures and Samplers
\r
25 //--------------------------------------------------------------------------------------
\r
26 Texture2D g_txDiffuse : register( t0 );
\r
27 SamplerState g_samLinear : register( s0 );
\r
29 //--------------------------------------------------------------------------------------
\r
30 // Input / Output structures
\r
31 //--------------------------------------------------------------------------------------
\r
34 float3 vNormal : NORMAL;
\r
35 float2 vTexcoord : TEXCOORD0;
\r
36 float4 vPosition : SV_POSITION;
\r
39 //--------------------------------------------------------------------------------------
\r
41 //--------------------------------------------------------------------------------------
\r
42 float4 PSMain( PS_INPUT Input ) : SV_TARGET
\r
44 float4 vDiffuse = g_txDiffuse.Sample( g_samLinear, Input.vTexcoord );
\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
51 //fLighting = dot(g_vLightDir,float3(0,1,0));
\r
53 return vDiffuse * fLighting;
\r
59 float3 vNormal : NORMAL;
\r
60 float2 vTexcoord : TEXCOORD0;
\r
61 float4 vPosition : SV_POSITION;
\r
65 void GSMain(triangle VS_OUTPUT input[3], inout TriangleStream<PS_INPUT> OutputStream)
\r
67 PS_INPUT output = (PS_INPUT)0;
\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
75 normal = normalize(normal);
\r
79 for(int i = 0; i < 3; i++)
\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
88 OutputStream.RestartStrip();
\r