diff --git a/src/Layers/xrRender/ResourceManager.cpp b/src/Layers/xrRender/ResourceManager.cpp index 7ff4e7f8b47..7cb8c733b22 100644 --- a/src/Layers/xrRender/ResourceManager.cpp +++ b/src/Layers/xrRender/ResourceManager.cpp @@ -173,7 +173,7 @@ Shader* CResourceManager::_cpp_Create( _ParseList(C.L_matrices, s_matrices); #if defined(USE_DX11) - if (RImplementation.hud_loading && RImplementation.o.ssfx_hud_raindrops) + if (RImplementation.hud_loading && RImplementation.o.new_shader_support) { C.HudElement = true; } diff --git a/src/Layers/xrRender/blenders/Blender_tree_deferred.cpp b/src/Layers/xrRender/blenders/Blender_tree_deferred.cpp index bd59f491ee6..facd356240f 100644 --- a/src/Layers/xrRender/blenders/Blender_tree_deferred.cpp +++ b/src/Layers/xrRender/blenders/Blender_tree_deferred.cpp @@ -102,7 +102,7 @@ void CBlender_Tree::Compile(CBlender_Compile& C) { case SE_R2_NORMAL_HQ: // deffer // Is a branch/bush. Use a different VS - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT) && oBlend.value && RImplementation.o.ssfx_branches) + if (RImplementation.o.new_shader_support && oBlend.value) tvs = "tree_branch"; if (bUseATOC) diff --git a/src/Layers/xrRender/dxRainRender.cpp b/src/Layers/xrRender/dxRainRender.cpp index 50723dc9bb0..30f9a70d5dc 100644 --- a/src/Layers/xrRender/dxRainRender.cpp +++ b/src/Layers/xrRender/dxRainRender.cpp @@ -35,7 +35,7 @@ dxRainRender::dxRainRender() hGeom_Drops.create(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, RImplementation.Vertex.Buffer(), RImplementation.Index.Buffer()); #if defined(USE_DX11) - if (RImplementation.o.ssfx_rain) + if (RImplementation.o.new_shader_support) SH_Splash.create("effects\\rain_splash", "fx\\fx_rain"); #endif @@ -59,7 +59,7 @@ void dxRainRender::Render(CEffect_Rain& owner) // SSS Rain shader is available #if defined(USE_DX11) - if (RImplementation.o.ssfx_rain) + if (RImplementation.o.new_shader_support) { _drop_len = ps_ssfx_rain_1.x; _drop_width = ps_ssfx_rain_1.y; @@ -169,7 +169,7 @@ void dxRainRender::Render(CEffect_Rain& owner) // Build line Fvector& pos_head = one.P; Fvector pos_trail; - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT)) + if (RImplementation.o.new_shader_support) pos_trail.mad(pos_head, one.D, -_drop_len * factor_visual); else pos_trail.mad(pos_head, one.D, -drop_length * factor_visual); @@ -192,7 +192,7 @@ void dxRainRender::Render(CEffect_Rain& owner) camDir.sub(sC, vEye); camDir.normalize(); lineTop.crossproduct(camDir, lineD); - float w = ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT) ? _drop_width : drop_width; + float w = RImplementation.o.new_shader_support ? _drop_width : drop_width; u32 s = one.uv_set; P.mad(pos_trail, lineTop, -w); verts->set(P, u_rain_color, UV[s][0].x, UV[s][0].y); @@ -232,7 +232,7 @@ void dxRainRender::Render(CEffect_Rain& owner) { float dt = Device.fTimeDelta; _IndexStream& _IS = RImplementation.Index; - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT)) + if (RImplementation.o.new_shader_support) { RCache.set_Shader(_splash_SH); RCache.set_c(s_shader_setup, ps_ssfx_rain_3); // Alpha, Refraction diff --git a/src/Layers/xrRender/dxWallMarkArray.cpp b/src/Layers/xrRender/dxWallMarkArray.cpp index eaa2b1640ad..a98016dd62b 100644 --- a/src/Layers/xrRender/dxWallMarkArray.cpp +++ b/src/Layers/xrRender/dxWallMarkArray.cpp @@ -15,7 +15,7 @@ void dxWallMarkArray::AppendMark(LPCSTR s_textures) ref_shader s; LPCSTR sh_name = "effects" DELIMITER "wallmark"; #if defined(USE_DX11) - if (RImplementation.o.ssfx_blood) + if (RImplementation.o.new_shader_support) { // Use the blood shader for any texture with the name wm_blood_* if (strstr(s_textures, "wm_blood_")) diff --git a/src/Layers/xrRenderPC_R1/FStaticRender.cpp b/src/Layers/xrRenderPC_R1/FStaticRender.cpp index 3443b26ec6f..4bb1f1269c9 100644 --- a/src/Layers/xrRenderPC_R1/FStaticRender.cpp +++ b/src/Layers/xrRenderPC_R1/FStaticRender.cpp @@ -54,6 +54,12 @@ ShaderElement* CRender::rimp_select_sh_static(dxRender_Visual* pVisual, float cd #endif } +void CRender::OnDeviceCreate(pcstr shName) +{ + o.new_shader_support = 0; + D3DXRenderBase::OnDeviceCreate(shName); +} + ////////////////////////////////////////////////////////////////////////// void CRender::create() { diff --git a/src/Layers/xrRenderPC_R1/FStaticRender.h b/src/Layers/xrRenderPC_R1/FStaticRender.h index 123f7ffd143..a569fb5adf1 100644 --- a/src/Layers/xrRenderPC_R1/FStaticRender.h +++ b/src/Layers/xrRenderPC_R1/FStaticRender.h @@ -36,6 +36,7 @@ class CRender : public D3DXRenderBase u32 forceskinw : 1; // config u32 no_detail_textures : 1; // config u32 ffp : 1; // don't use shaders, only fixed-function pipeline or software processing + u32 new_shader_support : 1; // always disabled for r1 } o; public: @@ -105,6 +106,7 @@ class CRender : public D3DXRenderBase virtual u32 get_dx_level() override { return 0x00090000; } virtual bool is_sun_static() override { return true; } // Loading / Unloading + virtual void OnDeviceCreate(pcstr shName) override; virtual void create() override; virtual void destroy() override; virtual void reset_begin() override; diff --git a/src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp b/src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp index af0504138de..f7163af4143 100644 --- a/src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp +++ b/src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp @@ -310,7 +310,7 @@ void CRenderTarget::phase_combine() RCache.set_Stencil(FALSE); - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT)) + if (RImplementation.o.new_shader_support) { //(Anomaly) Compute blur textures phase_blur(); diff --git a/src/Layers/xrRender_R2/r2.cpp b/src/Layers/xrRender_R2/r2.cpp index 391f17e9b71..bcce145c8ec 100644 --- a/src/Layers/xrRender_R2/r2.cpp +++ b/src/Layers/xrRender_R2/r2.cpp @@ -212,25 +212,10 @@ static bool must_enable_old_cascades() void CRender::OnDeviceCreate(pcstr shName) { o.new_shader_support = 0; - o.ssfx_rain = 0; - o.ssfx_blood = 0; - o.ssfx_branches = 0; - o.ssfx_hud_raindrops = 0; #if defined(USE_DX11) o.new_shader_support = HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0 && ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT); - // Ascii's Screen Space Shaders - Check if SSS shaders exist - string_path fn; - o.ssfx_rain = FS.exist(fn, "$game_shaders$", "r3\\effects_rain_splash", ".ps") ? 1 : 0; - o.ssfx_blood = FS.exist(fn, "$game_shaders$", "r3\\effects_wallmark_blood", ".ps") ? 1 : 0; - o.ssfx_branches = FS.exist(fn, "$game_shaders$", "r3\\deffer_tree_branch_bump-hq", ".vs") ? 1 : 0; - o.ssfx_hud_raindrops = FS.exist(fn, "$game_shaders$", "r3\\deffer_base_hud_bump", ".ps") ? 1 : 0; - Msg("- NEW SHADER SUPPORT ENABLED %i", o.new_shader_support); - Msg("- SSS HUD RAINDROPS SHADER INSTALLED %i", o.ssfx_hud_raindrops); - Msg("- SSS RAIN SHADER INSTALLED %i", o.ssfx_rain); - Msg("- SSS BLOOD SHADER INSTALLED %i", o.ssfx_blood); - Msg("- SSS BRANCHES SHADER INSTALLED %i", o.ssfx_branches); #endif D3DXRenderBase::OnDeviceCreate(shName); diff --git a/src/Layers/xrRender_R2/r2.h b/src/Layers/xrRender_R2/r2.h index f6541e06a74..52c4a6be11d 100644 --- a/src/Layers/xrRender_R2/r2.h +++ b/src/Layers/xrRender_R2/r2.h @@ -275,11 +275,6 @@ class CRender final : public D3DXRenderBase // Yohji - New shader support u32 new_shader_support : 1; - // Ascii - Screen Space Shaders - u32 ssfx_branches : 1; - u32 ssfx_blood : 1; - u32 ssfx_rain : 1; - u32 ssfx_hud_raindrops : 1; } o; struct RenderR2Statistics diff --git a/src/Layers/xrRender_R2/render_phase_sun.cpp b/src/Layers/xrRender_R2/render_phase_sun.cpp index 05f3326d78e..da491b07be1 100644 --- a/src/Layers/xrRender_R2/render_phase_sun.cpp +++ b/src/Layers/xrRender_R2/render_phase_sun.cpp @@ -7,7 +7,7 @@ void render_sun::init() { float fBias = -0.0000025f; - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT)) + if (RImplementation.o.new_shader_support) { m_sun_cascades[0].reset_chain = true; m_sun_cascades[0].size = ps_ssfx_shadow_cascades.x; @@ -158,7 +158,7 @@ void render_sun::calculate() float map_size = m_sun_cascades[cascade_ind].size; #if defined(USE_OGL) XRMatrixOrthoOffCenterLH(&mdir_Project, -map_size * 0.5f, map_size * 0.5f, -map_size * 0.5f, - map_size * 0.5f, 0.1f, dist + /*sqrt(2)*/1.41421f * map_size); + map_size * 0.5f, 0.1f, dist + /*sqrt(2)*/1.41421f * map_size); #else #ifdef USE_DX9 XMStoreFloat4x4((XMFLOAT4X4*)&mdir_Project, XMMatrixOrthographicOffCenterLH( @@ -334,7 +334,7 @@ void render_sun::render() dsgraph.render_graph(0); if (ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS)) { - if (ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT)) + if (RImplementation.o.new_shader_support) { if (cascade_ind <= ps_ssfx_grass_shadows.x) {