Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions game/bin/rebuild.fgd
Original file line number Diff line number Diff line change
Expand Up @@ -386,3 +386,28 @@
]
waterlevel(target_destination) : "Water Level Designator" : "" : "(Reflections enabled only) Entity to mark the primary body of water in the skybox. The origin must be exactly level with the water, use info_target"
]

@PointClass color(0 0 255) sidelist(sides) iconsprite("editor/env_cubemap.vmt") = env_cubemap :
"An entity that creates a sample point for the Cubic Environment Map."
[
cubemapsize(choices) : "Cubemap Size" : 0 =
[
0 : "Default"
1 : "1x1"
2 : "2x2"
3 : "4x4"
4 : "8x8"
5 : "16x16"
6 : "32x32"
7 : "64x64"
8 : "128x128"
9 : "256x256"
]
sides(sidelist) : "Brush faces": : "(Optional) Brushes faces to directly attach to the env_cubemap. Press Pick then click on faces in the 3D View to select them. Use CTRL while clicking to add or remove from the selection."
parallaxobb(target_destination) : "Cubemap Bounds" : : "(Optional) assigns this cubemap a bounding box for parallax correction (brush entity tied to parallax_obb)."
]

@SolidClass = parallax_obb
[
targetname(target_source) : "Name" : : "The name that other entities refer to this entity by."
]
5 changes: 4 additions & 1 deletion src/materialsystem/stdshaders/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ target_include_directories(game_shader_dx9
target_compile_definitions(game_shader_dx9
PRIVATE
FAST_MATERIALVAR_ACCESS
GAME_SHADER_DLL
#GAME_SHADER_DLL
STDSHADER_DX9_DLL_EXPORT
)

Expand Down Expand Up @@ -80,6 +80,8 @@ target_sources_grouped(
Bloom.cpp
example_model_dx9.cpp
example_model_dx9_helper.cpp
lightmappedgeneric_dx9.cpp
lightmappedgeneric_dx9_helper.cpp
screenspace_general.cpp
)

Expand All @@ -103,6 +105,7 @@ target_sources_grouped(
common_vertexlitgeneric_dx9.h
common_vs_fxc.h
example_model_dx9_helper.h
lightmappedgeneric_dx9_helper.h
shader_constant_register_map.h
)

Expand Down
4 changes: 2 additions & 2 deletions src/materialsystem/stdshaders/buildmisylshaders.bat
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ set tt_all_chkpt=%tt_start%


set sourcedir="shaders"
set targetdir="..\..\..\game\hl2\shaders"
set targetdir="..\..\..\game\neo\shaders"

set BUILD_SHADER=call buildshaders.bat

Expand All @@ -39,7 +39,7 @@ REM PC SHADERS
REM ****************

set SOURCE_DIR="..\..\"
set GAME_DIR="..\..\..\game\hl2"
set GAME_DIR="..\..\..\game\neo"

%BUILD_SHADER% misylshaders_dx9_20b -game %GAME_DIR% -source %SOURCE_DIR%
%BUILD_SHADER% misylshaders_dx9_30 -game %GAME_DIR% -source %SOURCE_DIR% -force30
Expand Down
21 changes: 18 additions & 3 deletions src/materialsystem/stdshaders/include/lightmappedgeneric_ps20b.inc
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
// ($DETAIL_BLEND_MODE == 2 ) || ($DETAIL_BLEND_MODE == 3 ) || ($DETAIL_BLEND_MODE == 4 )
// ($DETAIL_BLEND_MODE == 5 ) || ($DETAIL_BLEND_MODE == 6 ) || ($DETAIL_BLEND_MODE == 7 )
// ($DETAIL_BLEND_MODE == 8 ) || ($DETAIL_BLEND_MODE == 9 )
// $PARALLAXCORRECT && !$CUBEMAP
// $BUMPMAP2 && $WARPLIGHTING
// $WARPLIGHTING && $DETAILTEXTURE
// $ENVMAPMASK && $BUMPMAP
Expand Down Expand Up @@ -80,6 +81,7 @@ class lightmappedgeneric_ps20b_Static_Index
unsigned int m_nBUMPMASK : 2;
unsigned int m_nNORMAL_DECODE_MODE : 1;
unsigned int m_nNORMALMASK_DECODE_MODE : 1;
unsigned int m_nPARALLAXCORRECT : 2;
unsigned int m_nDETAIL_BLEND_MODE : 4;
#ifdef _DEBUG
bool m_bMASKEDBLENDING : 1;
Expand All @@ -104,6 +106,7 @@ class lightmappedgeneric_ps20b_Static_Index
bool m_bBUMPMASK : 1;
bool m_bNORMAL_DECODE_MODE : 1;
bool m_bNORMALMASK_DECODE_MODE : 1;
bool m_bPARALLAXCORRECT : 1;
bool m_bDETAIL_BLEND_MODE : 1;
#endif // _DEBUG
public:
Expand Down Expand Up @@ -305,6 +308,15 @@ public:
#endif // _DEBUG
}

