Use frag_position in FOG_SHADER

This commit is contained in:
Luke Street 2020-10-21 01:33:33 -04:00
parent 73c7755e4c
commit 5c3267c69d
2 changed files with 47 additions and 44 deletions

View File

@ -518,52 +518,57 @@ using NoColorAttachment = NoColorAttachmentExt<AlphaWrite ? AlphaMode::AlphaWrit
#define FOG_SHADER(fog) \
float fogZ; \
float fogF = hsh::saturate(((fog).m_A / ((fog).m_B - this->position.z)) - (fog).m_C); \
switch ((fog).m_mode) { \
case ERglFogMode::PerspLin: \
fogZ = fogF; \
break; \
case ERglFogMode::PerspExp: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF); \
break; \
case ERglFogMode::PerspExp2: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF * fogF); \
break; \
case ERglFogMode::PerspRevExp: \
fogZ = hsh::exp2(-8.0 * (1.0 - fogF)); \
break; \
case ERglFogMode::PerspRevExp2: \
fogF = 1.0 - fogF; \
fogZ = hsh::exp2(-8.0 * fogF * fogF); \
break; \
default: \
fogZ = 0.0; \
break; \
{ \
float fogF = hsh::saturate(((fog).m_A / ((fog).m_B - this->frag_position.z)) - (fog).m_C); \
switch ((fog).m_mode) { \
case ERglFogMode::PerspLin: \
fogZ = fogF; \
break; \
case ERglFogMode::PerspExp: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF); \
break; \
case ERglFogMode::PerspExp2: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF * fogF); \
break; \
case ERglFogMode::PerspRevExp: \
fogZ = hsh::exp2(-8.0 * (1.0 - fogF)); \
break; \
case ERglFogMode::PerspRevExp2: \
fogF = 1.0 - fogF; \
fogZ = hsh::exp2(-8.0 * fogF * fogF); \
break; \
default: \
fogZ = 0.0; \
break; \
} \
}
#define FOG_SHADER_UNIFORM(fogUniBuf) \
float fogZ; \
float fogF = hsh::saturate(((fogUniBuf)->m_A / ((fogUniBuf)->m_B - this->position.z)) - (fogUniBuf)->m_C); \
switch ((fogUniBuf)->m_mode) { \
case ERglFogMode::PerspLin: \
fogZ = fogF; \
break; \
case ERglFogMode::PerspExp: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF); \
break; \
case ERglFogMode::PerspExp2: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF * fogF); \
break; \
case ERglFogMode::PerspRevExp: \
fogZ = hsh::exp2(-8.0 * (1.0 - fogF)); \
break; \
case ERglFogMode::PerspRevExp2: \
fogF = 1.0 - fogF; \
fogZ = hsh::exp2(-8.0 * fogF * fogF); \
break; \
default: \
fogZ = 0.0; \
break; \
{ \
float fogF = \
hsh::saturate(((fogUniBuf)->m_A / ((fogUniBuf)->m_B - this->frag_position.z)) - (fogUniBuf)->m_C); \
switch ((fogUniBuf)->m_mode) { \
case ERglFogMode::PerspLin: \
fogZ = fogF; \
break; \
case ERglFogMode::PerspExp: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF); \
break; \
case ERglFogMode::PerspExp2: \
fogZ = 1.0 - hsh::exp2(-8.0 * fogF * fogF); \
break; \
case ERglFogMode::PerspRevExp: \
fogZ = hsh::exp2(-8.0 * (1.0 - fogF)); \
break; \
case ERglFogMode::PerspRevExp2: \
fogF = 1.0 - fogF; \
fogZ = hsh::exp2(-8.0 * fogF * fogF); \
break; \
default: \
fogZ = 0.0; \
break; \
} \
}
#define FOG_OUT(out, fog, colorIn) \

View File

@ -25,8 +25,6 @@ struct CEnvFxShadersPipeline
hsh::float4 color = vbo->color * envFxUniBuf->moduColor * flakeTexel * envTexel;
this->position = envFxUniBuf->proj * (envFxUniBuf->mv * posIn);
FOG_SHADER_UNIFORM(fogUniBuf)
// FIXME: hsh binds fog uniform to fragment stage
// only because of m_color reference in here. can/should we avoid that?
FOG_OUT_UNIFORM(this->color_out[0], fogUniBuf, color)
}
};