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,7 +518,8 @@ using NoColorAttachment = NoColorAttachmentExt<AlphaWrite ? AlphaMode::AlphaWrit
#define FOG_SHADER(fog) \ #define FOG_SHADER(fog) \
float fogZ; \ float fogZ; \
float fogF = hsh::saturate(((fog).m_A / ((fog).m_B - this->position.z)) - (fog).m_C); \ { \
float fogF = hsh::saturate(((fog).m_A / ((fog).m_B - this->frag_position.z)) - (fog).m_C); \
switch ((fog).m_mode) { \ switch ((fog).m_mode) { \
case ERglFogMode::PerspLin: \ case ERglFogMode::PerspLin: \
fogZ = fogF; \ fogZ = fogF; \
@ -539,11 +540,14 @@ using NoColorAttachment = NoColorAttachmentExt<AlphaWrite ? AlphaMode::AlphaWrit
default: \ default: \
fogZ = 0.0; \ fogZ = 0.0; \
break; \ break; \
} \
} }
#define FOG_SHADER_UNIFORM(fogUniBuf) \ #define FOG_SHADER_UNIFORM(fogUniBuf) \
float fogZ; \ float fogZ; \
float fogF = hsh::saturate(((fogUniBuf)->m_A / ((fogUniBuf)->m_B - this->position.z)) - (fogUniBuf)->m_C); \ { \
float fogF = \
hsh::saturate(((fogUniBuf)->m_A / ((fogUniBuf)->m_B - this->frag_position.z)) - (fogUniBuf)->m_C); \
switch ((fogUniBuf)->m_mode) { \ switch ((fogUniBuf)->m_mode) { \
case ERglFogMode::PerspLin: \ case ERglFogMode::PerspLin: \
fogZ = fogF; \ fogZ = fogF; \
@ -564,6 +568,7 @@ using NoColorAttachment = NoColorAttachmentExt<AlphaWrite ? AlphaMode::AlphaWrit
default: \ default: \
fogZ = 0.0; \ fogZ = 0.0; \
break; \ break; \
} \
} }
#define FOG_OUT(out, fog, colorIn) \ #define FOG_OUT(out, fog, colorIn) \

View File

@ -25,8 +25,6 @@ struct CEnvFxShadersPipeline
hsh::float4 color = vbo->color * envFxUniBuf->moduColor * flakeTexel * envTexel; hsh::float4 color = vbo->color * envFxUniBuf->moduColor * flakeTexel * envTexel;
this->position = envFxUniBuf->proj * (envFxUniBuf->mv * posIn); this->position = envFxUniBuf->proj * (envFxUniBuf->mv * posIn);
FOG_SHADER_UNIFORM(fogUniBuf) 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) FOG_OUT_UNIFORM(this->color_out[0], fogUniBuf, color)
} }
}; };