void SetPARALLAXCORRECT( int i )
{
Assert( i >= 0 && i <= 1 );
m_nPARALLAXCORRECT = i;
#ifdef _DEBUG
m_bPARALLAXCORRECT = true;
#endif // _DEBUG
}

void SetDETAIL_BLEND_MODE( int i )
{
Assert( i >= 0 && i <= 11 );
Expand Down Expand Up @@ -338,6 +350,7 @@ public:
m_nBUMPMASK = 0;
m_nNORMAL_DECODE_MODE = 0;
m_nNORMALMASK_DECODE_MODE = 0;
m_nPARALLAXCORRECT = 0;
m_nDETAIL_BLEND_MODE = 0;
#ifdef _DEBUG
m_bMASKEDBLENDING = false;
Expand All @@ -362,13 +375,14 @@ public:
m_bBUMPMASK = false;
m_bNORMAL_DECODE_MODE = false;
m_bNORMALMASK_DECODE_MODE = false;
m_bPARALLAXCORRECT = false;
m_bDETAIL_BLEND_MODE = false;
#endif // _DEBUG
}

int GetIndex() const
{
Assert( m_bMASKEDBLENDING && m_bBASETEXTURE2 && m_bDETAILTEXTURE && m_bBUMPMAP && m_bBUMPMAP2 && m_bCUBEMAP && m_bENVMAPMASK && m_bBASEALPHAENVMAPMASK && m_bSELFILLUM && m_bNORMALMAPALPHAENVMAPMASK && m_bDIFFUSEBUMPMAP && m_bBASETEXTURENOENVMAP && m_bBASETEXTURE2NOENVMAP && m_bWARPLIGHTING && m_bFANCY_BLENDING && m_bRELIEF_MAPPING && m_bSEAMLESS && m_bOUTLINE && m_bSOFTEDGES && m_bBUMPMASK && m_bNORMAL_DECODE_MODE && m_bNORMALMASK_DECODE_MODE && m_bDETAIL_BLEND_MODE );
Assert( m_bMASKEDBLENDING && m_bBASETEXTURE2 && m_bDETAILTEXTURE && m_bBUMPMAP && m_bBUMPMAP2 && m_bCUBEMAP && m_bENVMAPMASK && m_bBASEALPHAENVMAPMASK && m_bSELFILLUM && m_bNORMALMAPALPHAENVMAPMASK && m_bDIFFUSEBUMPMAP && m_bBASETEXTURENOENVMAP && m_bBASETEXTURE2NOENVMAP && m_bWARPLIGHTING && m_bFANCY_BLENDING && m_bRELIEF_MAPPING && m_bSEAMLESS && m_bOUTLINE && m_bSOFTEDGES && m_bBUMPMASK && m_bNORMAL_DECODE_MODE && m_bNORMALMASK_DECODE_MODE && m_bPARALLAXCORRECT && m_bDETAIL_BLEND_MODE );
AssertMsg( !( m_nSEAMLESS && m_nRELIEF_MAPPING ), "Invalid combo combination ( SEAMLESS && RELIEF_MAPPING )" );
AssertMsg( !( !m_nDETAILTEXTURE && ( m_nDETAIL_BLEND_MODE != 0 ) ), "Invalid combo combination ( !DETAILTEXTURE && ( DETAIL_BLEND_MODE != 0 ) )" );
AssertMsg( !( m_nSEAMLESS && ( m_nOUTLINE || m_nSOFTEDGES ) ), "Invalid combo combination ( SEAMLESS && ( OUTLINE || SOFTEDGES ) )" );
Expand All @@ -383,6 +397,7 @@ public:
AssertMsg( !( ( m_nDETAIL_BLEND_MODE == 2 ) || ( ( m_nDETAIL_BLEND_MODE == 3 ) || ( m_nDETAIL_BLEND_MODE == 4 ) ) ), "Invalid combo combination ( ( DETAIL_BLEND_MODE == 2 ) || ( ( DETAIL_BLEND_MODE == 3 ) || ( DETAIL_BLEND_MODE == 4 ) ) )" );
AssertMsg( !( ( m_nDETAIL_BLEND_MODE == 5 ) || ( ( m_nDETAIL_BLEND_MODE == 6 ) || ( m_nDETAIL_BLEND_MODE == 7 ) ) ), "Invalid combo combination ( ( DETAIL_BLEND_MODE == 5 ) || ( ( DETAIL_BLEND_MODE == 6 ) || ( DETAIL_BLEND_MODE == 7 ) ) )" );
AssertMsg( !( ( m_nDETAIL_BLEND_MODE == 8 ) || ( m_nDETAIL_BLEND_MODE == 9 ) ), "Invalid combo combination ( ( DETAIL_BLEND_MODE == 8 ) || ( DETAIL_BLEND_MODE == 9 ) )" );
AssertMsg( !( m_nPARALLAXCORRECT && !m_nCUBEMAP ), "Invalid combo combination ( PARALLAXCORRECT && !CUBEMAP )" );
AssertMsg( !( m_nBUMPMAP2 && m_nWARPLIGHTING ), "Invalid combo combination ( BUMPMAP2 && WARPLIGHTING )" );
AssertMsg( !( m_nWARPLIGHTING && m_nDETAILTEXTURE ), "Invalid combo combination ( WARPLIGHTING && DETAILTEXTURE )" );
AssertMsg( !( m_nENVMAPMASK && m_nBUMPMAP ), "Invalid combo combination ( ENVMAPMASK && BUMPMAP )" );
Expand All @@ -404,11 +419,11 @@ public:
AssertMsg( !( !m_nBUMPMAP && ( m_nNORMAL_DECODE_MODE == 2 ) ), "Invalid combo combination ( !BUMPMAP && ( NORMAL_DECODE_MODE == 2 ) )" );
AssertMsg( !( !m_nBUMPMAP && ( m_nNORMALMASK_DECODE_MODE == 1 ) ), "Invalid combo combination ( !BUMPMAP && ( NORMALMASK_DECODE_MODE == 1 ) )" );
AssertMsg( !( !m_nBUMPMAP && ( m_nNORMALMASK_DECODE_MODE == 2 ) ), "Invalid combo combination ( !BUMPMAP && ( NORMALMASK_DECODE_MODE == 2 ) )" );
return ( 288 * m_nMASKEDBLENDING ) + ( 576 * m_nBASETEXTURE2 ) + ( 1152 * m_nDETAILTEXTURE ) + ( 2304 * m_nBUMPMAP ) + ( 6912 * m_nBUMPMAP2 ) + ( 13824 * m_nCUBEMAP ) + ( 27648 * m_nENVMAPMASK ) + ( 55296 * m_nBASEALPHAENVMAPMASK ) + ( 110592 * m_nSELFILLUM ) + ( 221184 * m_nNORMALMAPALPHAENVMAPMASK ) + ( 442368 * m_nDIFFUSEBUMPMAP ) + ( 884736 * m_nBASETEXTURENOENVMAP ) + ( 1769472 * m_nBASETEXTURE2NOENVMAP ) + ( 3538944 * m_nWARPLIGHTING ) + ( 7077888 * m_nFANCY_BLENDING ) + ( 14155776 * m_nRELIEF_MAPPING ) + ( 14155776 * m_nSEAMLESS ) + ( 28311552 * m_nOUTLINE ) + ( 56623104 * m_nSOFTEDGES ) + ( 113246208 * m_nBUMPMASK ) + ( 226492416 * m_nNORMAL_DECODE_MODE ) + ( 226492416 * m_nNORMALMASK_DECODE_MODE ) + ( 226492416 * m_nDETAIL_BLEND_MODE ) + 0;
return ( 288 * m_nMASKEDBLENDING ) + ( 576 * m_nBASETEXTURE2 ) + ( 1152 * m_nDETAILTEXTURE ) + ( 2304 * m_nBUMPMAP ) + ( 6912 * m_nBUMPMAP2 ) + ( 13824 * m_nCUBEMAP ) + ( 27648 * m_nENVMAPMASK ) + ( 55296 * m_nBASEALPHAENVMAPMASK ) + ( 110592 * m_nSELFILLUM ) + ( 221184 * m_nNORMALMAPALPHAENVMAPMASK ) + ( 442368 * m_nDIFFUSEBUMPMAP ) + ( 884736 * m_nBASETEXTURENOENVMAP ) + ( 1769472 * m_nBASETEXTURE2NOENVMAP ) + ( 3538944 * m_nWARPLIGHTING ) + ( 7077888 * m_nFANCY_BLENDING ) + ( 14155776 * m_nRELIEF_MAPPING ) + ( 14155776 * m_nSEAMLESS ) + ( 28311552 * m_nOUTLINE ) + ( 56623104 * m_nSOFTEDGES ) + ( 113246208 * m_nBUMPMASK ) + ( 226492416 * m_nNORMAL_DECODE_MODE ) + ( 226492416 * m_nNORMALMASK_DECODE_MODE ) + ( 226492416 * m_nPARALLAXCORRECT ) + ( 452984832 * m_nDETAIL_BLEND_MODE ) + 0;
}
};

