0001:
0002:
0003:
0004:
0005:
0006: #include "paraboloid.fx"
0007:
0008:
0009:
0010:
0011:
0012: float4x4 mWVP;
0013: float4x4 mWV;
0014:
0015:
0016:
0017:
0018: texture Texture;
0019: sampler Sampler = sampler_state
0020: {
0021: Texture = <Texture>;
0022: MinFilter = POINT;
0023: MagFilter = POINT;
0024: MipFilter = NONE;
0025:
0026: AddressU = Clamp;
0027: AddressV = Clamp;
0028: };
0029:
0030:
0031:
0032: struct VS_INPUT
0033: {
0034: float4 Pos : POSITION;
0035: float3 Normal : NORMAL0;
0036: float2 Tex : TEXCOORD0;
0037: };
0038:
0039:
0040:
0041: struct VS_OUTPUT
0042: {
0043: float4 Pos : POSITION;
0044: float2 Tex : TEXCOORD0;
0045: };
0046:
0047:
0048:
0049:
0050: VS_OUTPUT VS(VS_INPUT In)
0051: {
0052: VS_OUTPUT Out = (VS_OUTPUT)0;
0053:
0054:
0055: Out.Pos = mul( In.Pos, mWVP );
0056:
0057:
0058: Out.Tex = In.Tex;
0059:
0060:
0061: return Out;
0062: }
0063:
0064:
0065:
0066:
0067: float4 PS( VS_OUTPUT In ) : COLOR
0068: {
0069: float4 ldr = (float4)0;
0070:
0071: float4 hdr = tex2D( Sampler, In.Tex );
0072:
0073: ldr.rgb = saturate( hdr * pow(2, 256*(hdr.a - 0.5) ));
0074:
0075: return ldr;
0076: }
0077:
0078:
0079:
0080:
0081:
0082: VS_OUTPUT VS_DUAL( VS_INPUT In )
0083: {
0084: VS_OUTPUT Out = (VS_OUTPUT)0;
0085:
0086:
0087: Out.Pos = paraboloid( In.Pos, mWV );
0088:
0089:
0090: Out.Tex = In.Tex;
0091:
0092: return Out;
0093: }
0094:
0095:
0096:
0097:
0098: technique TShader
0099: {
0100: pass P0
0101: {
0102: VertexShader = compile vs_1_1 VS();
0103: PixelShader = compile ps_2_0 PS();
0104: }
0105: pass P0
0106: {
0107: VertexShader = compile vs_1_1 VS_DUAL();
0108: PixelShader = compile ps_2_0 PS();
0109: }
0110: }
0111:
0112: