From 6728a54fa6b81e54692c394b176dce96c9ea5719 Mon Sep 17 00:00:00 2001 From: Ilya Orlov Date: Sat, 29 Sep 2018 21:17:52 +0300 Subject: [PATCH] xrRender_GL: now dll is loaded without error on linux --- src/Layers/xrRenderPC_GL/CMakeLists.txt | 2 ++ src/Layers/xrRenderPC_GL/gl_rendertarget.cpp | 26 +++++++++++--------- src/Layers/xrRenderPC_GL/rgl.cpp | 16 ++++++------ src/Layers/xrRenderPC_GL/rgl.h | 6 +++-- src/xrEngine/EngineAPI.cpp | 18 +++++++++----- 5 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/Layers/xrRenderPC_GL/CMakeLists.txt b/src/Layers/xrRenderPC_GL/CMakeLists.txt index 50c0fc269e1..a1eda725c81 100644 --- a/src/Layers/xrRenderPC_GL/CMakeLists.txt +++ b/src/Layers/xrRenderPC_GL/CMakeLists.txt @@ -5,6 +5,8 @@ list(APPEND DIRS "../xrRender" "../xrRender/blenders" "../xrRenderGL" + "../xrRenderGL/MSAA" + "../xrRenderGL/GL Rain" "../../Include/xrRender" ) diff --git a/src/Layers/xrRenderPC_GL/gl_rendertarget.cpp b/src/Layers/xrRenderPC_GL/gl_rendertarget.cpp index 2346a6e9fd2..f77507f72b3 100644 --- a/src/Layers/xrRenderPC_GL/gl_rendertarget.cpp +++ b/src/Layers/xrRenderPC_GL/gl_rendertarget.cpp @@ -14,6 +14,10 @@ #include "Layers/xrRenderDX10/MSAA/dx10MSAABlender.h" #include "Layers/xrRenderDX10/DX10 Rain/dx10RainBlender.h" +#if defined(LINUX) +float OLES_SUN_LIMIT_27_01_07 = 100.f; +#endif + void CRenderTarget::u_setrt(const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, GLuint zb) { if (_1) @@ -188,7 +192,7 @@ Ivector vpack(Fvector src) float e_best = flt_max; int r = bx, g = by, b = bz; #ifdef DEBUG - int d=0; + int d=0; #else int d = 3; #endif @@ -248,11 +252,11 @@ CRenderTarget::CRenderTarget() SampleCount = RImplementation.o.dx10_msaa_samples; #ifdef DEBUG - Msg ("MSAA samples = %d", SampleCount ); + Msg ("MSAA samples = %d", SampleCount ); if( RImplementation.o.dx10_msaa_opt ) - Msg ("dx10_MSAA_opt = on" ); + Msg ("dx10_MSAA_opt = on" ); if( RImplementation.o.dx10_gbuffer_opt ) - Msg ("dx10_gbuffer_opt = on" ); + Msg ("dx10_gbuffer_opt = on" ); #endif // DEBUG param_blur = 0.f; param_gray = 0.f; @@ -897,7 +901,7 @@ CRenderTarget::CRenderTarget() s_flip.create("effects\\screen_set", r2_base); g_flip.create(FVF::F_TL, RCache.Vertex.Buffer(), RCache.QuadIB); - // + // dwWidth = Device.dwWidth; dwHeight = Device.dwHeight; } @@ -914,13 +918,13 @@ CRenderTarget::~CRenderTarget() t_LUM_dest->surface_set(GL_TEXTURE_2D, NULL); #ifdef DEBUG - GLuint pSurf = 0; + GLuint pSurf = 0; - pSurf = t_envmap_0->surface_get(); - glDeleteTextures(1, &pSurf); + pSurf = t_envmap_0->surface_get(); + glDeleteTextures(1, &pSurf); - pSurf = t_envmap_1->surface_get(); - glDeleteTextures(1, &pSurf); + pSurf = t_envmap_1->surface_get(); + glDeleteTextures(1, &pSurf); #endif // DEBUG t_envmap_0->surface_set(GL_TEXTURE_CUBE_MAP, NULL); t_envmap_1->surface_set(GL_TEXTURE_CUBE_MAP, NULL); @@ -940,7 +944,7 @@ CRenderTarget::~CRenderTarget() t_noise_mipped->surface_set(GL_TEXTURE_2D, NULL); glDeleteTextures(1, &t_noise_surf_mipped); - // + // accum_spot_geom_destroy(); accum_omnip_geom_destroy(); accum_point_geom_destroy(); diff --git a/src/Layers/xrRenderPC_GL/rgl.cpp b/src/Layers/xrRenderPC_GL/rgl.cpp index f324e8f030d..2e31d752b46 100644 --- a/src/Layers/xrRenderPC_GL/rgl.cpp +++ b/src/Layers/xrRenderPC_GL/rgl.cpp @@ -147,7 +147,7 @@ void CRender::create() //. _tzset (); //. ??? _strdate ( date, 128 ); ??? - //. ??? if (date < 22-march-07) + //. ??? if (date < 22-march-07) if (false) { u32 device_id = HW.Caps.id_device; @@ -441,11 +441,11 @@ void CRender::reset_end() /* void CRender::OnFrame() { - Models->DeleteQueue (); - if (ps_r2_ls_flags.test(R2FLAG_EXP_MT_CALC)) { - Device.seqParallel.insert (Device.seqParallel.begin(), - fastdelegate::FastDelegate0<>(&HOM,&CHOM::MT_RENDER)); - } + Models->DeleteQueue (); + if (ps_r2_ls_flags.test(R2FLAG_EXP_MT_CALC)) { + Device.seqParallel.insert (Device.seqParallel.begin(), + fastdelegate::FastDelegate0<>(&HOM,&CHOM::MT_RENDER)); + } }*/ void CRender::OnFrame() { @@ -679,7 +679,9 @@ void CRender::rmNormal() CRender::CRender() : m_bFirstFrameAfterReset(false) { +#if defined(WINDOWS) // remove this after port r2_R_sun.cpp init_cacades(); +#endif } CRender::~CRender() {} @@ -1276,7 +1278,7 @@ HRESULT CRender::shader_compile( sprintf_s(name_comment, "// %s\n", name); const char** sources = xr_alloc(sources_len); #ifdef DEBUG - sources[0] = "#version 450\n#pragma optimize (off)\n"; + sources[0] = "#version 450\n#pragma optimize (off)\n"; #else sources[0] = "#version 450\n"; #endif diff --git a/src/Layers/xrRenderPC_GL/rgl.h b/src/Layers/xrRenderPC_GL/rgl.h index 384a96898c8..003f0173cad 100644 --- a/src/Layers/xrRenderPC_GL/rgl.h +++ b/src/Layers/xrRenderPC_GL/rgl.h @@ -91,7 +91,7 @@ class CRender : public D3DXRenderBase u32 dx10_msaa : 1; // DX10.0 path u32 dx10_msaa_hybrid : 1; // DX10.0 main path with DX10.1 A-test msaa allowed u32 dx10_msaa_opt : 1; // DX10.1 path - u32 dx10_gbuffer_opt : 1; // + u32 dx10_gbuffer_opt : 1; // u32 dx10_sm4_1 : 1; // DX10.1 path u32 dx10_msaa_alphatest : 2; // A-test mode u32 dx10_msaa_samples : 4; @@ -215,7 +215,9 @@ class CRender : public D3DXRenderBase void render_rain(); void render_sun_cascade(u32 cascade_ind); +#if defined(WINDOWS) // remove this after port r2_R_sun.cpp void init_cacades(); +#endif void render_sun_cascades(); ShaderElement* rimp_select_sh_static(dxRender_Visual* pVisual, float cdist_sq); @@ -307,7 +309,7 @@ class CRender : public D3DXRenderBase IRender_Sector* detectSector(const Fvector& P) override; IRender_Target* getTarget() override; - // Main + // Main void flush() override; void set_Object(IRenderable* O) override; void add_Occluder(Fbox2& bb_screenspace) override; // mask screen region as oclluded diff --git a/src/xrEngine/EngineAPI.cpp b/src/xrEngine/EngineAPI.cpp index 96b1ef64156..5c05f750db6 100644 --- a/src/xrEngine/EngineAPI.cpp +++ b/src/xrEngine/EngineAPI.cpp @@ -150,7 +150,7 @@ void CEngineAPI::InitializeRenderers() // XXX: Unloading disabled due to typeids invalidation /*if (GEnv.CurrentRenderer != 5) hRenderRGL->close(); - + if (GEnv.CurrentRenderer != 4) hRenderR4->close(); @@ -220,16 +220,26 @@ void CEngineAPI::CreateRendererList() if (!VidQualityToken.empty()) return; + hRenderRGL = XRay::LoadModule("xrRender_GL"); +#if defined(WINDOWS) hRenderR1 = XRay::LoadModule("xrRender_R1"); +#endif if (GEnv.isDedicatedServer) { +#if defined(WINDOWS) R_ASSERT2(hRenderR1->IsLoaded(), "Dedicated server needs xrRender_R1 to work"); VidQualityToken.emplace_back("renderer_r1", 0); +#elif defined(LINUX) + R_ASSERT2(hRenderRGL->IsLoaded(), "Dedicated server needs xrRender_GL to work"); + VidQualityToken.emplace_back("renderer_gl", 0); +#endif VidQualityToken.emplace_back(nullptr, -1); return; } + auto& modes = VidQualityToken; + #if defined(WINDOWS) // Hide "d3d10.dll not found" message box for XP SetErrorMode(SEM_FAILCRITICALERRORS); @@ -237,20 +247,16 @@ void CEngineAPI::CreateRendererList() hRenderR2 = XRay::LoadModule("xrRender_R2"); hRenderR3 = XRay::LoadModule("xrRender_R3"); hRenderR4 = XRay::LoadModule("xrRender_R4"); -#endif - hRenderRGL = XRay::LoadModule("xrRender_GL"); // Restore error handling SetErrorMode(0); - auto& modes = VidQualityToken; - if (hRenderR1->IsLoaded()) { modes.emplace_back("renderer_r1", 0); } -#if defined(WINDOWS) + if (hRenderR2->IsLoaded()) { modes.emplace_back("renderer_r2a", 1);