#define shaderStaticTest_lightmappedgeneric_ps20b psh_forgot_to_set_static_MASKEDBLENDING + psh_forgot_to_set_static_BASETEXTURE2 + psh_forgot_to_set_static_DETAILTEXTURE + psh_forgot_to_set_static_BUMPMAP + psh_forgot_to_set_static_BUMPMAP2 + psh_forgot_to_set_static_CUBEMAP + psh_forgot_to_set_static_ENVMAPMASK + psh_forgot_to_set_static_BASEALPHAENVMAPMASK + psh_forgot_to_set_static_SELFILLUM + psh_forgot_to_set_static_NORMALMAPALPHAENVMAPMASK + psh_forgot_to_set_static_DIFFUSEBUMPMAP + psh_forgot_to_set_static_BASETEXTURENOENVMAP + psh_forgot_to_set_static_BASETEXTURE2NOENVMAP + psh_forgot_to_set_static_WARPLIGHTING + psh_forgot_to_set_static_FANCY_BLENDING + psh_forgot_to_set_static_RELIEF_MAPPING + psh_forgot_to_set_static_SEAMLESS + psh_forgot_to_set_static_OUTLINE + psh_forgot_to_set_static_SOFTEDGES + psh_forgot_to_set_static_BUMPMASK + psh_forgot_to_set_static_NORMAL_DECODE_MODE + psh_forgot_to_set_static_NORMALMASK_DECODE_MODE + psh_forgot_to_set_static_DETAIL_BLEND_MODE
#define shaderStaticTest_lightmappedgeneric_ps20b psh_forgot_to_set_static_MASKEDBLENDING + psh_forgot_to_set_static_BASETEXTURE2 + psh_forgot_to_set_static_DETAILTEXTURE + psh_forgot_to_set_static_BUMPMAP + psh_forgot_to_set_static_BUMPMAP2 + psh_forgot_to_set_static_CUBEMAP + psh_forgot_to_set_static_ENVMAPMASK + psh_forgot_to_set_static_BASEALPHAENVMAPMASK + psh_forgot_to_set_static_SELFILLUM + psh_forgot_to_set_static_NORMALMAPALPHAENVMAPMASK + psh_forgot_to_set_static_DIFFUSEBUMPMAP + psh_forgot_to_set_static_BASETEXTURENOENVMAP + psh_forgot_to_set_static_BASETEXTURE2NOENVMAP + psh_forgot_to_set_static_WARPLIGHTING + psh_forgot_to_set_static_FANCY_BLENDING + psh_forgot_to_set_static_RELIEF_MAPPING + psh_forgot_to_set_static_SEAMLESS + psh_forgot_to_set_static_OUTLINE + psh_forgot_to_set_static_SOFTEDGES + psh_forgot_to_set_static_BUMPMASK + psh_forgot_to_set_static_NORMAL_DECODE_MODE + psh_forgot_to_set_static_NORMALMASK_DECODE_MODE + psh_forgot_to_set_static_PARALLAXCORRECT + psh_forgot_to_set_static_DETAIL_BLEND_MODE


