Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void D3D9DeviceEx::UpdateFog() {
- auto& rs = m_state.renderStates;
- bool fogEnabled = rs[D3DRS_FOGENABLE] != FALSE;
- bool pixelFog = rs[D3DRS_FOGTABLEMODE] != D3DFOG_NONE && fogEnabled;
- bool vertexFog = rs[D3DRS_FOGVERTEXMODE] != D3DFOG_NONE && fogEnabled && !pixelFog;
- auto UpdateFogConstants = [&](D3DFOGMODE FogMode) {
- if (m_flags.test(D3D9DeviceFlag::DirtyFogColor)) {
- m_flags.clr(D3D9DeviceFlag::DirtyFogColor);
- UpdatePushConstant<D3D9RenderStateItem::FogColor>();
- }
- if (FogMode == D3DFOG_LINEAR) {
- if (m_flags.test(D3D9DeviceFlag::DirtyFogStart)) {
- m_flags.clr(D3D9DeviceFlag::DirtyFogStart);
- UpdatePushConstant<D3D9RenderStateItem::FogStart>();
- }
- if (m_flags.test(D3D9DeviceFlag::DirtyFogEnd)) {
- m_flags.clr(D3D9DeviceFlag::DirtyFogEnd);
- UpdatePushConstant<D3D9RenderStateItem::FogEnd>();
- }
- }
- else {
- if (m_flags.test(D3D9DeviceFlag::DirtyFogDensity)) {
- m_flags.clr(D3D9DeviceFlag::DirtyFogDensity);
- UpdatePushConstant<D3D9RenderStateItem::FogDensity>();
- }
- }
- };
- if (vertexFog) {
- D3DFOGMODE mode = D3DFOGMODE(rs[D3DRS_FOGVERTEXMODE]);
- UpdateFogConstants(mode);
- EmitCs([cMode = mode] (DxvkContext* ctx) {
- ctx->setSpecConstant(D3D9SpecConstantId::FogEnabled, true);
- ctx->setSpecConstant(D3D9SpecConstantId::VertexFogMode, cMode);
- ctx->setSpecConstant(D3D9SpecConstantId::PixelFogMode, D3DFOG_NONE);
- });
- }
- else if (pixelFog) {
- D3DFOGMODE mode = D3DFOGMODE(rs[D3DRS_FOGTABLEMODE]);
- UpdateFogConstants(mode);
- EmitCs([cMode = mode] (DxvkContext* ctx) {
- ctx->setSpecConstant(D3D9SpecConstantId::FogEnabled, true);
- ctx->setSpecConstant(D3D9SpecConstantId::VertexFogMode, D3DFOG_NONE);
- ctx->setSpecConstant(D3D9SpecConstantId::PixelFogMode, cMode);
- });
- }
- else {
- EmitCs([] (DxvkContext* ctx) {
- ctx->setSpecConstant(D3D9SpecConstantId::FogEnabled, false);
- ctx->setSpecConstant(D3D9SpecConstantId::VertexFogMode, D3DFOG_NONE);
- ctx->setSpecConstant(D3D9SpecConstantId::PixelFogMode, D3DFOG_NONE);
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement