Added GPU SoftBody constraint solvers for DirectX 11 (Direct Compute) and OpenCL, thanks to AMD.
See also http://code.google.com/p/bullet/issues/detail?id=390 Added Demos/DX11ClothDemo (an OpenCL cloth demo will follow soon)
This commit is contained in:
90
Demos/DX11ClothDemo/cloth_renderer_PS.hlsl
Normal file
90
Demos/DX11ClothDemo/cloth_renderer_PS.hlsl
Normal file
@@ -0,0 +1,90 @@
|
||||
//--------------------------------------------------------------------------------------
|
||||
// File: BasicHLSL11_PS.hlsl
|
||||
//
|
||||
// The pixel shader file for the BasicHLSL11 sample.
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
// Globals
|
||||
//--------------------------------------------------------------------------------------
|
||||
cbuffer cbPerObject : register( b0 )
|
||||
{
|
||||
float4 g_vObjectColor : packoffset( c0 );
|
||||
};
|
||||
|
||||
cbuffer cbPerFrame : register( b1 )
|
||||
{
|
||||
float3 g_vLightDir : packoffset( c0 );
|
||||
float g_fAmbient : packoffset( c0.w );
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
// Textures and Samplers
|
||||
//--------------------------------------------------------------------------------------
|
||||
Texture2D g_txDiffuse : register( t0 );
|
||||
SamplerState g_samLinear : register( s0 );
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
// Input / Output structures
|
||||
//--------------------------------------------------------------------------------------
|
||||
struct PS_INPUT
|
||||
{
|
||||
float3 vNormal : NORMAL;
|
||||
float2 vTexcoord : TEXCOORD0;
|
||||
float4 vPosition : SV_POSITION;
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------
|
||||
// Pixel Shader
|
||||
//--------------------------------------------------------------------------------------
|
||||
float4 PSMain( PS_INPUT Input ) : SV_TARGET
|
||||
{
|
||||
float4 vDiffuse = g_txDiffuse.Sample( g_samLinear, Input.vTexcoord );
|
||||
|
||||
|
||||
float fLighting = saturate( dot( g_vLightDir, (Input.vNormal)/length(Input.vNormal) ) );
|
||||
//float fLighting = saturate( dot( g_vLightDir, float3(Input.vTexcoord.x,0,0) ) );
|
||||
fLighting = max( fLighting, g_fAmbient );
|
||||
|
||||
//fLighting = dot(g_vLightDir,float3(0,1,0));
|
||||
|
||||
return vDiffuse * fLighting;
|
||||
}
|
||||
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float3 vNormal : NORMAL;
|
||||
float2 vTexcoord : TEXCOORD0;
|
||||
float4 vPosition : SV_POSITION;
|
||||
};
|
||||
|
||||
[maxvertexcount(3)]
|
||||
void GSMain(triangle VS_OUTPUT input[3], inout TriangleStream<PS_INPUT> OutputStream)
|
||||
{
|
||||
PS_INPUT output = (PS_INPUT)0;
|
||||
|
||||
|
||||
/*
|
||||
float3 v1 = input[1].vPosition - input[0].vPosition;
|
||||
float3 v2 = input[2].vPosition - input[0].vPosition;
|
||||
float3 normal = cross(v1,v2);
|
||||
|
||||
normal = normalize(normal);
|
||||
*/
|
||||
|
||||
|
||||
for(int i = 0; i < 3; i++)
|
||||
{
|
||||
|
||||
output.vNormal = input[i].vNormal;
|
||||
output.vTexcoord = input[i].vTexcoord;
|
||||
output.vPosition = input[i].vPosition;
|
||||
OutputStream.Append(output);
|
||||
}
|
||||
|
||||
OutputStream.RestartStrip();
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user