class lightmappedgeneric_ps20b_Dynamic_Index
Expand Down
14 changes: 14 additions & 0 deletions src/materialsystem/stdshaders/lightmappedgeneric_dx9.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ BEGIN_VS_SHADER( LightmappedGeneric,
SHADER_PARAM( OUTLINESTART1, SHADER_PARAM_TYPE_FLOAT, "0.0", "inner start value for outline")
SHADER_PARAM( OUTLINEEND0, SHADER_PARAM_TYPE_FLOAT, "0.0", "inner end value for outline")
SHADER_PARAM( OUTLINEEND1, SHADER_PARAM_TYPE_FLOAT, "0.0", "outer end value for outline")

#ifdef NEO
SHADER_PARAM( ENVMAPPARALLAXOBB1, SHADER_PARAM_TYPE_VEC4, "[1 0 0 0]", "The first line of the parallax correction OBB matrix" )
SHADER_PARAM( ENVMAPPARALLAXOBB2, SHADER_PARAM_TYPE_VEC4, "[0 1 0 0]", "The second line of the parallax correction OBB matrix" )
SHADER_PARAM( ENVMAPPARALLAXOBB3, SHADER_PARAM_TYPE_VEC4, "[0 0 1 0]", "The third line of the parallax correction OBB matrix" )
SHADER_PARAM( ENVMAPORIGIN, SHADER_PARAM_TYPE_VEC3, "[0 0 0]", "The world space position of the env_cubemap being corrected" )
#endif
END_SHADER_PARAMS

void SetupVars( LightmappedGeneric_DX9_Vars_t& info )
Expand Down Expand Up @@ -134,6 +141,13 @@ END_SHADER_PARAMS
info.m_nOutlineStart1 = OUTLINESTART1;
info.m_nOutlineEnd0 = OUTLINEEND0;
info.m_nOutlineEnd1 = OUTLINEEND1;

#ifdef NEO
info.m_nEnvmapParallaxObb1 = ENVMAPPARALLAXOBB1;
info.m_nEnvmapParallaxObb2 = ENVMAPPARALLAXOBB2;
info.m_nEnvmapParallaxObb3 = ENVMAPPARALLAXOBB3;
info.m_nEnvmapOrigin = ENVMAPORIGIN;
#endif
}

