mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-07 20:08:48 +00:00
add support for HLSL/FX
Add support for DirectX HLSL / FX files. The FX files are just HLSL files with some additional syntax to set render-states and define multiple shader stages in one file. Samples are either written by me, or taken from Chromium.
This commit is contained in:
119
samples/HLSL/jellyfish.fx
Normal file
119
samples/HLSL/jellyfish.fx
Normal file
@@ -0,0 +1,119 @@
|
||||
float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
|
||||
float4x4 matWorldView : WORLDVIEW;
|
||||
float4x4 matWorld : WORLD;
|
||||
float4x4 matView : VIEW;
|
||||
|
||||
uniform float4 vViewPosition;
|
||||
|
||||
struct VS_INPUT
|
||||
{
|
||||
float3 Pos: POSITION;
|
||||
float3 Normal: NORMAL;
|
||||
float3 Tangent: TANGENT;
|
||||
float3 Binormal: BINORMAL;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 Pos : POSITION;
|
||||
float3 reflection : TEXCOORD1;
|
||||
float3 refraction : TEXCOORD2;
|
||||
float fresnel : TEXCOORD3;
|
||||
};
|
||||
|
||||
uniform float3 amt;
|
||||
uniform float3 scale;
|
||||
uniform float3 phase;
|
||||
|
||||
float3 deform(float3 p)
|
||||
{
|
||||
float s = 3;
|
||||
float3 p2 = p * scale + phase;
|
||||
s += sin(p2.x) * amt.x;
|
||||
s += sin(p2.y) * amt.y;
|
||||
s += sin(p2.z) * amt.z;
|
||||
return p * s / 3;
|
||||
}
|
||||
|
||||
VS_OUTPUT vs_main( VS_INPUT In )
|
||||
{
|
||||
VS_OUTPUT Out;
|
||||
|
||||
float3 pos = In.Pos;
|
||||
float3 norm = In.Normal;
|
||||
|
||||
float3 p1 = pos + In.Tangent * 0.05;
|
||||
float3 p2 = pos + In.Binormal * 0.05;
|
||||
pos = deform(pos);
|
||||
p1 = deform(p1);
|
||||
p2 = deform(p2);
|
||||
|
||||
p1 -= pos;
|
||||
p2 -= pos;
|
||||
norm = normalize(cross(p1, p2));
|
||||
|
||||
float3 view = normalize(pos - vViewPosition.xyz);
|
||||
|
||||
Out.Pos = mul(float4(pos, 1.0), matWorldViewProjection);
|
||||
Out.reflection = reflect(view, norm);
|
||||
Out.refraction = reflect(view, norm * 0.4f); /* fake, but who cares? */
|
||||
Out.fresnel = dot(view, norm);
|
||||
norm = mul(float4(norm, 0.0), matWorldViewProjection);
|
||||
|
||||
return Out;
|
||||
}
|
||||
|
||||
#define PS_INPUT VS_OUTPUT
|
||||
|
||||
#if 0
|
||||
textureCUBE reflectionMap;
|
||||
samplerCUBE reflectionMapSampler = sampler_state
|
||||
{
|
||||
Texture = (reflectionMap);
|
||||
MipFilter = LINEAR;
|
||||
MinFilter = LINEAR;
|
||||
MagFilter = LINEAR;
|
||||
};
|
||||
#else
|
||||
// textures
|
||||
texture reflectionMap
|
||||
<
|
||||
string type = "CUBE";
|
||||
string name = "test_cube.dds";
|
||||
>;
|
||||
|
||||
samplerCUBE reflectionMapSampler = sampler_state
|
||||
{
|
||||
Texture = (reflectionMap);
|
||||
MipFilter = LINEAR;
|
||||
MinFilter = LINEAR;
|
||||
MagFilter = LINEAR;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct PS_OUTPUT
|
||||
{
|
||||
float4 color : COLOR0;
|
||||
};
|
||||
|
||||
PS_OUTPUT ps_main( PS_INPUT In )
|
||||
{
|
||||
PS_OUTPUT Out;
|
||||
|
||||
float4 reflection = texCUBE(reflectionMapSampler, normalize(In.reflection)) * 1.5;
|
||||
float4 refraction = texCUBE(reflectionMapSampler, normalize(In.refraction));
|
||||
float fresnel = In.fresnel;
|
||||
// float fresnel = abs(normalize(In.normal).z);
|
||||
Out.color = lerp(reflection, refraction, fresnel) * pow(1.0 - fresnel * 0.75, 1.0);
|
||||
|
||||
return Out;
|
||||
}
|
||||
|
||||
technique blur_ps_vs_2_0
|
||||
{
|
||||
pass P0
|
||||
{
|
||||
VertexShader = compile vs_2_0 vs_main();
|
||||
PixelShader = compile ps_2_0 ps_main();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user