Files
2025-11-28 23:13:44 +05:30

112 lines
2.9 KiB
Plaintext

#ifndef CONFIG_H
#define CONFIG_H
// The VFACE register sign indicates if the face is backfacing or not.
// The Renderer will define this if its supported...
#if !defined(ENABLE_VFACE)
#define ENABLE_VFACE 0
#endif
// When true, ENABLE_COLOR_SWIZZLE_SUPPORT provides dynamic
// color swizzling support from rgb/bgr -> bgr/rgb
// if g_bSwizzleColor is true
// This prevents the need for CPU color swizzling on platforms
// expecting a color format different from that provided
#if !defined(ENABLE_COLOR_SWIZZLE_SUPPORT)
#define ENABLE_COLOR_SWIZZLE_SUPPORT 0
#endif
// The D3D compiler will #define this as TANGENT!!
#ifndef SEMANTIC_TANGENT
#define SEMANTIC_TANGENT TEXCOORD5
#endif
#define SEMANTIC_INSTANCE_T TEXCOORD8
#define SEMANTIC_INSTANCE_X TEXCOORD9
#define SEMANTIC_INSTANCE_Y TEXCOORD10
#define SEMANTIC_INSTANCE_Z TEXCOORD11
#define SEMANTIC_INSTANCE_UV TEXCOORD12
#define SEMANTIC_INSTANCE_LOCAL TEXCOORD13
#define SEMANTIC_DISPLACEMENT TEXCOORD14
#define SEMANTIC_DISPLACEMENT_FLAGS TEXCOORD15
#define SEMANTIC_SPRITE_ROT_SCALEX_SCALEY TEXCOORD14
#define SEMANTIC_BONEINDEX TEXCOORD6
#if !defined(RENDERER_DISPLACED)
#define RENDERER_DISPLACED 0
#endif
#if !defined(ENABLE_TESSELLATION)
#define ENABLE_TESSELLATION 0
#endif
// Parameters passed from the vertex shader to the fragment shader.
struct FragmentParameters
{
float3 worldSpacePosition : TEXCOORD4;
float3 worldSpaceNormal : TEXCOORD5;
float3 worldSpaceTangent : TEXCOORD6;
float3 worldSpaceBinormal : TEXCOORD7;
#if defined(PX_X360) && defined(RENDERER_FRAGMENT)
float2 spriteTexCoord : SPRITETEXCOORD;
#endif
#if defined (RENDERER_GXM)
float2 spriteTexCoord : SPRITECOORD;
#endif
float4 texcoord0 : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
#if !defined (RENDERER_WIN8ARM)
float4 texcoord3 : TEXCOORD3;
#endif
half4 color : COLOR;
};
// Material information for a given fragment.
struct SurfaceMaterial
{
half3 diffuseColor;
half alpha;
half3 emissiveColor;
half3 specularColor;
half specularPower;
half3 tangentSpaceNormal;
};
// Lighting information for a given fragment.
struct Lighting
{
half3 diffuseColor;
half3 specularColor;
};
// Final output for a Forward Rendered Fragment.
struct Fragment
{
half4 color : COLOR0;
};
// Final output for a Deferred Rendered Fragment.
struct DeferredFragment
{
// TODO: COLOR0 alpha should be the alpha value... not emissiveIntensity.
half4 diffuseColor : COLOR0; // rgb=diffuseColor
half4 emissiveColor : COLOR1; // rgb=emissiveColor
half4 worldSpaceNormalAndSpecularPower : COLOR2; // rgb=worldSpaceNormal, a=specularPower
};
// user implemented functions...
SurfaceMaterial computeSurfaceMaterial(const FragmentParameters params);
// lighting functions...
Lighting computeLighting(const FragmentParameters params, const SurfaceMaterial material);
#endif