SHADER_FALLBACK
Expand Down
48 changes: 47 additions & 1 deletion src/materialsystem/stdshaders/lightmappedgeneric_dx9_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ ConVar my_mat_fullbright( "mat_fullbright","0", FCVAR_CHEAT );

ConVar r_lightmap_bicubic( "r_lightmap_bicubic", "0", FCVAR_NONE, "Enable bi-cubic (high quality) lightmap sampling." );

#ifndef NEO
extern ConVar r_flashlight_version2;
#endif

class CLightmappedGeneric_DX9_Context : public CBasePerMaterialContextData
{
Expand Down Expand Up @@ -167,6 +169,16 @@ void InitParamsLightmappedGeneric_DX9( CBaseVSShader *pShader, IMaterialVar** pa
if( !g_pConfig->UseSpecular() && params[info.m_nEnvmap]->IsDefined() && params[info.m_nBaseTexture]->IsDefined() )
{
params[info.m_nEnvmap]->SetUndefined();
#ifdef NEO
// Don't try parallax without specular
params[info.m_nEnvmapParallaxObb1]->SetIntValue( 0 );
}

// Cubemap parallax correction requires all 4 lines (if the 2nd, 3rd, or 4th are undef, undef the first one (checking done on first var)
if ( !( params[info.m_nEnvmapParallaxObb2]->IsDefined() && params[info.m_nEnvmapParallaxObb3]->IsDefined() && params[info.m_nEnvmapOrigin]->IsDefined() ) )
{
params[info.m_nEnvmapParallaxObb1]->SetIntValue( 0 );
#endif
}

if( !params[info.m_nBaseTextureNoEnvmap]->IsDefined() )
Expand Down Expand Up @@ -316,6 +328,9 @@ void DrawLightmappedGeneric_DX9_Internal(CBaseVSShader *pShader, IMaterialVar**
(info.m_nBlendModulateTexture != -1) &&
(params[info.m_nBlendModulateTexture]->IsTexture() );
bool hasNormalMapAlphaEnvmapMask = IS_FLAG_SET( MATERIAL_VAR_NORMALMAPALPHAENVMAPMASK );
#ifdef NEO
bool hasParallaxCorrection = params[info.m_nEnvmap]->IsDefined() && params[info.m_nEnvmapParallaxObb1]->GetType() == MATERIAL_VAR_TYPE_VECTOR;
#endif

if ( hasFlashlight && !IsX360() )
{
Expand Down Expand Up @@ -571,6 +586,10 @@ void DrawLightmappedGeneric_DX9_Internal(CBaseVSShader *pShader, IMaterialVar**
SET_STATIC_PIXEL_SHADER_COMBO( SEAMLESS, bSeamlessMapping );
SET_STATIC_PIXEL_SHADER_COMBO( OUTLINE, bHasOutline );
SET_STATIC_PIXEL_SHADER_COMBO( SOFTEDGES, bHasSoftEdges );
#ifdef NEO
SET_STATIC_PIXEL_SHADER_COMBO( PARALLAXCORRECT, hasParallaxCorrection );
// NEO NOTE DG: Put it before DETAIL_BLEND_MODE in the fxc or else you get a fun int overflow.
#endif
SET_STATIC_PIXEL_SHADER_COMBO( DETAIL_BLEND_MODE, nDetailBlendMode );
SET_STATIC_PIXEL_SHADER_COMBO( NORMAL_DECODE_MODE, (int) NORMAL_DECODE_NONE );
SET_STATIC_PIXEL_SHADER_COMBO( NORMALMASK_DECODE_MODE, (int) NORMAL_DECODE_NONE );
Expand Down Expand Up @@ -860,6 +879,31 @@ void DrawLightmappedGeneric_DX9_Internal(CBaseVSShader *pShader, IMaterialVar**
pContextData->m_SemiStaticCmdsOut.BindTexture( pShader, SHADER_SAMPLER3, info.m_nBlendModulateTexture, -1 );
}

#ifdef NEO
if ( hasParallaxCorrection )
{
float envMapOrigin[4] = {0,0,0,0};
params[info.m_nEnvmapOrigin]->GetVecValue( envMapOrigin, 3 );
pContextData->m_SemiStaticCmdsOut.SetPixelShaderConstant( 21, envMapOrigin );

float *vecs[3];
vecs[0] = const_cast<float *>( params[info.m_nEnvmapParallaxObb1]->GetVecValue() );
vecs[1] = const_cast<float *>( params[info.m_nEnvmapParallaxObb2]->GetVecValue() );
vecs[2] = const_cast<float *>( params[info.m_nEnvmapParallaxObb3]->GetVecValue() );
float matrix[4][4];
for ( int i = 0; i < 3; i++ )
{
for ( int j = 0; j < 4; j++ )
{
matrix[i][j] = vecs[i][j];
}
}
matrix[3][0] = matrix[3][1] = matrix[3][2] = 0;
matrix[3][3] = 1;
pContextData->m_SemiStaticCmdsOut.SetPixelShaderConstant( 22, &matrix[0][0], 4 );
}
#endif

pContextData->m_SemiStaticCmdsOut.End();
}
}
Expand Down Expand Up @@ -1015,11 +1059,13 @@ void DrawLightmappedGeneric_DX9(CBaseVSShader *pShader, IMaterialVar** params,
CBasePerMaterialContextData **pContextDataPtr )
{
bool hasFlashlight = pShader->UsingFlashlight( params );
#ifndef NEO // what is the point of this??
if ( !IsX360() && !r_flashlight_version2.GetInt() )
{
DrawLightmappedGeneric_DX9_Internal( pShader, params, hasFlashlight, pShaderAPI, pShaderShadow, info, pContextDataPtr );
return;
}

#endif

DrawLightmappedGeneric_DX9_Internal( pShader, params, hasFlashlight, pShaderAPI, pShaderShadow, info, pContextDataPtr );
}
6 changes: 6 additions & 0 deletions src/materialsystem/stdshaders/lightmappedgeneric_dx9_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ struct LightmappedGeneric_DX9_Vars_t
int m_nOutlineEnd0;
int m_nOutlineEnd1;

#ifdef NEO
int m_nEnvmapParallaxObb1;
int m_nEnvmapParallaxObb2;
int m_nEnvmapParallaxObb3;
int m_nEnvmapOrigin;
#endif
};

void InitParamsLightmappedGeneric_DX9( CBaseVSShader *pShader, IMaterialVar** params, const char *pMaterialName, LightmappedGeneric_DX9_Vars_t &info );
Expand Down
20 changes: 20 additions & 0 deletions src/materialsystem/stdshaders/lightmappedgeneric_ps2_3_x.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ const float3 g_FlashlightPos : register( c14 );
const float4x4 g_FlashlightWorldToTexture : register( c15 ); // through c18
const float4 g_ShadowTweaks : register( c19 );

#if PARALLAXCORRECT
const float3 g_CubemapPos : register( c21 );
const float4x4 g_ObbMatrix : register( c22 ); // Through c25
#endif

sampler BaseTextureSampler : register( s0 );
sampler LightmapSampler : register( s1 );
Expand Down Expand Up @@ -530,6 +534,22 @@ HALF4 main( PS_INPUT i ) : COLOR
HALF fresnel = 1.0 - dot( worldSpaceNormal, eyeVect );
fresnel = pow( fresnel, 5.0 );
fresnel = fresnel * g_OneMinusFresnelReflection + g_FresnelReflection;

#if PARALLAXCORRECT
// Adapted from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
float3 worldPos = i.worldPos_projPosZ.xyz;
float3 positionLS = mul( float4( worldPos, 1 ), g_ObbMatrix );
float3 rayLS = mul( reflectVect, (float3x3)g_ObbMatrix );

float3 firstPlaneIntersect = ( float3( 1.0f, 1.0f, 1.0f ) - positionLS ) / rayLS;
float3 secondPlaneIntersect = ( -positionLS ) / rayLS;
float3 furthestPlane = max( firstPlaneIntersect, secondPlaneIntersect );
float distance = min( furthestPlane.x, min( furthestPlane.y, furthestPlane.z ) );

// Use distance in WS directly to recover intersection
float3 intersectPositionWS = worldPos + reflectVect * distance;
reflectVect = intersectPositionWS - g_CubemapPos;
#endif // PARALLAXCORRECT

specularLighting = ENV_MAP_SCALE * texCUBE( EnvmapSampler, reflectVect );
specularLighting *= specularFactor;
Expand Down
2 changes: 2 additions & 0 deletions src/materialsystem/stdshaders/lightmappedgeneric_ps2x.fxc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
// STATIC: "NORMAL_DECODE_MODE" "0..0" [PC]
// STATIC: "NORMALMASK_DECODE_MODE" "0..0" [XBOX]
// STATIC: "NORMALMASK_DECODE_MODE" "0..0" [PC]
// STATIC: "PARALLAXCORRECT" "0..1"
// STATIC: "DETAIL_BLEND_MODE" "0..11"
// STATIC: "FLASHLIGHT" "0..1" [ps20b] [XBOX]

Expand Down Expand Up @@ -55,6 +56,7 @@
// SKIP: ($DETAIL_BLEND_MODE == 8 ) || ($DETAIL_BLEND_MODE == 9 )
// SKIP ($DETAIL_BLEND_MODE == 10 ) && ($BUMPMAP == 0 )
// SKIP ($DETAIL_BLEND_MODE == 11 ) && ($BUMPMAP != 0 )
// SKIP: $PARALLAXCORRECT && !$CUBEMAP

#include "lightmappedgeneric_ps2_3_x.h"