1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-07-06 13:01:47 +02:00
GiantsTools/Sdk/External/DirectXTK/Src/Shaders/DebugEffect.fx
2021-01-23 15:40:09 -08:00

135 lines
3.5 KiB
HLSL

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
// http://go.microsoft.com/fwlink/?LinkId=248929
cbuffer Parameters : register(b0)
{
float3 AmbientDown : packoffset(c0);
float Alpha : packoffset(c0.w);
float3 AmbientRange : packoffset(c1);
float4x4 World : packoffset(c2);
float3x3 WorldInverseTranspose : packoffset(c6);
float4x4 WorldViewProj : packoffset(c9);
};
#include "Structures.fxh"
#include "Utilities.fxh"
// Vertex shader: basic
VSOutputPixelLightingTx VSDebug(VSInputNmTx vin)
{
VSOutputPixelLightingTx vout;
vout.PositionPS = mul(vin.Position, WorldViewProj);
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
vout.NormalWS = normalize(mul(vin.Normal, WorldInverseTranspose));
vout.Diffuse = float4(1, 1, 1, Alpha);
vout.TexCoord = vin.TexCoord;
return vout;
}
VSOutputPixelLightingTx VSDebugBn(VSInputNmTx vin)
{
VSOutputPixelLightingTx vout;
float3 normal = BiasX2(vin.Normal);
vout.PositionPS = mul(vin.Position, WorldViewProj);
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
vout.NormalWS = normalize(mul(normal, WorldInverseTranspose));
vout.Diffuse = float4(1, 1, 1, Alpha);
vout.TexCoord = vin.TexCoord;
return vout;
}
// Vertex shader: vertex color.
VSOutputPixelLightingTx VSDebugVc(VSInputNmTxVc vin)
{
VSOutputPixelLightingTx vout;
vout.PositionPS = mul(vin.Position, WorldViewProj);
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
vout.NormalWS = normalize(mul(vin.Normal, WorldInverseTranspose));
vout.Diffuse.rgb = vin.Color.rgb;
vout.Diffuse.a = vin.Color.a * Alpha;
vout.TexCoord = vin.TexCoord;
return vout;
}
VSOutputPixelLightingTx VSDebugVcBn(VSInputNmTxVc vin)
{
VSOutputPixelLightingTx vout;
float3 normal = BiasX2(vin.Normal);
vout.PositionPS = mul(vin.Position, WorldViewProj);
vout.PositionWS = float4(mul(vin.Position, World).xyz, 1);
vout.NormalWS = normalize(mul(normal, WorldInverseTranspose));
vout.Diffuse.rgb = vin.Color.rgb;
vout.Diffuse.a = vin.Color.a * Alpha;
vout.TexCoord = vin.TexCoord;
return vout;
}
// Pixel shader: default
float3 CalcHemiAmbient(float3 normal, float3 color)
{
float3 up = BiasD2(normal);
float3 ambient = AmbientDown + up.y * AmbientRange;
return ambient * color;
}
float4 PSHemiAmbient(PSInputPixelLightingTx pin) : SV_Target0
{
float3 normal = normalize(pin.NormalWS);
// Do lighting
float3 color = CalcHemiAmbient(normal, pin.Diffuse.rgb);
return float4(color, pin.Diffuse.a);
}
// Pixel shader: RGB normals
float4 PSRGBNormals(PSInputPixelLightingTx pin) : SV_Target0
{
float3 normal = normalize(pin.NormalWS);
float3 color = BiasD2(normal);
return float4(color, pin.Diffuse.a);
}
// Pixel shader: RGB tangents
float4 PSRGBTangents(PSInputPixelLightingTx pin) : SV_Target0
{
const float3x3 TBN = CalculateTBN(pin.PositionWS.xyz, pin.NormalWS, pin.TexCoord);
float3 tangent = normalize(TBN[0]);
float3 color = BiasD2(tangent);
return float4(color, pin.Diffuse.a);
}
// Pixel shader: RGB bi-tangents
float4 PSRGBBiTangents(PSInputPixelLightingTx pin) : SV_Target0
{
const float3x3 TBN = CalculateTBN(pin.PositionWS.xyz, pin.NormalWS, pin.TexCoord);
float3 bitangent = normalize(TBN[1]);
float3 color = BiasD2(bitangent);
return float4(color, pin.Diffuse.a);
}