diff --git a/README.md b/README.md index c2df4a93d45..841e6f82ecd 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ X-Ray Engine 1.6 expansion [![Codacy Badge](https://api.codacy.com/project/badge ### Build Status: -|Platform|Build Status| -|--------|------| -| Linux (GCC)(Release)(x64/x86) |[![Build Status](https://api.travis-ci.org/q4a/xray-16.svg?branch=linux)](https://travis-ci.org/q4a/xray-16)| -| Windows (MSVC)(Debug/Mixed/Release)(x64/x86) |[![Build status](https://ci.appveyor.com/api/projects/status/beb4c2xtyru4galx/branch/linux?svg=true)](https://ci.appveyor.com/project/q4a/xray-16)| +|Platform|Build status: [xd_dev branch](https://github.com/OpenXRay/xray-16)|Build status: [linux branch](https://github.com/q4a/xray-16)| +|--------|--------|--------| +| Linux (GCC)(Release)(x64/x86) |[![Build Status](https://api.travis-ci.org/OpenXRay/xray-16.svg?branch=xd_dev)](https://travis-ci.org/OpenXRay/xray-16)|[![Build Status](https://api.travis-ci.org/q4a/xray-16.svg?branch=linux)](https://travis-ci.org/q4a/xray-16)| +| Windows (MSVC)(Debug/Mixed/Release)(x64/x86) |[![Build status](https://ci.appveyor.com/api/projects/status/16mp39v0d7fts6yf?svg=true)](https://ci.appveyor.com/project/OpenXRay/xray-16)|[![Build status](https://ci.appveyor.com/api/projects/status/beb4c2xtyru4galx/branch/linux?svg=true)](https://ci.appveyor.com/project/q4a/xray-16)| This repository contains X-Ray Engine sources based on version 1.6.02. The original engine is used in S.T.A.L.K.E.R. Call of Pripyat game released by GSC Game World. diff --git a/appveyor.yml b/appveyor.yml index f857df4dd9b..d644682fd13 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -68,9 +68,9 @@ deploy: release: OpenXRay (build $(appveyor_build_version)) description: $(APPVEYOR_REPO_COMMIT_MESSAGE) auth_token: - secure: EwMP7ob9Q7cE1EvW72ybDSYjbD44IQRDFhbCQcdOuBSSz9PbO/Pq2ZUNuMqPuvsV + secure: kGVniXDR926BfVcA97y25BzALbijvgboBsozZzY9yc8RPz15Q4YG474h7vl14/J1 artifact: OpenXRay.Dx86.7z, OpenXRay.Dx64.7z, OpenXRay.Mx86.7z, OpenXRay.Mx64.7z, OpenXRay.Rx86.7z, OpenXRay.Rx64.7z, Symbols.Dx86.7z, Symbols.Dx64.7z, Symbols.Mx86.7z, Symbols.Mx64.7z, Symbols.Rx86.7z, Symbols.Rx64.7z draft: true - force_update: true \ No newline at end of file + force_update: true diff --git a/res/gamedata/shaders/r3/editor.vs b/res/gamedata/shaders/r3/editor.vs new file mode 100644 index 00000000000..b621d7dbac8 --- /dev/null +++ b/res/gamedata/shaders/r3/editor.vs @@ -0,0 +1,24 @@ +#include "common.h" + +struct vf +{ + float4 C : COLOR0; + float4 P : POSITION; +}; + +struct v2p +{ + float4 C : COLOR0; + float4 P : SV_Position; +}; + +uniform float4 tfactor; +v2p main (vf i) +{ + v2p o; + + o.P = mul (m_WVP, i.P); // xform, input in world coords + o.C = tfactor*unpack_D3DCOLOR(i.C); + + return o; +} diff --git a/src/Layers/xrRender/Blender_Particle.cpp b/src/Layers/xrRender/Blender_Particle.cpp index 8cfa9b03fa9..eff230c81b4 100644 --- a/src/Layers/xrRender/Blender_Particle.cpp +++ b/src/Layers/xrRender/Blender_Particle.cpp @@ -201,7 +201,7 @@ void CBlender_Particle::Compile(CBlender_Compile& C) C.r_dx10Texture("s_base", C.L_textures[0]); u32 hSampler = C.r_dx10Sampler("smp_base"); if (oClamp.value && (hSampler != (u32)-1)) - C.i_dx10Address(hSampler, D3DTADDRESS_CLAMP); + C.i_Address(hSampler, D3DTADDRESS_CLAMP); // Igor: soft particles // C.r_Sampler ("s_position", "$user$position"); C.r_dx10Texture("s_position", "$user$position"); @@ -243,7 +243,7 @@ void CBlender_Particle::Compile(CBlender_Compile& C) C.r_dx10Texture("s_base", C.L_textures[0]); u32 hSampler = C.r_dx10Sampler("smp_base"); if (oClamp.value && (hSampler != (u32)-1)) - C.i_dx10Address(hSampler, D3DTADDRESS_CLAMP); + C.i_Address(hSampler, D3DTADDRESS_CLAMP); // Igor: soft particles //C.r_Sampler ("s_position", "$user$position"); C.r_dx10Texture("s_position", "$user$position"); diff --git a/src/Layers/xrRender/Blender_Recorder_R2.cpp b/src/Layers/xrRender/Blender_Recorder_R2.cpp index f0564616523..1d0713badb6 100644 --- a/src/Layers/xrRender/Blender_Recorder_R2.cpp +++ b/src/Layers/xrRender/Blender_Recorder_R2.cpp @@ -102,6 +102,8 @@ void CBlender_Compile::i_Projective(u32 s, bool b) else RS.SetTSS(s, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); } +#endif // USE_DX10 + void CBlender_Compile::i_Address(u32 s, u32 address) { RS.SetSAMP(s, D3DSAMP_ADDRESSU, address); @@ -118,6 +120,8 @@ void CBlender_Compile::i_Filter(u32 s, u32 _min, u32 _mip, u32 _mag) i_Filter_Mip(s, _mip); i_Filter_Mag(s, _mag); } + +#if !defined(USE_DX10) && !defined(USE_DX11) u32 CBlender_Compile::r_Sampler( LPCSTR _name, LPCSTR texture, bool b_ps1x_ProjectiveDivide, u32 address, u32 fmin, u32 fmip, u32 fmag) { @@ -185,4 +189,4 @@ void CBlender_Compile::r_End() #endif SH->passes.push_back(RImplementation.Resources->_CreatePass(dest)); } -#endif // USE_DX10 +#endif // USE_DX10 diff --git a/src/Layers/xrRender/Blender_Screen_SET.cpp b/src/Layers/xrRender/Blender_Screen_SET.cpp index e4f2c752d23..f3ea4b46981 100644 --- a/src/Layers/xrRender/Blender_Screen_SET.cpp +++ b/src/Layers/xrRender/Blender_Screen_SET.cpp @@ -129,7 +129,7 @@ void CBlender_Screen_SET::Compile(CBlender_Compile& C) C.r_dx10Texture("s_base", C.L_textures[0]); int iSmp = C.r_dx10Sampler("smp_base"); if (oClamp.value) - C.i_dx10Address(iSmp, D3DTADDRESS_CLAMP); + C.i_Address(iSmp, D3DTADDRESS_CLAMP); } else { @@ -165,7 +165,7 @@ void CBlender_Screen_SET::Compile(CBlender_Compile& C) C.r_dx10Texture("s_base", C.L_textures[0]); int iSmp = C.r_dx10Sampler("smp_base"); if ((oClamp.value) && (iSmp != u32(-1))) - C.i_dx10Address(iSmp, D3DTADDRESS_CLAMP); + C.i_Address(iSmp, D3DTADDRESS_CLAMP); } C.PassSET_ZB(oZTest.value, oZWrite.value); diff --git a/src/Layers/xrRender/FVisual.cpp b/src/Layers/xrRender/FVisual.cpp index 454b282cdf4..4d4473831ce 100644 --- a/src/Layers/xrRender/FVisual.cpp +++ b/src/Layers/xrRender/FVisual.cpp @@ -60,9 +60,12 @@ void Fvisual::Load(const char* N, IReader* data, u32 dwFlags) p_rm_Indices->AddRef(); #endif #endif -#if (RENDER == R_R2) || (RENDER == R_R3) || (RENDER == R_R4) || (RENDER == R_GL) // check for fast-vertices +#if RENDER == R_R1 + if (data->find_chunk(OGF_FASTPATH) && ps_r1_force_geomx) +#else if (data->find_chunk(OGF_FASTPATH)) +#endif { destructor geomdef(data->open_chunk(OGF_FASTPATH)); destructor def(geomdef().open_chunk(OGF_GCONTAINER)); @@ -97,7 +100,6 @@ void Fvisual::Load(const char* N, IReader* data, u32 dwFlags) // geom m_fast->rm_geom.create(fmt, m_fast->p_rm_Vertices, m_fast->p_rm_Indices); } -#endif // (RENDER==R_R2) || (RENDER==R_R3) || (RENDER==R_R4) || (RENDER==R_GL) } // read vertices @@ -222,8 +224,11 @@ void Fvisual::Load(const char* N, IReader* data, u32 dwFlags) void Fvisual::Render(float) { -#if (RENDER == R_R2) || (RENDER == R_R3) || (RENDER == R_R4) || (RENDER==R_GL) - if (m_fast && RImplementation.phase == CRender::PHASE_SMAP && !RCache.is_TessEnabled()) +#if RENDER == R_R1 + if (m_fast && ps_r1_force_geomx) +#else + if (m_fast && (ps_r1_force_geomx || RImplementation.phase == CRender::PHASE_SMAP && !RCache.is_TessEnabled())) +#endif { RCache.set_Geometry(m_fast->rm_geom); RCache.Render(D3DPT_TRIANGLELIST, m_fast->vBase, 0, m_fast->vCount, m_fast->iBase, m_fast->dwPrimitives); @@ -235,11 +240,6 @@ void Fvisual::Render(float) RCache.Render(D3DPT_TRIANGLELIST, vBase, 0, vCount, iBase, dwPrimitives); RCache.stat.r.s_static.add(vCount); } -#else // (RENDER==R_R2) || (RENDER==R_R3) || (RENDER==R_R4) || (RENDER==R_GL) - RCache.set_Geometry(rm_geom); - RCache.Render(D3DPT_TRIANGLELIST, vBase, 0, vCount, iBase, dwPrimitives); - RCache.stat.r.s_static.add(vCount); -#endif // (RENDER==R_R2) || (RENDER==R_R3) || (RENDER==R_R4) || (RENDER==R_GL) } #define PCOPY(a) a = pFrom->a diff --git a/src/Layers/xrRender/HW.h b/src/Layers/xrRender/HW.h index 6d0b495988a..2f983441b41 100644 --- a/src/Layers/xrRender/HW.h +++ b/src/Layers/xrRender/HW.h @@ -38,21 +38,20 @@ class CHW BOOL support(D3DFORMAT fmt, DWORD type, DWORD usage); #endif // !USE_OGL -#ifdef DEBUG -#if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL) - void Validate(void){}; -#else // USE_DX10 - void Validate(void) +#if defined(DEBUG) && defined(USE_DX9) + void Validate() { VERIFY(pDevice); VERIFY(pD3D); }; -#endif // USE_DX10 #else - void Validate(void){}; + void Validate() {} #endif -// Variables section + // Variables section +public: + CHWCaps Caps; + #if defined(USE_OGL) CHW* pDevice; CHW* pContext; @@ -63,62 +62,40 @@ class CHW GLuint pFB; GLuint pCFB; - CHWCaps Caps; - SDL_Window* m_hWnd; HDC m_hDC; SDL_GLContext m_hRC; -#elif defined(USE_DX11) -public: - IDXGIFactory1* m_pFactory = nullptr; - IDXGIAdapter1* m_pAdapter = nullptr; // pD3D equivalent - ID3D11Device* pDevice = nullptr; // combine with DX9 pDevice via typedef - ID3D11DeviceContext* pContext = nullptr; // combine with DX9 pDevice via typedef - IDXGISwapChain* m_pSwapChain = nullptr; - ID3D11RenderTargetView* pBaseRT = nullptr; // combine with DX9 pBaseRT via typedef - ID3D11DepthStencilView* pBaseZB = nullptr; - - CHWCaps Caps; +#else // General DirectX + ID3DDevice* pDevice = nullptr; // render device + ID3DRenderTargetView* pBaseRT = nullptr; // base render target + ID3DDepthStencilView* pBaseZB = nullptr; // base depth-stencil buffer D3D_DRIVER_TYPE m_DriverType; - DXGI_SWAP_CHAIN_DESC m_ChainDesc; // DevPP equivalent - D3D_FEATURE_LEVEL FeatureLevel; -#elif defined(USE_DX10) -public: +#ifndef USE_DX9 IDXGIFactory1* m_pFactory = nullptr; - IDXGIAdapter1* m_pAdapter = nullptr; // pD3D equivalent - ID3D10Device1* pDevice1 = nullptr; // combine with DX9 pDevice via typedef - ID3D10Device* pDevice = nullptr; // combine with DX9 pDevice via typedef - ID3D10Device1* pContext1 = nullptr; // combine with DX9 pDevice via typedef - ID3D10Device* pContext = nullptr; // combine with DX9 pDevice via typedef + IDXGIAdapter1* m_pAdapter = nullptr; // pD3D equivalent + ID3DDeviceContext* pContext = nullptr; IDXGISwapChain* m_pSwapChain = nullptr; - ID3D10RenderTargetView* pBaseRT = nullptr; // combine with DX9 pBaseRT via typedef - ID3D10DepthStencilView* pBaseZB = nullptr; - - CHWCaps Caps; - - D3D10_DRIVER_TYPE m_DriverType; - DXGI_SWAP_CHAIN_DESC m_ChainDesc; // DevPP equivalent + DXGI_SWAP_CHAIN_DESC m_ChainDesc; // DevPP equivalent D3D_FEATURE_LEVEL FeatureLevel; -#else -private: +#if defined(USE_DX10) + ID3D10Device1* pDevice1 = nullptr; + ID3D10Device1* pContext1 = nullptr; +#endif +#else // USE_DX9 #ifdef DEBUG IDirect3DStateBlock9* dwDebugSB = nullptr; #endif +private: XRay::Module hD3D = nullptr; public: IDirect3D9* pD3D = nullptr; // D3D - IDirect3DDevice9* pDevice = nullptr; // render device - IDirect3DSurface9* pBaseRT = nullptr; - IDirect3DSurface9* pBaseZB = nullptr; - - CHWCaps Caps; UINT DevAdapter; - D3DDEVTYPE m_DriverType; D3DPRESENT_PARAMETERS DevPP; -#endif // USE_DX10 +#endif // USE_DX9 +#endif // USE_OGL #if !defined(_MAYA_EXPORT) && !defined(USE_OGL) stats_manager stats_manager; @@ -128,7 +105,7 @@ class CHW void UpdateViews(); #endif #if defined(USE_DX10) || defined(USE_DX11) - bool CheckFormatSupport(DXGI_FORMAT format, D3D_FORMAT_SUPPORT feature) const; + bool CheckFormatSupport(DXGI_FORMAT format, UINT feature) const; DXGI_FORMAT SelectFormat(D3D_FORMAT_SUPPORT feature, const DXGI_FORMAT formats[], size_t count) const; virtual void OnAppActivate(); virtual void OnAppDeactivate(); diff --git a/src/Layers/xrRender/LightTrack.cpp b/src/Layers/xrRender/LightTrack.cpp index f8a4ac9d9c6..4dc18e18569 100644 --- a/src/Layers/xrRender/LightTrack.cpp +++ b/src/Layers/xrRender/LightTrack.cpp @@ -365,11 +365,8 @@ void CROS_impl::update_smooth(IRenderable* O) void CROS_impl::calc_sun_value(Fvector& position, IGameObject* _object) { -#if RENDER == R_R1 - light* sun = (light*)RImplementation.L_DB->sun._get(); -#else light* sun = (light*)RImplementation.Lights.sun._get(); -#endif + if (MODE & IRender_ObjectSpecific::TRACE_SUN) { if (--result_sun < 0) @@ -530,7 +527,7 @@ void CROS_impl::prepare_lights(Fvector& position, IRenderable* O) } #if RENDER == R_R1 - light* sun = (light*)RImplementation.L_DB->sun._get(); + light* sun = (light*)RImplementation.Lights.sun._get(); // Sun float E = sun_smooth * sun->color.intensity(); diff --git a/src/Layers/xrRender/ResourceManager_Resources.cpp b/src/Layers/xrRender/ResourceManager_Resources.cpp index 7ead45eab14..f4b43cd6dc0 100644 --- a/src/Layers/xrRender/ResourceManager_Resources.cpp +++ b/src/Layers/xrRender/ResourceManager_Resources.cpp @@ -286,7 +286,7 @@ void CResourceManager::DBG_VerifyGeoms() */ } -SGeometry* CResourceManager::CreateGeom(D3DVERTEXELEMENT9* decl, IDirect3DVertexBuffer9* vb, IDirect3DIndexBuffer9* ib) +SGeometry* CResourceManager::CreateGeom(D3DVERTEXELEMENT9* decl, ID3DVertexBuffer* vb, ID3DIndexBuffer* ib) { R_ASSERT(decl && vb); @@ -310,7 +310,7 @@ SGeometry* CResourceManager::CreateGeom(D3DVERTEXELEMENT9* decl, IDirect3DVertex v_geoms.push_back(Geom); return Geom; } -SGeometry* CResourceManager::CreateGeom(u32 FVF, IDirect3DVertexBuffer9* vb, IDirect3DIndexBuffer9* ib) +SGeometry* CResourceManager::CreateGeom(u32 FVF, ID3DVertexBuffer* vb, ID3DIndexBuffer* ib) { D3DVERTEXELEMENT9 dcl[MAX_FVF_DECL_SIZE]; CHK_DX(D3DXDeclaratorFromFVF(FVF, dcl)); diff --git a/src/Layers/xrRender/ResourceManager_Scripting.cpp b/src/Layers/xrRender/ResourceManager_Scripting.cpp index fc86d51d6ab..42c7592ea5c 100644 --- a/src/Layers/xrRender/ResourceManager_Scripting.cpp +++ b/src/Layers/xrRender/ResourceManager_Scripting.cpp @@ -231,56 +231,67 @@ class adopt_blend // export void CResourceManager::LS_Load() { + // clang-format off auto exporterFunc = [](lua_State* luaState) { module(luaState) [ class_("_sampler") .def(constructor()) - .def("texture", &adopt_sampler::_texture, return_reference_to<1>()) - .def("project", &adopt_sampler::_projective, return_reference_to<1>()) - .def("clamp", &adopt_sampler::_clamp, return_reference_to<1>()) - .def("wrap", &adopt_sampler::_wrap, return_reference_to<1>()) - .def("mirror", &adopt_sampler::_mirror, return_reference_to<1>()) + .def("texture", &adopt_sampler::_texture, return_reference_to<1>()) + .def("project", &adopt_sampler::_projective, return_reference_to<1>()) + .def("clamp", &adopt_sampler::_clamp, return_reference_to<1>()) + .def("wrap", &adopt_sampler::_wrap, return_reference_to<1>()) + .def("mirror", &adopt_sampler::_mirror, return_reference_to<1>()) .def("f_anisotropic", &adopt_sampler::_f_anisotropic, return_reference_to<1>()) - .def("f_trilinear", &adopt_sampler::_f_trilinear, return_reference_to<1>()) - .def("f_bilinear", &adopt_sampler::_f_bilinear, return_reference_to<1>()) - .def("f_linear", &adopt_sampler::_f_linear, return_reference_to<1>()) - .def("f_none", &adopt_sampler::_f_none, return_reference_to<1>()) - .def("fmin_none", &adopt_sampler::_fmin_none, return_reference_to<1>()) - .def("fmin_point", &adopt_sampler::_fmin_point, return_reference_to<1>()) - .def("fmin_linear", &adopt_sampler::_fmin_linear, return_reference_to<1>()) - .def("fmin_aniso", &adopt_sampler::_fmin_aniso, return_reference_to<1>()) - .def("fmip_none", &adopt_sampler::_fmip_none, return_reference_to<1>()) - .def("fmip_point", &adopt_sampler::_fmip_point, return_reference_to<1>()) - .def("fmip_linear", &adopt_sampler::_fmip_linear, return_reference_to<1>()) - .def("fmag_none", &adopt_sampler::_fmag_none, return_reference_to<1>()) - .def("fmag_point", &adopt_sampler::_fmag_point, return_reference_to<1>()) - .def("fmag_linear", &adopt_sampler::_fmag_linear, return_reference_to<1>()), + .def("f_trilinear", &adopt_sampler::_f_trilinear, return_reference_to<1>()) + .def("f_bilinear", &adopt_sampler::_f_bilinear, return_reference_to<1>()) + .def("f_linear", &adopt_sampler::_f_linear, return_reference_to<1>()) + .def("f_none", &adopt_sampler::_f_none, return_reference_to<1>()) + .def("fmin_none", &adopt_sampler::_fmin_none, return_reference_to<1>()) + .def("fmin_point", &adopt_sampler::_fmin_point, return_reference_to<1>()) + .def("fmin_linear", &adopt_sampler::_fmin_linear, return_reference_to<1>()) + .def("fmin_aniso", &adopt_sampler::_fmin_aniso, return_reference_to<1>()) + .def("fmip_none", &adopt_sampler::_fmip_none, return_reference_to<1>()) + .def("fmip_point", &adopt_sampler::_fmip_point, return_reference_to<1>()) + .def("fmip_linear", &adopt_sampler::_fmip_linear, return_reference_to<1>()) + .def("fmag_none", &adopt_sampler::_fmag_none, return_reference_to<1>()) + .def("fmag_point", &adopt_sampler::_fmag_point, return_reference_to<1>()) + .def("fmag_linear", &adopt_sampler::_fmag_linear, return_reference_to<1>()), class_("_compiler") .def(constructor()) - .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) - .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) - .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) - .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) - .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) - .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) - .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) - .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) - .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) + .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) + .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) + .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) + .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) + .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) + .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) + .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) + .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) + .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) .def("color_write_enable", &adopt_compiler::_color_write_enable, return_reference_to<1>()) - .def("sampler", &adopt_compiler::_sampler), // returns sampler-object + .def("sampler", &adopt_compiler::_sampler), // returns sampler-object - class_("blend").enum_("blend")[value("zero", int(D3DBLEND_ZERO)), - value("one", int(D3DBLEND_ONE)), value("srccolor", int(D3DBLEND_SRCCOLOR)), - value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), value("srcalpha", int(D3DBLEND_SRCALPHA)), - value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), value("destalpha", int(D3DBLEND_DESTALPHA)), - value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), value("destcolor", int(D3DBLEND_DESTCOLOR)), - value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), value("srcalphasat", int(D3DBLEND_SRCALPHASAT)) - ] + class_("blend") + .enum_("blend") + [ + value("zero", int(D3DBLEND_ZERO)), + value("one", int(D3DBLEND_ONE)), + value("srccolor", int(D3DBLEND_SRCCOLOR)), + value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), + value("srcalpha", int(D3DBLEND_SRCALPHA)), + value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), + value("destalpha", int(D3DBLEND_DESTALPHA)), + value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), + value("destcolor", int(D3DBLEND_DESTCOLOR)), + value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), + value("srcalphasat", int(D3DBLEND_SRCALPHASAT)) + ] ]; }; + // clang-format on + ScriptEngine.init(exporterFunc, false); // load shaders const char* shaderPath = RImplementation.getShaderPath(); diff --git a/src/Layers/xrRender/SH_RT.cpp b/src/Layers/xrRender/SH_RT.cpp index 3383882c2a0..8fb6357f834 100644 --- a/src/Layers/xrRender/SH_RT.cpp +++ b/src/Layers/xrRender/SH_RT.cpp @@ -80,7 +80,7 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 /*SampleCount*/) if (FAILED(_hr) || (0 == pSurface)) return; -// OK + // OK #ifdef DEBUG Msg("* created RT(%s), %dx%d", Name, w, h); #endif // DEBUG diff --git a/src/Layers/xrRender/blenders/Blender_Recorder.h b/src/Layers/xrRender/blenders/Blender_Recorder.h index 44c612bad35..0d5fe5f9af3 100644 --- a/src/Layers/xrRender/blenders/Blender_Recorder.h +++ b/src/Layers/xrRender/blenders/Blender_Recorder.h @@ -118,26 +118,21 @@ class CBlender_Compile void Stage_Constant(LPCSTR name); void StageEnd(); -// R1/R2-compiler [programmable] -#if defined(USE_DX10) || defined(USE_DX11) - void i_dx10Address(u32 s, u32 address); - void i_dx10Filter_Min(u32 s, u32 f); - void i_dx10Filter_Mip(u32 s, u32 f); - void i_dx10Filter_Mag(u32 s, u32 f); - void i_dx10FilterAnizo(u32 s, BOOL value); - void i_dx10Filter(u32 s, u32 _min, u32 _mip, u32 _mag); - void i_dx10BorderColor(u32 s, u32 color); -#else // USE_DX10 + // R1/R2-compiler [programmable] +#if defined(USE_DX9) || defined(USE_OGL) u32 i_Sampler(LPCSTR name); void i_Texture(u32 s, LPCSTR name); void i_Projective(u32 s, bool b); +#endif void i_Address(u32 s, u32 address); void i_Filter_Min(u32 s, u32 f); void i_Filter_Mip(u32 s, u32 f); void i_Filter_Mag(u32 s, u32 f); +#if defined(USE_DX10) || defined(USE_DX11) + void i_dx10FilterAnizo(u32 s, BOOL value); +#endif void i_Filter(u32 s, u32 _min, u32 _mip, u32 _mag); void i_BorderColor(u32 s, u32 color); -#endif // USE_DX10 // R1/R2-compiler [programmable] - templates void r_Pass(LPCSTR vs, LPCSTR ps, bool bFog, BOOL bZtest = TRUE, BOOL bZwrite = TRUE, BOOL bABlend = FALSE, diff --git a/src/Layers/xrRender/r__sector.cpp b/src/Layers/xrRender/r__sector.cpp index 206ef9a7936..a732f06b21d 100644 --- a/src/Layers/xrRender/r__sector.cpp +++ b/src/Layers/xrRender/r__sector.cpp @@ -34,41 +34,47 @@ void CPortal::OnRender() VERIFY(poly.size()); // draw rect static xr_vector V; - V.resize(poly.size() + 2); - Fvector C = {0, 0, 0}; - for (u32 k = 0; k < poly.size(); k++) + V.resize(poly.size()*3); + Fvector vCenter = { 0.0f, 0.0f, 0.0f }; + static u32 portalColor = 0x800000FF; + for (u32 k = 0; k < poly.size(); ++k) { - C.add(poly[k]); - V[k + 1].set(poly[k], 0x800000FF); + vCenter.add(poly[k]); + V[k * 3 + 1].set(poly[k], portalColor); + + if (k + 1 == poly.size()) + V[k * 3 + 2].set(poly[0], portalColor); + else + V[k * 3 + 2].set(poly[k + 1], portalColor); } - V.back().set(poly[0], 0x800000FF); - C.div((float)poly.size()); - V[0].set(C, 0x800000FF); + + vCenter.div((float)poly.size()); + + for (u32 k = 0; k < poly.size(); ++k) + V[k * 3].set(vCenter, portalColor); RCache.set_xform_world(Fidentity); // draw solid RCache.set_Shader(RImplementation.m_SelectionShader); - RCache.dbg_Draw(D3DPT_TRIANGLEFAN, &*V.begin(), V.size() - 2); + RCache.dbg_Draw(D3DPT_TRIANGLELIST, &*V.begin(), V.size() / 3); // draw wire + V.resize(poly.size()+1); // SkyLoader: change vertex array for wire + for (u32 k = 0; k < poly.size(); ++k) + V[k].set(poly[k], portalColor); + V.back().set(poly[0], portalColor); + if (bDebug) - { RImplementation.rmNear(); - } else - { Device.SetNearer(TRUE); - } + RCache.set_Shader(RImplementation.m_WireShader); - RCache.dbg_Draw(D3DPT_LINESTRIP, &*(V.begin() + 1), V.size() - 2); + RCache.dbg_Draw(D3DPT_LINESTRIP, &*V.begin(), V.size() - 1); if (bDebug) - { RImplementation.rmNormal(); - } else - { Device.SetNearer(FALSE); - } } } #endif diff --git a/src/Layers/xrRender/uber_deffer.cpp b/src/Layers/xrRender/uber_deffer.cpp index 2dc7e3528ac..63f7d77608a 100644 --- a/src/Layers/xrRender/uber_deffer.cpp +++ b/src/Layers/xrRender/uber_deffer.cpp @@ -148,7 +148,7 @@ void uber_deffer(CBlender_Compile& C, bool hq, LPCSTR _vspec, LPCSTR _pspec, BOO u32 stage = C.r_dx10Sampler("smp_bump_ds"); if (stage != -1) { - C.i_dx10Address(stage, D3DTADDRESS_WRAP); + C.i_Address(stage, D3DTADDRESS_WRAP); C.i_dx10FilterAnizo(stage, TRUE); } if (ps_r2_ls_flags_ext.test(R2FLAGEXT_WIREFRAME)) @@ -341,7 +341,7 @@ void uber_shadow(CBlender_Compile& C, LPCSTR _vspec) u32 stage = C.r_dx10Sampler("smp_bump_ds"); if (stage != -1) { - C.i_dx10Address(stage, D3DTADDRESS_WRAP); + C.i_Address(stage, D3DTADDRESS_WRAP); C.i_dx10FilterAnizo(stage, TRUE); } if (ps_r2_ls_flags_ext.test(R2FLAGEXT_WIREFRAME)) diff --git a/src/Layers/xrRender/xrD3DDefs.h b/src/Layers/xrRender/xrD3DDefs.h index b64cb44169d..b0306f8d856 100644 --- a/src/Layers/xrRender/xrD3DDefs.h +++ b/src/Layers/xrRender/xrD3DDefs.h @@ -37,12 +37,14 @@ typedef IDirect3DVertexShader9 ID3DVertexShader; typedef IDirect3DPixelShader9 ID3DPixelShader; typedef ID3DXBuffer ID3DBlob; typedef D3DXMACRO D3D_SHADER_MACRO; +typedef D3DDEVTYPE D3D_DRIVER_TYPE; typedef IDirect3DQuery9 ID3DQuery; typedef D3DVIEWPORT9 D3D_VIEWPORT; typedef ID3DXInclude ID3DInclude; typedef IDirect3DTexture9 ID3DTexture2D; typedef IDirect3DSurface9 ID3DRenderTargetView; typedef IDirect3DSurface9 ID3DDepthStencilView; +typedef IDirect3DDevice9 ID3DDevice; typedef IDirect3DBaseTexture9 ID3DBaseTexture; typedef D3DSURFACE_DESC D3D_TEXTURE2D_DESC; typedef IDirect3DVertexBuffer9 ID3DVertexBuffer; diff --git a/src/Layers/xrRender/xrRender_console.cpp b/src/Layers/xrRender/xrRender_console.cpp index 81da9ca1c71..a502338f33a 100644 --- a/src/Layers/xrRender/xrRender_console.cpp +++ b/src/Layers/xrRender/xrRender_console.cpp @@ -116,6 +116,7 @@ float ps_r1_lmodel_lerp = 0.1f; float ps_r1_dlights_clip = 40.f; float ps_r1_pps_u = 0.f; float ps_r1_pps_v = 0.f; +int ps_r1_force_geomx = 0; // R1-specific int ps_r1_GlowsPerFrame = 16; // r1-only @@ -752,6 +753,7 @@ void xrRender_initconsole() CMD4(CCC_Float, "r1_dlights_clip", &ps_r1_dlights_clip, 10.f, 150.f); CMD4(CCC_Float, "r1_pps_u", &ps_r1_pps_u, -1.f, +1.f); CMD4(CCC_Float, "r1_pps_v", &ps_r1_pps_v, -1.f, +1.f); + CMD4(CCC_Integer, "r1_force_geomx", &ps_r1_force_geomx, 0, 1); // R1-specific CMD4(CCC_Integer, "r1_glows_per_frame", &ps_r1_GlowsPerFrame, 2, 32); diff --git a/src/Layers/xrRender/xrRender_console.h b/src/Layers/xrRender/xrRender_console.h index ce5d7e3c43f..972a4671aad 100644 --- a/src/Layers/xrRender/xrRender_console.h +++ b/src/Layers/xrRender/xrRender_console.h @@ -63,6 +63,7 @@ extern ECORE_API float ps_r1_lmodel_lerp; extern ECORE_API float ps_r1_dlights_clip; extern ECORE_API float ps_r1_pps_u; extern ECORE_API float ps_r1_pps_v; +extern ECORE_API int ps_r1_force_geomx; // R1-specific extern ECORE_API int ps_r1_GlowsPerFrame; // r1-only diff --git a/src/Layers/xrRenderDX10/3DFluid/dx103DFluidBlenders.cpp b/src/Layers/xrRenderDX10/3DFluid/dx103DFluidBlenders.cpp index 855a69a22f1..0948cad758f 100644 --- a/src/Layers/xrRenderDX10/3DFluid/dx103DFluidBlenders.cpp +++ b/src/Layers/xrRenderDX10/3DFluid/dx103DFluidBlenders.cpp @@ -152,29 +152,29 @@ void SetupSamplers(CBlender_Compile& C) int smp = C.r_dx10Sampler("samPointClamp"); if (smp != u32(-1)) { - C.i_dx10Address(smp, D3DTADDRESS_CLAMP); - C.i_dx10Filter(smp, D3DTEXF_POINT, D3DTEXF_POINT, D3DTEXF_POINT); + C.i_Address(smp, D3DTADDRESS_CLAMP); + C.i_Filter(smp, D3DTEXF_POINT, D3DTEXF_POINT, D3DTEXF_POINT); } smp = C.r_dx10Sampler("samLinear"); if (smp != u32(-1)) { - C.i_dx10Address(smp, D3DTADDRESS_CLAMP); - C.i_dx10Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + C.i_Address(smp, D3DTADDRESS_CLAMP); + C.i_Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); } smp = C.r_dx10Sampler("samLinearClamp"); if (smp != u32(-1)) { - C.i_dx10Address(smp, D3DTADDRESS_CLAMP); - C.i_dx10Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + C.i_Address(smp, D3DTADDRESS_CLAMP); + C.i_Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); } smp = C.r_dx10Sampler("samRepeat"); if (smp != u32(-1)) { - C.i_dx10Address(smp, D3DTADDRESS_WRAP); - C.i_dx10Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + C.i_Address(smp, D3DTADDRESS_WRAP); + C.i_Filter(smp, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); } } void SetupTextures(CBlender_Compile& C) diff --git a/src/Layers/xrRenderDX10/Blender_Recorder_R3.cpp b/src/Layers/xrRenderDX10/Blender_Recorder_R3.cpp index c0624d03cc4..4b3c01b3e8b 100644 --- a/src/Layers/xrRenderDX10/Blender_Recorder_R3.cpp +++ b/src/Layers/xrRenderDX10/Blender_Recorder_R3.cpp @@ -52,51 +52,12 @@ void CBlender_Compile::r_dx10Texture(LPCSTR ResourceName, LPCSTR texture) passTextures.push_back(std::make_pair(stage, ref_texture(RImplementation.Resources->_CreateTexture(TexName)))); } -void CBlender_Compile::i_dx10Address(u32 s, u32 address) -{ - // VERIFY(s!=u32(-1)); - if (s == u32(-1)) - { - Msg("s != u32(-1)"); - } - RS.SetSAMP(s, D3DSAMP_ADDRESSU, address); - RS.SetSAMP(s, D3DSAMP_ADDRESSV, address); - RS.SetSAMP(s, D3DSAMP_ADDRESSW, address); -} - -void CBlender_Compile::i_dx10BorderColor(u32 s, u32 color) { RS.SetSAMP(s, D3DSAMP_BORDERCOLOR, color); } -void CBlender_Compile::i_dx10Filter_Min(u32 s, u32 f) -{ - VERIFY(s != u32(-1)); - RS.SetSAMP(s, D3DSAMP_MINFILTER, f); -} - -void CBlender_Compile::i_dx10Filter_Mip(u32 s, u32 f) -{ - VERIFY(s != u32(-1)); - RS.SetSAMP(s, D3DSAMP_MIPFILTER, f); -} - -void CBlender_Compile::i_dx10Filter_Mag(u32 s, u32 f) -{ - VERIFY(s != u32(-1)); - RS.SetSAMP(s, D3DSAMP_MAGFILTER, f); -} - void CBlender_Compile::i_dx10FilterAnizo(u32 s, BOOL value) { VERIFY(s != u32(-1)); RS.SetSAMP(s, XRDX10SAMP_ANISOTROPICFILTER, value); } -void CBlender_Compile::i_dx10Filter(u32 s, u32 _min, u32 _mip, u32 _mag) -{ - VERIFY(s != u32(-1)); - i_dx10Filter_Min(s, _min); - i_dx10Filter_Mip(s, _mip); - i_dx10Filter_Mag(s, _mag); -} - u32 CBlender_Compile::r_dx10Sampler(LPCSTR ResourceName) { // TEST @@ -121,52 +82,52 @@ u32 CBlender_Compile::r_dx10Sampler(LPCSTR ResourceName) // Use D3DTADDRESS_CLAMP, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT if (0 == xr_strcmp(ResourceName, "smp_nofilter")) { - i_dx10Address(stage, D3DTADDRESS_CLAMP); - i_dx10Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); + i_Address(stage, D3DTADDRESS_CLAMP); + i_Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); } // Use D3DTADDRESS_CLAMP, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_rtlinear")) { - i_dx10Address(stage, D3DTADDRESS_CLAMP); - i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + i_Address(stage, D3DTADDRESS_CLAMP); + i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); } // Use D3DTADDRESS_WRAP, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_linear")) { - i_dx10Address(stage, D3DTADDRESS_WRAP); - i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + i_Address(stage, D3DTADDRESS_WRAP); + i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); } // Use D3DTADDRESS_WRAP, D3DTEXF_ANISOTROPIC, D3DTEXF_LINEAR, D3DTEXF_ANISOTROPIC if (0 == xr_strcmp(ResourceName, "smp_base")) { - i_dx10Address(stage, D3DTADDRESS_WRAP); + i_Address(stage, D3DTADDRESS_WRAP); i_dx10FilterAnizo(stage, TRUE); - // i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + // i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); } // Use D3DTADDRESS_CLAMP, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_material")) { - i_dx10Address(stage, D3DTADDRESS_CLAMP); - i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + i_Address(stage, D3DTADDRESS_CLAMP); + i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); RS.SetSAMP(stage, D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP); } if (0 == xr_strcmp(ResourceName, "smp_smap")) { - i_dx10Address(stage, D3DTADDRESS_CLAMP); - i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + i_Address(stage, D3DTADDRESS_CLAMP); + i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); RS.SetSAMP(stage, XRDX10SAMP_COMPARISONFILTER, TRUE); RS.SetSAMP(stage, XRDX10SAMP_COMPARISONFUNC, (u32)D3D_COMPARISON_LESS_EQUAL); } if (0 == xr_strcmp(ResourceName, "smp_jitter")) { - i_dx10Address(stage, D3DTADDRESS_WRAP); - i_dx10Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); + i_Address(stage, D3DTADDRESS_WRAP); + i_Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); } return stage; diff --git a/src/Layers/xrRenderDX10/DXCommonTypes.h b/src/Layers/xrRenderDX10/DXCommonTypes.h index cfb8e1e62e5..0156d3419b7 100644 --- a/src/Layers/xrRenderDX10/DXCommonTypes.h +++ b/src/Layers/xrRenderDX10/DXCommonTypes.h @@ -150,6 +150,8 @@ typedef ID3D11DeviceContext ID3DDeviceContext; #define D3D_FILL_WIREFRAME D3D11_FILL_WIREFRAME #define D3D_FORMAT_SUPPORT D3D11_FORMAT_SUPPORT +#define D3D_FORMAT_SUPPORT_TEXTURE2D D3D11_FORMAT_SUPPORT_TEXTURE2D +#define D3D_FORMAT_SUPPORT_RENDER_TARGET D3D11_FORMAT_SUPPORT_RENDER_TARGET #define D3D_FORMAT_SUPPORT_DEPTH_STENCIL D3D11_FORMAT_SUPPORT_DEPTH_STENCIL #define D3D_FORMAT_SUPPORT_DISPLAY D3D11_FORMAT_SUPPORT_DISPLAY @@ -328,6 +330,7 @@ typedef ID3D10Resource ID3DResource; #define D3D_STANDARD_MULTISAMPLE_PATTERN D3D10_STANDARD_MULTISAMPLE_PATTERN +#define D3D_DRIVER_TYPE D3D10_DRIVER_TYPE // There IS already type named D3D_DRIVER_TYPE!!! Fix it later if we would need it #define D3D_DRIVER_TYPE_REFERENCE D3D10_DRIVER_TYPE_REFERENCE #define D3D_DRIVER_TYPE_HARDWARE D3D10_DRIVER_TYPE_HARDWARE @@ -410,6 +413,8 @@ typedef ID3D10Resource ID3DResource; #define D3D_FILL_WIREFRAME D3D10_FILL_WIREFRAME #define D3D_FORMAT_SUPPORT D3D10_FORMAT_SUPPORT +#define D3D_FORMAT_SUPPORT_TEXTURE2D D3D10_FORMAT_SUPPORT_TEXTURE2D +#define D3D_FORMAT_SUPPORT_RENDER_TARGET D3D10_FORMAT_SUPPORT_RENDER_TARGET #define D3D_FORMAT_SUPPORT_DEPTH_STENCIL D3D10_FORMAT_SUPPORT_DEPTH_STENCIL #define D3D_FORMAT_SUPPORT_DISPLAY D3D10_FORMAT_SUPPORT_DISPLAY diff --git a/src/Layers/xrRenderDX10/dx10HW.cpp b/src/Layers/xrRenderDX10/dx10HW.cpp index b296116d07a..df04738248d 100644 --- a/src/Layers/xrRenderDX10/dx10HW.cpp +++ b/src/Layers/xrRenderDX10/dx10HW.cpp @@ -145,9 +145,9 @@ void CHW::CreateDevice(SDL_Window* m_sdlWnd) // TODO: DX10: implement dynamic format selection constexpr DXGI_FORMAT formats[] = { - //DXGI_FORMAT_R16G16B16A16_FLOAT, - //DXGI_FORMAT_R10G10B10A2_UNORM, - //DXGI_FORMAT_B8G8R8X8_UNORM, + //DXGI_FORMAT_R16G16B16A16_FLOAT, // Do we even need this? + //DXGI_FORMAT_R10G10B10A2_UNORM, // D3DX11SaveTextureToMemory fails on this format + DXGI_FORMAT_B8G8R8X8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, }; @@ -260,11 +260,16 @@ void CHW::Reset() UpdateViews(); } -bool CHW::CheckFormatSupport(const DXGI_FORMAT format, const D3D_FORMAT_SUPPORT feature) const +bool CHW::CheckFormatSupport(const DXGI_FORMAT format, const UINT feature) const { - UINT feature_bit = feature; - if (SUCCEEDED(pDevice->CheckFormatSupport(format, &feature_bit))) - return true; + UINT supports; + + if (SUCCEEDED(pDevice->CheckFormatSupport(format, &supports))) + { + if (supports & feature) + return true; + } + return false; } @@ -314,13 +319,12 @@ void CHW::UpdateViews() descDepth.ArraySize = 1; // Select depth-stencil format - // TODO: DX10: test and support other formats constexpr DXGI_FORMAT formats[] = { - //DXGI_FORMAT_D32_FLOAT_S8X24_UINT, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT, DXGI_FORMAT_D24_UNORM_S8_UINT, - //DXGI_FORMAT_D32_FLOAT, - //DXGI_FORMAT_D16_UNORM + DXGI_FORMAT_D32_FLOAT, + DXGI_FORMAT_D16_UNORM }; descDepth.Format = SelectFormat(D3D_FORMAT_SUPPORT_DEPTH_STENCIL, formats, std::size(formats)); Caps.fDepth = dx10TextureUtils::ConvertTextureFormat(descDepth.Format); diff --git a/src/Layers/xrRenderDX10/dx10R_Backend_Runtime.h b/src/Layers/xrRenderDX10/dx10R_Backend_Runtime.h index 4be638237e7..830cb02fffe 100644 --- a/src/Layers/xrRenderDX10/dx10R_Backend_Runtime.h +++ b/src/Layers/xrRenderDX10/dx10R_Backend_Runtime.h @@ -180,7 +180,7 @@ ICF void CBackend::set_Vertices(ID3DVertexBuffer* _vb, u32 _vb_stride) vb_stride = _vb_stride; // CHK_DX (HW.pDevice->SetStreamSource(0,vb,0,vb_stride)); // UINT StreamNumber, - // IDirect3DVertexBuffer9 * pStreamData, + // ID3DVertexBuffer * pStreamData, // UINT OffsetInBytes, // UINT Stride diff --git a/src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp b/src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp index 2452991fb18..7fb85396a97 100644 --- a/src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp +++ b/src/Layers/xrRenderDX10/dx10ResourceManager_Scripting.cpp @@ -241,78 +241,108 @@ class adopt_stencil_op // export void CResourceManager::LS_Load() { - auto exporterFunc = [](lua_State* luaState) { - module(luaState)[class_("_dx10options") - .def("dx10_msaa_alphatest_atoc", &adopt_dx10options::_dx10_msaa_alphatest_atoc) - //.def("", &adopt_dx10options::_dx10Options ), // returns options-object + // clang-format off + auto exporterFunc = [](lua_State* luaState) + { + module(luaState) + [ + class_("_dx10options") + .def("dx10_msaa_alphatest_atoc", &adopt_dx10options::_dx10_msaa_alphatest_atoc) + //.def("", &adopt_dx10options::_dx10Options ), // returns options-object , class_("_dx10sampler") - //.def("texture", &adopt_sampler::_texture ,return_reference_to<1>()) - //.def("project", &adopt_sampler::_projective ,return_reference_to<1>()) - //.def("clamp", &adopt_sampler::_clamp ,return_reference_to<1>()) - //.def("wrap", &adopt_sampler::_wrap ,return_reference_to<1>()) - //.def("mirror", &adopt_sampler::_mirror ,return_reference_to<1>()) - //.def("f_anisotropic", &adopt_sampler::_f_anisotropic ,return_reference_to<1>()) - //.def("f_trilinear", &adopt_sampler::_f_trilinear ,return_reference_to<1>()) - //.def("f_bilinear", &adopt_sampler::_f_bilinear ,return_reference_to<1>()) - //.def("f_linear", &adopt_sampler::_f_linear ,return_reference_to<1>()) - //.def("f_none", &adopt_sampler::_f_none ,return_reference_to<1>()) - //.def("fmin_none", &adopt_sampler::_fmin_none ,return_reference_to<1>()) - //.def("fmin_point", &adopt_sampler::_fmin_point ,return_reference_to<1>()) - //.def("fmin_linear", &adopt_sampler::_fmin_linear ,return_reference_to<1>()) - //.def("fmin_aniso", &adopt_sampler::_fmin_aniso ,return_reference_to<1>()) - //.def("fmip_none", &adopt_sampler::_fmip_none ,return_reference_to<1>()) - //.def("fmip_point", &adopt_sampler::_fmip_point ,return_reference_to<1>()) - //.def("fmip_linear", &adopt_sampler::_fmip_linear ,return_reference_to<1>()) - //.def("fmag_none", &adopt_sampler::_fmag_none ,return_reference_to<1>()) - //.def("fmag_point", &adopt_sampler::_fmag_point ,return_reference_to<1>()) - //.def("fmag_linear", &adopt_sampler::_fmag_linear ,return_reference_to<1>()) + //.def("texture", &adopt_sampler::_texture, return_reference_to<1>()) + //.def("project", &adopt_sampler::_projective, return_reference_to<1>()) + //.def("clamp", &adopt_sampler::_clamp, return_reference_to<1>()) + //.def("wrap", &adopt_sampler::_wrap, return_reference_to<1>()) + //.def("mirror", &adopt_sampler::_mirror, return_reference_to<1>()) + //.def("f_anisotropic", &adopt_sampler::_f_anisotropic, return_reference_to<1>()) + //.def("f_trilinear", &adopt_sampler::_f_trilinear, return_reference_to<1>()) + //.def("f_bilinear", &adopt_sampler::_f_bilinear, return_reference_to<1>()) + //.def("f_linear", &adopt_sampler::_f_linear, return_reference_to<1>()) + //.def("f_none", &adopt_sampler::_f_none, return_reference_to<1>()) + //.def("fmin_none", &adopt_sampler::_fmin_none, return_reference_to<1>()) + //.def("fmin_point", &adopt_sampler::_fmin_point, return_reference_to<1>()) + //.def("fmin_linear", &adopt_sampler::_fmin_linear, return_reference_to<1>()) + //.def("fmin_aniso", &adopt_sampler::_fmin_aniso, return_reference_to<1>()) + //.def("fmip_none", &adopt_sampler::_fmip_none, return_reference_to<1>()) + //.def("fmip_point", &adopt_sampler::_fmip_point, return_reference_to<1>()) + //.def("fmip_linear", &adopt_sampler::_fmip_linear, return_reference_to<1>()) + //.def("fmag_none", &adopt_sampler::_fmag_none, return_reference_to<1>()) + //.def("fmag_point", &adopt_sampler::_fmag_point, return_reference_to<1>()) + //.def("fmag_linear", &adopt_sampler::_fmag_linear, return_reference_to<1>()) , class_("_compiler") .def(constructor()) - .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) - .def("begin", &adopt_compiler::_passgs, return_reference_to<1>()) - .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) - .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) - .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) - .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) - .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) - .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) - .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) - .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) + .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) + .def("begin", &adopt_compiler::_passgs, return_reference_to<1>()) + .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) + .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) + .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) + .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) + .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) + .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) + .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) + .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) // For compatibility only .def("dx10color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) - .def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) - .def("dx10texture", &adopt_compiler::_dx10texture, return_reference_to<1>()) - .def("dx10stencil", &adopt_compiler::_dx10Stencil, return_reference_to<1>()) - .def("dx10stencil_ref", &adopt_compiler::_dx10StencilRef, return_reference_to<1>()) - .def("dx10atoc", &adopt_compiler::_dx10ATOC, return_reference_to<1>()) - .def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to<1>()) - - .def("dx10sampler", &adopt_compiler::_dx10sampler) // returns sampler-object - .def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object - - class_("blend").enum_("blend")[value("zero", int(D3DBLEND_ZERO)), - value("one", int(D3DBLEND_ONE)), value("srccolor", int(D3DBLEND_SRCCOLOR)), - value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), value("srcalpha", int(D3DBLEND_SRCALPHA)), - value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), value("destalpha", int(D3DBLEND_DESTALPHA)), - value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), value("destcolor", int(D3DBLEND_DESTCOLOR)), - value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), value("srcalphasat", int(D3DBLEND_SRCALPHASAT))], + .def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) + .def("dx10texture", &adopt_compiler::_dx10texture, return_reference_to<1>()) + .def("dx10stencil", &adopt_compiler::_dx10Stencil, return_reference_to<1>()) + .def("dx10stencil_ref", &adopt_compiler::_dx10StencilRef, return_reference_to<1>()) + .def("dx10atoc", &adopt_compiler::_dx10ATOC, return_reference_to<1>()) + .def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to<1>()) + + .def("dx10sampler", &adopt_compiler::_dx10sampler) // returns sampler-object + .def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object + + class_("blend") + .enum_("blend") + [ + value("zero", int(D3DBLEND_ZERO)), + value("one", int(D3DBLEND_ONE)), + value("srccolor", int(D3DBLEND_SRCCOLOR)), + value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), + value("srcalpha", int(D3DBLEND_SRCALPHA)), + value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), + value("destalpha", int(D3DBLEND_DESTALPHA)), + value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), + value("destcolor", int(D3DBLEND_DESTCOLOR)), + value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), + value("srcalphasat", int(D3DBLEND_SRCALPHASAT)) + ], class_("cmp_func") - .enum_("cmp_func")[value("never", int(D3DCMP_NEVER)), value("less", int(D3DCMP_LESS)), - value("equal", int(D3DCMP_EQUAL)), value("lessequal", int(D3DCMP_LESSEQUAL)), - value("greater", int(D3DCMP_GREATER)), value("notequal", int(D3DCMP_NOTEQUAL)), - value("greaterequal", int(D3DCMP_GREATEREQUAL)), value("always", int(D3DCMP_ALWAYS))], + .enum_("cmp_func") + [ + value("never", int(D3DCMP_NEVER)), + value("less", int(D3DCMP_LESS)), + value("equal", int(D3DCMP_EQUAL)), + value("lessequal", int(D3DCMP_LESSEQUAL)), + value("greater", int(D3DCMP_GREATER)), + value("notequal", int(D3DCMP_NOTEQUAL)), + value("greaterequal", int(D3DCMP_GREATEREQUAL)), + value("always", int(D3DCMP_ALWAYS)) + ], class_("stencil_op") - .enum_("stencil_op")[value("keep", int(D3DSTENCILOP_KEEP)), value("zero", int(D3DSTENCILOP_ZERO)), - value("replace", int(D3DSTENCILOP_REPLACE)), value("incrsat", int(D3DSTENCILOP_INCRSAT)), - value("decrsat", int(D3DSTENCILOP_DECRSAT)), value("invert", int(D3DSTENCILOP_INVERT)), - value("incr", int(D3DSTENCILOP_INCR)), value("decr", int(D3DSTENCILOP_DECR))]]; + .enum_("stencil_op") + [ + value("keep", int(D3DSTENCILOP_KEEP)), + value("zero", int(D3DSTENCILOP_ZERO)), + value("replace", int(D3DSTENCILOP_REPLACE)), + value("incrsat", int(D3DSTENCILOP_INCRSAT)), + value("decrsat", int(D3DSTENCILOP_DECRSAT)), + value("invert", int(D3DSTENCILOP_INVERT)), + value("incr", int(D3DSTENCILOP_INCR)), + value("decr", int(D3DSTENCILOP_DECR)) + ] + ]; }; + // clang-format on + ScriptEngine.init(exporterFunc, false); // load shaders const char* shaderPath = RImplementation.getShaderPath(); diff --git a/src/Layers/xrRenderDX10/dx10SH_RT.cpp b/src/Layers/xrRenderDX10/dx10SH_RT.cpp index b42f139db26..8e8ba668674 100644 --- a/src/Layers/xrRenderDX10/dx10SH_RT.cpp +++ b/src/Layers/xrRenderDX10/dx10SH_RT.cpp @@ -36,16 +36,10 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) R_ASSERT(HW.pDevice && Name && Name[0] && w && h); _order = CPU::GetCLK(); // Device.GetTimerGlobal()->GetElapsed_clk(); - // HRESULT _hr; - dwWidth = w; dwHeight = h; fmt = f; - // Get caps - // D3DCAPS9 caps; - // R_CHK (HW.pDevice->GetDeviceCaps(&caps)); - // DirectX 10 supports non-power of two textures // Pow2 // if (!btwIsPow2(w) || !btwIsPow2(h)) @@ -63,16 +57,8 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) u32 usage = 0; if (D3DFMT_D24X8 == fmt) usage = D3DUSAGE_DEPTHSTENCIL; - else if (D3DFMT_D24S8 == fmt) - usage = D3DUSAGE_DEPTHSTENCIL; else if (D3DFMT_D15S1 == fmt) usage = D3DUSAGE_DEPTHSTENCIL; - else if (D3DFMT_D16 == fmt) - usage = D3DUSAGE_DEPTHSTENCIL; - else if (D3DFMT_D16_LOCKABLE == fmt) - usage = D3DUSAGE_DEPTHSTENCIL; - else if (D3DFMT_D32F_LOCKABLE == fmt) - usage = D3DUSAGE_DEPTHSTENCIL; else if ((D3DFORMAT)MAKEFOURCC('D', 'F', '2', '4') == fmt) usage = D3DUSAGE_DEPTHSTENCIL; else @@ -80,39 +66,49 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) DXGI_FORMAT dx10FMT; - if (fmt != D3DFMT_D24S8) - dx10FMT = dx10TextureUtils::ConvertTextureFormat(fmt); - else + switch (fmt) { + case D3DFMT_D32S8X24: + dx10FMT = DXGI_FORMAT_R32G8X24_TYPELESS; + usage = D3DUSAGE_DEPTHSTENCIL; + break; + + case D3DFMT_D24S8: dx10FMT = DXGI_FORMAT_R24G8_TYPELESS; usage = D3DUSAGE_DEPTHSTENCIL; + break; + + case D3DFMT_D32F_LOCKABLE: + dx10FMT = DXGI_FORMAT_R32_TYPELESS; + usage = D3DUSAGE_DEPTHSTENCIL; + break; + + case D3DFMT_D16_LOCKABLE: + dx10FMT = DXGI_FORMAT_R16_TYPELESS; + usage = D3DUSAGE_DEPTHSTENCIL; + break; + + default: + dx10FMT = dx10TextureUtils::ConvertTextureFormat(fmt); + break; } - bool bUseAsDepth = (usage == D3DUSAGE_RENDERTARGET) ? false : true; + const bool useAsDepth = usage != D3DUSAGE_RENDERTARGET; // Validate render-target usage - //_hr = HW.pD3D->CheckDeviceFormat( - // HW.DevAdapter, - // HW.m_DriverType, - // HW.Caps.fTarget, - // usage, - // D3DRTYPE_TEXTURE, - // f - //); - // TODO: DX10: implement format support check - // UINT FormatSupport; - //_hr = HW.pDevice->CheckFormatSupport( dx10FMT, &FormatSupport); - // if (FAILED(_hr)) return; - // if (!( - //(FormatSupport&D3Dxx_FORMAT_SUPPORT_TEXTURE2D) - //&& (FormatSupport&(bUseAsDepth?D3Dxx_FORMAT_SUPPORT_DEPTH_STENCIL:D3Dxx_FORMAT_SUPPORT_RENDER_TARGET)) - //)) - // return; + UINT required = D3D_FORMAT_SUPPORT_TEXTURE2D; + + if (useAsDepth) + required |= D3D_FORMAT_SUPPORT_DEPTH_STENCIL; + else + required |= D3D_FORMAT_SUPPORT_RENDER_TARGET; + + if (!HW.CheckFormatSupport(dx10FMT, required)) + return; // Try to create texture/surface RImplementation.Resources->Evict(); - //_hr = HW.pDevice->CreateTexture (w, h, 1, usage, f, D3DPOOL_DEFAULT, &pSurface,NULL); - // if (FAILED(_hr) || (0==pSurface)) return; + // Create the render target texture D3D_TEXTURE2D_DESC desc; ZeroMemory(&desc, sizeof(desc)); @@ -124,10 +120,10 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) desc.SampleDesc.Count = SampleCount; desc.Usage = D3D_USAGE_DEFAULT; if (SampleCount <= 1) - desc.BindFlags = D3D_BIND_SHADER_RESOURCE | (bUseAsDepth ? D3D_BIND_DEPTH_STENCIL : D3D_BIND_RENDER_TARGET); + desc.BindFlags = D3D_BIND_SHADER_RESOURCE | (useAsDepth ? D3D_BIND_DEPTH_STENCIL : D3D_BIND_RENDER_TARGET); else { - desc.BindFlags = (bUseAsDepth ? D3D_BIND_DEPTH_STENCIL : (D3D_BIND_SHADER_RESOURCE | D3D_BIND_RENDER_TARGET)); + desc.BindFlags = (useAsDepth ? D3D_BIND_DEPTH_STENCIL : (D3D_BIND_SHADER_RESOURCE | D3D_BIND_RENDER_TARGET)); if (RImplementation.o.dx10_msaa_opt) { desc.SampleDesc.Quality = UINT(D3D_STANDARD_MULTISAMPLE_PATTERN); @@ -135,18 +131,18 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) } #ifdef USE_DX11 - if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0 && !bUseAsDepth && SampleCount == 1 && useUAV) + if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0 && !useAsDepth && SampleCount == 1 && useUAV) desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS; #endif CHK_DX(HW.pDevice->CreateTexture2D(&desc, NULL, &pSurface)); HW.stats_manager.increment_stats_rtarget(pSurface); -// OK + // OK #ifdef DEBUG Msg("* created RT(%s), %dx%d, format = %d samples = %d", Name, w, h, dx10FMT, SampleCount); #endif // DEBUG - // R_CHK (pSurface->GetSurfaceLevel (0,&pRT)); - if (bUseAsDepth) + // R_CHK (pSurface->GetSurfaceLevel (0,&pRT)); // TODO: DX10: check if texture is created? + if (useAsDepth) { D3D_DEPTH_STENCIL_VIEW_DESC ViewDesc; ZeroMemory(&ViewDesc, sizeof(ViewDesc)); @@ -163,10 +159,24 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) } ViewDesc.Texture2D.MipSlice = 0; + switch (desc.Format) { - case DXGI_FORMAT_R24G8_TYPELESS: ViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; break; - case DXGI_FORMAT_R32_TYPELESS: ViewDesc.Format = DXGI_FORMAT_D32_FLOAT; break; + case DXGI_FORMAT_R16_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_D16_UNORM; + break; + + case DXGI_FORMAT_R24G8_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; + break; + + case DXGI_FORMAT_R32_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_D32_FLOAT; + break; + + case DXGI_FORMAT_R32G8X24_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_D32_FLOAT_S8X24_UINT; + break; } CHK_DX(HW.pDevice->CreateDepthStencilView(pSurface, &ViewDesc, &pZRT)); @@ -175,7 +185,7 @@ void CRT::create(LPCSTR Name, u32 w, u32 h, D3DFORMAT f, u32 SampleCount) CHK_DX(HW.pDevice->CreateRenderTargetView(pSurface, 0, &pRT)); #ifdef USE_DX11 - if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0 && !bUseAsDepth && SampleCount == 1 && useUAV) + if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0 && !useAsDepth && SampleCount == 1 && useUAV) { D3D11_UNORDERED_ACCESS_VIEW_DESC UAVDesc; ZeroMemory(&UAVDesc, sizeof(D3D11_UNORDERED_ACCESS_VIEW_DESC)); diff --git a/src/Layers/xrRenderDX10/dx10SH_Texture.cpp b/src/Layers/xrRenderDX10/dx10SH_Texture.cpp index bddb370759d..203b2d4ea7d 100644 --- a/src/Layers/xrRenderDX10/dx10SH_Texture.cpp +++ b/src/Layers/xrRenderDX10/dx10SH_Texture.cpp @@ -89,11 +89,24 @@ void CTexture::surface_set(ID3DBaseTexture* surf) switch (desc.Format) { - case DXGI_FORMAT_R24G8_TYPELESS: ViewDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; break; - case DXGI_FORMAT_R32_TYPELESS: ViewDesc.Format = DXGI_FORMAT_R32_FLOAT; break; + case DXGI_FORMAT_R32G8X24_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + break; + + case DXGI_FORMAT_R24G8_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + break; + + case DXGI_FORMAT_R32_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_R32_FLOAT; + break; + + case DXGI_FORMAT_R16_TYPELESS: + ViewDesc.Format = DXGI_FORMAT_R16_FLOAT; + break; } - // this would be supported by DX10.1 but is not needed for stalker + // this would be supported by DX10.1 but is not needed for stalker // XXX: why? // if( ViewDesc.Format != DXGI_FORMAT_R24_UNORM_X8_TYPELESS ) if ((desc.SampleDesc.Count <= 1) || (ViewDesc.Format != DXGI_FORMAT_R24_UNORM_X8_TYPELESS)) CHK_DX(HW.pDevice->CreateShaderResourceView(pSurface, &ViewDesc, &m_pSRView)); diff --git a/src/Layers/xrRenderDX10/dx10TextureUtils.cpp b/src/Layers/xrRenderDX10/dx10TextureUtils.cpp index 08ffd47a089..b64a62de501 100644 --- a/src/Layers/xrRenderDX10/dx10TextureUtils.cpp +++ b/src/Layers/xrRenderDX10/dx10TextureUtils.cpp @@ -65,12 +65,13 @@ TextureFormatPairs TextureFormatList[] = { // D3DFMT_D32 Not available // D3DFMT_D15S1 Not available // D3DFMT_D24S8 Not available - {D3DFMT_D24S8, DXGI_FORMAT_D24_UNORM_S8_UINT}, // XXX: documentation says that D3DFMT_D24S8 is unavailable + {D3DFMT_D24S8, DXGI_FORMAT_D24_UNORM_S8_UINT}, {D3DFMT_D24X8, DXGI_FORMAT_R24G8_TYPELESS}, // DXGI_FORMAT_D24_UNORM_S8_UINT}, // Not available // D3DFMT_D24X4S4 Not available - // D3DFMT_D16 DXGI_FORMAT_D16_UNORM - //{ D3DFMT_D32F_LOCKABLE, DXGI_FORMAT_D32_FLOAT}, - {D3DFMT_D32F_LOCKABLE, DXGI_FORMAT_R32_TYPELESS}, + { D3DFMT_D16_LOCKABLE, DXGI_FORMAT_D16_UNORM }, + { D3DFMT_D32F_LOCKABLE, DXGI_FORMAT_R32_TYPELESS }, + { D3DFMT_D32F_LOCKABLE, DXGI_FORMAT_D32_FLOAT }, + { D3DFMT_D32S8X24, DXGI_FORMAT_D32_FLOAT_S8X24_UINT}, // D3DFMT_D24FS8 Not available // D3DFMT_S1D15 Not available // D3DFMT_S8D24 DXGI_FORMAT_D24_UNORM_S8_UINT diff --git a/src/Layers/xrRenderDX10/dx10TextureUtils.h b/src/Layers/xrRenderDX10/dx10TextureUtils.h index 3614193eb1e..68f9054c5be 100644 --- a/src/Layers/xrRenderDX10/dx10TextureUtils.h +++ b/src/Layers/xrRenderDX10/dx10TextureUtils.h @@ -2,6 +2,10 @@ #define dx10TextureUtils_included #pragma once +// hack for dx9... That's it. I don't know if there's already DS64 format. +// If true, then replace with another 4 chars +#define D3DFMT_D32S8X24 (D3DFORMAT)MAKEFOURCC('D', 'S', '6', '4') + namespace dx10TextureUtils { DXGI_FORMAT ConvertTextureFormat(D3DFORMAT dx9FMT); diff --git a/src/Layers/xrRenderPC_GL/glResourceManager_Scripting.cpp b/src/Layers/xrRenderPC_GL/glResourceManager_Scripting.cpp index 1d0833fffa5..33915583a0f 100644 --- a/src/Layers/xrRenderPC_GL/glResourceManager_Scripting.cpp +++ b/src/Layers/xrRenderPC_GL/glResourceManager_Scripting.cpp @@ -308,106 +308,108 @@ class adopt_stencil_op // export void CResourceManager::LS_Load() { + // clang-format off auto exporterFunc = [](lua_State* luaState) { module(luaState) [ class_("_dx10options") - .def("dx10_msaa_alphatest_atoc", &adopt_dx10options::_dx10_msaa_alphatest_atoc) + .def("dx10_msaa_alphatest_atoc", &adopt_dx10options::_dx10_msaa_alphatest_atoc) //.def("", &adopt_dx10options::_dx10Options ), // returns options-object , class_("_sampler") - .def(constructor()) - .def("texture", &adopt_sampler::_texture, return_reference_to<1>()) - .def("project", &adopt_sampler::_projective, return_reference_to<1>()) - .def("clamp", &adopt_sampler::_clamp, return_reference_to<1>()) - .def("wrap", &adopt_sampler::_wrap, return_reference_to<1>()) - .def("mirror", &adopt_sampler::_mirror, return_reference_to<1>()) - .def("f_anisotropic", &adopt_sampler::_f_anisotropic, return_reference_to<1>()) - .def("f_trilinear", &adopt_sampler::_f_trilinear, return_reference_to<1>()) - .def("f_bilinear", &adopt_sampler::_f_bilinear, return_reference_to<1>()) - .def("f_linear", &adopt_sampler::_f_linear, return_reference_to<1>()) - .def("f_none", &adopt_sampler::_f_none, return_reference_to<1>()) - .def("fmin_none", &adopt_sampler::_fmin_none, return_reference_to<1>()) - .def("fmin_point", &adopt_sampler::_fmin_point, return_reference_to<1>()) - .def("fmin_linear", &adopt_sampler::_fmin_linear, return_reference_to<1>()) - .def("fmin_aniso", &adopt_sampler::_fmin_aniso, return_reference_to<1>()) - .def("fmip_none", &adopt_sampler::_fmip_none, return_reference_to<1>()) - .def("fmip_point", &adopt_sampler::_fmip_point, return_reference_to<1>()) - .def("fmip_linear", &adopt_sampler::_fmip_linear, return_reference_to<1>()) - .def("fmag_none", &adopt_sampler::_fmag_none, return_reference_to<1>()) - .def("fmag_point", &adopt_sampler::_fmag_point, return_reference_to<1>()) - .def("fmag_linear", &adopt_sampler::_fmag_linear, return_reference_to<1>()) - .def("comp_less", &adopt_sampler::_comp_less, return_reference_to<1>()), + .def(constructor()) + .def("texture", &adopt_sampler::_texture, return_reference_to<1>()) + .def("project", &adopt_sampler::_projective, return_reference_to<1>()) + .def("clamp", &adopt_sampler::_clamp, return_reference_to<1>()) + .def("wrap", &adopt_sampler::_wrap, return_reference_to<1>()) + .def("mirror", &adopt_sampler::_mirror, return_reference_to<1>()) + .def("f_anisotropic", &adopt_sampler::_f_anisotropic, return_reference_to<1>()) + .def("f_trilinear", &adopt_sampler::_f_trilinear, return_reference_to<1>()) + .def("f_bilinear", &adopt_sampler::_f_bilinear, return_reference_to<1>()) + .def("f_linear", &adopt_sampler::_f_linear, return_reference_to<1>()) + .def("f_none", &adopt_sampler::_f_none, return_reference_to<1>()) + .def("fmin_none", &adopt_sampler::_fmin_none, return_reference_to<1>()) + .def("fmin_point", &adopt_sampler::_fmin_point, return_reference_to<1>()) + .def("fmin_linear", &adopt_sampler::_fmin_linear, return_reference_to<1>()) + .def("fmin_aniso", &adopt_sampler::_fmin_aniso, return_reference_to<1>()) + .def("fmip_none", &adopt_sampler::_fmip_none, return_reference_to<1>()) + .def("fmip_point", &adopt_sampler::_fmip_point, return_reference_to<1>()) + .def("fmip_linear", &adopt_sampler::_fmip_linear, return_reference_to<1>()) + .def("fmag_none", &adopt_sampler::_fmag_none, return_reference_to<1>()) + .def("fmag_point", &adopt_sampler::_fmag_point, return_reference_to<1>()) + .def("fmag_linear", &adopt_sampler::_fmag_linear, return_reference_to<1>()) + .def("comp_less", &adopt_sampler::_comp_less, return_reference_to<1>()), class_("_compiler") - .def(constructor()) - .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) - .def("begin", &adopt_compiler::_passgs, return_reference_to<1>()) - .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) - .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) - .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) - .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) - .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) - .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) - .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) - .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) - // For compatibility only - .def("dx10color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) - .def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) - .def("dx10stencil", &adopt_compiler::_dx10Stencil, return_reference_to<1>()) - .def("dx10stencil_ref", &adopt_compiler::_dx10StencilRef, return_reference_to<1>()) - .def("dx10atoc", &adopt_compiler::_dx10ATOC, return_reference_to<1>()) - .def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to<1>()) - - .def("sampler", &adopt_compiler::_sampler) // returns sampler-object - .def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object + .def(constructor()) + .def("begin", &adopt_compiler::_pass, return_reference_to<1>()) + .def("begin", &adopt_compiler::_passgs, return_reference_to<1>()) + .def("sorting", &adopt_compiler::_options, return_reference_to<1>()) + .def("emissive", &adopt_compiler::_o_emissive, return_reference_to<1>()) + .def("distort", &adopt_compiler::_o_distort, return_reference_to<1>()) + .def("wmark", &adopt_compiler::_o_wmark, return_reference_to<1>()) + .def("fog", &adopt_compiler::_fog, return_reference_to<1>()) + .def("zb", &adopt_compiler::_ZB, return_reference_to<1>()) + .def("blend", &adopt_compiler::_blend, return_reference_to<1>()) + .def("aref", &adopt_compiler::_aref, return_reference_to<1>()) + // For compatibility only + .def("dx10color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) + .def("color_write_enable", &adopt_compiler::_dx10color_write_enable, return_reference_to<1>()) + .def("dx10stencil", &adopt_compiler::_dx10Stencil, return_reference_to<1>()) + .def("dx10stencil_ref", &adopt_compiler::_dx10StencilRef, return_reference_to<1>()) + .def("dx10atoc", &adopt_compiler::_dx10ATOC, return_reference_to<1>()) + .def("dx10zfunc", &adopt_compiler::_dx10ZFunc, return_reference_to<1>()) + .def("sampler", &adopt_compiler::_sampler) // returns sampler-object + .def("dx10Options", &adopt_compiler::_dx10Options), // returns options-object class_("blend") - .enum_("blend") - [ - value("zero", int(D3DBLEND_ZERO)), - value("one", int(D3DBLEND_ONE)), - value("srccolor", int(D3DBLEND_SRCCOLOR)), - value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), - value("srcalpha", int(D3DBLEND_SRCALPHA)), - value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), - value("destalpha", int(D3DBLEND_DESTALPHA)), - value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), - value("destcolor", int(D3DBLEND_DESTCOLOR)), - value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), - value("srcalphasat", int(D3DBLEND_SRCALPHASAT)) - ], + .enum_("blend") + [ + value("zero", int(D3DBLEND_ZERO)), + value("one", int(D3DBLEND_ONE)), + value("srccolor", int(D3DBLEND_SRCCOLOR)), + value("invsrccolor", int(D3DBLEND_INVSRCCOLOR)), + value("srcalpha", int(D3DBLEND_SRCALPHA)), + value("invsrcalpha", int(D3DBLEND_INVSRCALPHA)), + value("destalpha", int(D3DBLEND_DESTALPHA)), + value("invdestalpha", int(D3DBLEND_INVDESTALPHA)), + value("destcolor", int(D3DBLEND_DESTCOLOR)), + value("invdestcolor", int(D3DBLEND_INVDESTCOLOR)), + value("srcalphasat", int(D3DBLEND_SRCALPHASAT)) + ], class_("cmp_func") - .enum_("cmp_func") - [ - value("never", int(D3DCMP_NEVER)), - value("less", int(D3DCMP_LESS)), - value("equal", int(D3DCMP_EQUAL)), - value("lessequal", int(D3DCMP_LESSEQUAL)), - value("greater", int(D3DCMP_GREATER)), - value("notequal", int(D3DCMP_NOTEQUAL)), - value("greaterequal", int(D3DCMP_GREATEREQUAL)), - value("always", int(D3DCMP_ALWAYS)) - ], + .enum_("cmp_func") + [ + value("never", int(D3DCMP_NEVER)), + value("less", int(D3DCMP_LESS)), + value("equal", int(D3DCMP_EQUAL)), + value("lessequal", int(D3DCMP_LESSEQUAL)), + value("greater", int(D3DCMP_GREATER)), + value("notequal", int(D3DCMP_NOTEQUAL)), + value("greaterequal", int(D3DCMP_GREATEREQUAL)), + value("always", int(D3DCMP_ALWAYS)) + ], class_("stencil_op") - .enum_("stencil_op") - [ - value("keep", int(D3DSTENCILOP_KEEP)), - value("zero", int(D3DSTENCILOP_ZERO)), - value("replace", int(D3DSTENCILOP_REPLACE)), - value("incrsat", int(D3DSTENCILOP_INCRSAT)), - value("decrsat", int(D3DSTENCILOP_DECRSAT)), - value("invert", int(D3DSTENCILOP_INVERT)), - value("incr", int(D3DSTENCILOP_INCR)), - value("decr", int(D3DSTENCILOP_DECR)) - ] + .enum_("stencil_op") + [ + value("keep", int(D3DSTENCILOP_KEEP)), + value("zero", int(D3DSTENCILOP_ZERO)), + value("replace", int(D3DSTENCILOP_REPLACE)), + value("incrsat", int(D3DSTENCILOP_INCRSAT)), + value("decrsat", int(D3DSTENCILOP_DECRSAT)), + value("invert", int(D3DSTENCILOP_INVERT)), + value("incr", int(D3DSTENCILOP_INCR)), + value("decr", int(D3DSTENCILOP_DECR)) + ] ]; }; + // clang-format on + ScriptEngine.init(exporterFunc, false); // load shaders const char* shaderPath = RImplementation.getShaderPath(); diff --git a/src/Layers/xrRenderPC_GL/gl_loader.cpp b/src/Layers/xrRenderPC_GL/gl_loader.cpp index 4bb8159e73b..27a78b42789 100644 --- a/src/Layers/xrRenderPC_GL/gl_loader.cpp +++ b/src/Layers/xrRenderPC_GL/gl_loader.cpp @@ -60,7 +60,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geom"); R_ASSERT2 (geom, "level.geom"); - LoadBuffers(geom,FALSE); + LoadBuffers(geom, false); LoadSWIs(geom); FS.r_close(geom); } @@ -69,7 +69,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geomx"); R_ASSERT2 (geom, "level.geomX"); - LoadBuffers(geom,TRUE); + LoadBuffers(geom, true); FS.r_close(geom); } @@ -172,15 +172,15 @@ void CRender::level_Unload() b_loaded = FALSE; } -void CRender::LoadBuffers(CStreamReader* base_fs, BOOL _alternative) +void CRender::LoadBuffers(CStreamReader* base_fs, bool alternative) { R_ASSERT2 (base_fs,"Could not load geometry. File not found."); Resources->Evict(); // u32 dwUsage = D3DUSAGE_WRITEONLY; - xr_vector& _DC = _alternative ? xDC : nDC; - xr_vector& _VB = _alternative ? xVB : nVB; - xr_vector& _IB = _alternative ? xIB : nIB; + xr_vector& _DC = alternative ? xDC : nDC; + xr_vector& _VB = alternative ? xVB : nVB; + xr_vector& _IB = alternative ? xIB : nIB; // Vertex buffers { diff --git a/src/Layers/xrRenderPC_GL/rgl.h b/src/Layers/xrRenderPC_GL/rgl.h index c70de0bfb77..9397006fdf8 100644 --- a/src/Layers/xrRenderPC_GL/rgl.h +++ b/src/Layers/xrRenderPC_GL/rgl.h @@ -188,7 +188,7 @@ class CRender : public D3DXRenderBase private: // Loading / Unloading - void LoadBuffers(CStreamReader* fs, BOOL _alternative); + void LoadBuffers(CStreamReader* fs, bool alternative); void LoadVisuals(IReader* fs); void LoadLights(IReader* fs); void LoadPortals(IReader* fs); diff --git a/src/Layers/xrRenderPC_R1/FStaticRender.cpp b/src/Layers/xrRenderPC_R1/FStaticRender.cpp index 76aef9ab85f..875e2b942af 100644 --- a/src/Layers/xrRenderPC_R1/FStaticRender.cpp +++ b/src/Layers/xrRenderPC_R1/FStaticRender.cpp @@ -52,7 +52,6 @@ ShaderElement* CRender::rimp_select_sh_static(dxRender_Visual* pVisual, float cd ////////////////////////////////////////////////////////////////////////// void CRender::create() { - L_DB = nullptr; L_Shadows = nullptr; L_Projector = nullptr; @@ -251,20 +250,44 @@ IRenderVisual* CRender::getVisual(int id) VERIFY(id < int(Visuals.size())); return Visuals[id]; } -D3DVERTEXELEMENT9* CRender::getVB_Format(int id) +D3DVERTEXELEMENT9* CRender::getVB_Format(int id, bool alternative) { - VERIFY(id < int(DCL.size())); - return DCL[id].begin(); + if (alternative) + { + VERIFY(id < int(xDC.size())); + return xDC[id].begin(); + } + else + { + VERIFY(id < int(nDC.size())); + return nDC[id].begin(); + } } -IDirect3DVertexBuffer9* CRender::getVB(int id) +ID3DVertexBuffer* CRender::getVB(int id, bool alternative) { - VERIFY(id < int(VB.size())); - return VB[id]; + if (alternative) + { + VERIFY(id < int(xVB.size())); + return xVB[id]; + } + else + { + VERIFY(id < int(nVB.size())); + return nVB[id]; + } } -IDirect3DIndexBuffer9* CRender::getIB(int id) +ID3DIndexBuffer* CRender::getIB(int id, bool alternative) { - VERIFY(id < int(IB.size())); - return IB[id]; + if (alternative) + { + VERIFY(id < int(xIB.size())); + return xIB[id]; + } + else + { + VERIFY(id < int(nIB.size())); + return nIB[id]; + } } FSlideWindowItem* CRender::getSWI(int id) { @@ -272,7 +295,7 @@ FSlideWindowItem* CRender::getSWI(int id) return &SWIs[id]; } IRender_Target* CRender::getTarget() { return Target; } -IRender_Light* CRender::light_create() { return L_DB->Create(); } +IRender_Light* CRender::light_create() { return Lights.Create(); } IRender_Glow* CRender::glow_create() { return new CGlow(); } void CRender::flush() { r_dsgraph_render_graph(0); } BOOL CRender::occ_visible(vis_data& P) { return HOM.visible(P); } @@ -476,9 +499,9 @@ void CRender::Calculate() pPortal->bDualRender = TRUE; } } + // - if (L_DB) - L_DB->Update(); + Lights.Update(); // Main process marker++; @@ -609,7 +632,7 @@ void CRender::Calculate() { vis_data& vis = L->get_homdata(); if (HOM.visible(vis)) - L_DB->add_light(L); + Lights.add_light(L); } } } diff --git a/src/Layers/xrRenderPC_R1/FStaticRender.h b/src/Layers/xrRenderPC_R1/FStaticRender.h index d381ecb4808..d6c3bd7ca51 100644 --- a/src/Layers/xrRenderPC_R1/FStaticRender.h +++ b/src/Layers/xrRenderPC_R1/FStaticRender.h @@ -50,12 +50,12 @@ class CRender : public D3DXRenderBase xr_vector SWIs; xr_vector Shaders; typedef svector VertexDeclarator; - xr_vector DCL; - xr_vector VB; - xr_vector IB; + xr_vector nDC, xDC; + xr_vector nVB, xVB; + xr_vector nIB, xIB; xr_vector Visuals; CPSLibrary PSLibrary; - CLight_DB* L_DB; + CLight_DB Lights; CLightR_Manager* L_Dynamic; CLightShadows* L_Shadows; CLightProjector* L_Projector; @@ -78,7 +78,7 @@ class CRender : public D3DXRenderBase private: // Loading / Unloading - void LoadBuffers(CStreamReader* fs); + void LoadBuffers(CStreamReader* fs, bool alternative = false); void LoadVisuals(IReader* fs); void LoadLights(IReader* fs); void LoadSectors(IReader* fs); @@ -91,9 +91,9 @@ class CRender : public D3DXRenderBase public: ShaderElement* rimp_select_sh_static(dxRender_Visual* pVisual, float cdist_sq); ShaderElement* rimp_select_sh_dynamic(dxRender_Visual* pVisual, float cdist_sq); - D3DVERTEXELEMENT9* getVB_Format(int id); - IDirect3DVertexBuffer9* getVB(int id); - IDirect3DIndexBuffer9* getIB(int id); + D3DVERTEXELEMENT9* getVB_Format(int id, bool alternative = false); + ID3DVertexBuffer* getVB(int id, bool alternative = false); + ID3DIndexBuffer* getIB(int id, bool alternative = false); FSlideWindowItem* getSWI(int id); IRender_Portal* getPortal(int id); IRender_Sector* getSectorActive(); diff --git a/src/Layers/xrRenderPC_R1/FStaticRender_Loader.cpp b/src/Layers/xrRenderPC_R1/FStaticRender_Loader.cpp index 646bb86c644..40d9f358095 100644 --- a/src/Layers/xrRenderPC_R1/FStaticRender_Loader.cpp +++ b/src/Layers/xrRenderPC_R1/FStaticRender_Loader.cpp @@ -46,10 +46,8 @@ void CRender::level_Load(IReader* fs) } // Components - L_Shadows = new CLightShadows(); L_Projector = new CLightProjector(); - L_DB = new CLight_DB(); L_Glows = new CGlowManager(); Wallmarks = new CWallmarksEngine(); Details = new CDetailManager(); @@ -64,10 +62,22 @@ void CRender::level_Load(IReader* fs) // VB,IB,SWI g_pGamePersistent->SetLoadStageTitle("st_loading_geometry"); g_pGamePersistent->LoadTitle(); - CStreamReader* geom = FS.rs_open("$level$", "level.geom"); - LoadBuffers(geom); - LoadSWIs(geom); - FS.r_close(geom); + { + CStreamReader* geom = FS.rs_open("$level$", "level.geom"); + R_ASSERT2(geom, "level.geom"); + LoadBuffers(geom, false); + LoadSWIs(geom); + FS.r_close(geom); + } + + //...and alternate/fast geometry + if (ps_r1_force_geomx) + { + CStreamReader* geom = FS.rs_open("$level$", "level.geomx"); + R_ASSERT2(geom, "level.geomX"); + LoadBuffers(geom, true); + FS.r_close(geom); + } // Visuals g_pGamePersistent->SetLoadStageTitle("st_loading_spatial_db"); @@ -133,7 +143,7 @@ void CRender::level_Unload() //*** Lights L_Glows->Unload(); - L_DB->Unload(); + Lights.Unload(); //*** Visuals for (I = 0; I < Visuals.size(); I++) @@ -149,19 +159,41 @@ void CRender::level_Unload() SWIs.clear(); //*** VB/IB - for (I = 0; I < VB.size(); I++) - _RELEASE(VB[I]); - for (I = 0; I < IB.size(); I++) - _RELEASE(IB[I]); - DCL.clear(); - VB.clear(); - IB.clear(); + for (I = 0; I < nVB.size(); I++) + { + HW.stats_manager.decrement_stats_vb(nVB[I]); + _RELEASE(nVB[I]); + } + + for (I = 0; I < xVB.size(); I++) + { + HW.stats_manager.decrement_stats_vb(xVB[I]); + _RELEASE(xVB[I]); + } + nVB.clear(); + xVB.clear(); + + for (I = 0; I < nIB.size(); I++) + { + HW.stats_manager.decrement_stats_ib(nIB[I]); + _RELEASE(nIB[I]); + } + + for (I = 0; I < xIB.size(); I++) + { + HW.stats_manager.decrement_stats_ib(xIB[I]); + _RELEASE(xIB[I]); + } + + nIB.clear(); + xIB.clear(); + nDC.clear(); + xDC.clear(); //*** Components xr_delete(Details); xr_delete(Wallmarks); xr_delete(L_Glows); - xr_delete(L_DB); xr_delete(L_Projector); xr_delete(L_Shadows); @@ -175,19 +207,23 @@ void CRender::level_Unload() b_loaded = FALSE; } -void CRender::LoadBuffers(CStreamReader* base_fs) +void CRender::LoadBuffers(CStreamReader* base_fs, bool alternative) { Resources->Evict(); u32 dwUsage = D3DUSAGE_WRITEONLY | (HW.Caps.geometry.bSoftware ? D3DUSAGE_SOFTWAREPROCESSING : 0); + xr_vector& _DC = alternative ? xDC : nDC; + xr_vector& _VB = alternative ? xVB : nVB; + xr_vector& _IB = alternative ? xIB : nIB; + // Vertex buffers if (base_fs->find_chunk(fsL_VB)) { // Use DX9-style declarators CStreamReader* fs = base_fs->open_chunk(fsL_VB); u32 count = fs->r_u32(); - DCL.resize(count); - VB.resize(count); + _DC.resize(count); + _VB.resize(count); u32 buffer_size = (MAXD3DDECLLENGTH + 1) * sizeof(D3DVERTEXELEMENT9); D3DVERTEXELEMENT9* dcl = (D3DVERTEXELEMENT9*)_alloca(buffer_size); @@ -203,9 +239,9 @@ void CRender::LoadBuffers(CStreamReader* base_fs) u32 dcl_len = D3DXGetDeclLength(dcl) + 1; - DCL[i].resize(dcl_len); - fs->r(DCL[i].begin(), dcl_len * sizeof(D3DVERTEXELEMENT9)); - //.????????? remove T&B from DCL[] + _DC[i].resize(dcl_len); + fs->r(_DC[i].begin(), dcl_len * sizeof(D3DVERTEXELEMENT9)); + //.????????? remove T&B from _DC[] // count, size u32 vCount = fs->r_u32(); @@ -214,12 +250,12 @@ void CRender::LoadBuffers(CStreamReader* base_fs) // Create and fill BYTE* pData = nullptr; - R_CHK(HW.pDevice->CreateVertexBuffer(vCount * vSize, dwUsage, 0, D3DPOOL_MANAGED, &VB[i], nullptr)); - HW.stats_manager.increment_stats(vCount * vSize, enum_stats_buffer_type_vertex, D3DPOOL_MANAGED); - R_CHK(VB[i]->Lock(0, 0, (void**)&pData, 0)); + R_CHK(HW.pDevice->CreateVertexBuffer(vCount * vSize, dwUsage, 0, D3DPOOL_MANAGED, &_VB[i], nullptr)); + HW.stats_manager.increment_stats_vb(_VB[i]); + R_CHK(_VB[i]->Lock(0, 0, (void**)&pData, 0)); fs->r(pData, vCount * vSize); // CopyMemory (pData,fs->pointer(),vCount*vSize); //.???? copy while skip T&B - VB[i]->Unlock(); + _VB[i]->Unlock(); // fs->advance (vCount*vSize); } @@ -235,7 +271,7 @@ void CRender::LoadBuffers(CStreamReader* base_fs) { CStreamReader* fs = base_fs->open_chunk(fsL_IB); u32 count = fs->r_u32(); - IB.resize(count); + _IB.resize(count); for (u32 i = 0; i < count; i++) { u32 iCount = fs->r_u32(); @@ -243,12 +279,12 @@ void CRender::LoadBuffers(CStreamReader* base_fs) // Create and fill BYTE* pData = nullptr; - R_CHK(HW.pDevice->CreateIndexBuffer(iCount * 2, dwUsage, D3DFMT_INDEX16, D3DPOOL_MANAGED, &IB[i], nullptr)); - HW.stats_manager.increment_stats(iCount * 2, enum_stats_buffer_type_index, D3DPOOL_MANAGED); - R_CHK(IB[i]->Lock(0, 0, (void**)&pData, 0)); + R_CHK(HW.pDevice->CreateIndexBuffer(iCount * 2, dwUsage, D3DFMT_INDEX16, D3DPOOL_MANAGED, &_IB[i], nullptr)); + HW.stats_manager.increment_stats_ib(_IB[i]); + R_CHK(_IB[i]->Lock(0, 0, (void**)&pData, 0)); // CopyMemory (pData,fs->pointer(),iCount*2); fs->r(pData, iCount * 2); - IB[i]->Unlock(); + _IB[i]->Unlock(); // fs->advance (iCount*2); } @@ -278,7 +314,7 @@ void CRender::LoadVisuals(IReader* fs) void CRender::LoadLights(IReader* fs) { // lights - L_DB->Load(fs); + Lights.Load(fs); // glows IReader* chunk = fs->open_chunk(fsL_GLOWS); diff --git a/src/Layers/xrRenderPC_R2/r2.cpp b/src/Layers/xrRenderPC_R2/r2.cpp index 415c36b2531..cf6d8ff21a9 100644 --- a/src/Layers/xrRenderPC_R2/r2.cpp +++ b/src/Layers/xrRenderPC_R2/r2.cpp @@ -491,9 +491,9 @@ IRenderVisual* CRender::getVisual(int id) VERIFY(id < int(Visuals.size())); return Visuals[id]; } -D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) +D3DVERTEXELEMENT9* CRender::getVB_Format(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xDC.size())); return xDC[id].begin(); @@ -504,9 +504,9 @@ D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) return nDC[id].begin(); } } -IDirect3DVertexBuffer9* CRender::getVB(int id, BOOL _alt) +ID3DVertexBuffer* CRender::getVB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xVB.size())); return xVB[id]; @@ -517,9 +517,9 @@ IDirect3DVertexBuffer9* CRender::getVB(int id, BOOL _alt) return nVB[id]; } } -IDirect3DIndexBuffer9* CRender::getIB(int id, BOOL _alt) +ID3DIndexBuffer* CRender::getIB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xIB.size())); return xIB[id]; diff --git a/src/Layers/xrRenderPC_R2/r2.h b/src/Layers/xrRenderPC_R2/r2.h index cf981265a4f..08768300bd7 100644 --- a/src/Layers/xrRenderPC_R2/r2.h +++ b/src/Layers/xrRenderPC_R2/r2.h @@ -118,8 +118,8 @@ class CRender : public D3DXRenderBase xr_vector Shaders; typedef svector VertexDeclarator; xr_vector nDC, xDC; - xr_vector nVB, xVB; - xr_vector nIB, xIB; + xr_vector nVB, xVB; + xr_vector nIB, xIB; xr_vector Visuals; CPSLibrary PSLibrary; @@ -153,7 +153,7 @@ class CRender : public D3DXRenderBase private: // Loading / Unloading - void LoadBuffers(CStreamReader* fs, BOOL _alternative); + void LoadBuffers(CStreamReader* fs, bool alternative); void LoadVisuals(IReader* fs); void LoadLights(IReader* fs); void LoadPortals(IReader* fs); @@ -183,9 +183,9 @@ class CRender : public D3DXRenderBase public: ShaderElement* rimp_select_sh_static(dxRender_Visual* pVisual, float cdist_sq); ShaderElement* rimp_select_sh_dynamic(dxRender_Visual* pVisual, float cdist_sq); - D3DVERTEXELEMENT9* getVB_Format(int id, BOOL _alt = FALSE); - IDirect3DVertexBuffer9* getVB(int id, BOOL _alt = FALSE); - IDirect3DIndexBuffer9* getIB(int id, BOOL _alt = FALSE); + D3DVERTEXELEMENT9* getVB_Format(int id, bool alternative = false); + ID3DVertexBuffer* getVB(int id, bool alternative = false); + ID3DIndexBuffer* getIB(int id, bool alternative = false); FSlideWindowItem* getSWI(int id); IRender_Portal* getPortal(int id); IRender_Sector* getSectorActive(); diff --git a/src/Layers/xrRenderPC_R2/r2_loader.cpp b/src/Layers/xrRenderPC_R2/r2_loader.cpp index 1c3eb2aa576..315ea7f4e9d 100644 --- a/src/Layers/xrRenderPC_R2/r2_loader.cpp +++ b/src/Layers/xrRenderPC_R2/r2_loader.cpp @@ -59,7 +59,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geom"); R_ASSERT2(geom, "level.geom"); - LoadBuffers(geom, FALSE); + LoadBuffers(geom, false); LoadSWIs(geom); FS.r_close(geom); } @@ -68,7 +68,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geomx"); R_ASSERT2(geom, "level.geomX"); - LoadBuffers(geom, TRUE); + LoadBuffers(geom, true); FS.r_close(geom); } @@ -203,15 +203,15 @@ void CRender::level_Unload() */ } -void CRender::LoadBuffers(CStreamReader* base_fs, BOOL _alternative) +void CRender::LoadBuffers(CStreamReader* base_fs, bool alternative) { R_ASSERT2(base_fs, "Could not load geometry. File not found."); Resources->Evict(); u32 dwUsage = D3DUSAGE_WRITEONLY; - xr_vector& _DC = _alternative ? xDC : nDC; - xr_vector& _VB = _alternative ? xVB : nVB; - xr_vector& _IB = _alternative ? xIB : nIB; + xr_vector& _DC = alternative ? xDC : nDC; + xr_vector& _VB = alternative ? xVB : nVB; + xr_vector& _IB = alternative ? xIB : nIB; // Vertex buffers { diff --git a/src/Layers/xrRenderPC_R2/r2_rendertarget.h b/src/Layers/xrRenderPC_R2/r2_rendertarget.h index f2eb54f3c9d..9fd78348cec 100644 --- a/src/Layers/xrRenderPC_R2/r2_rendertarget.h +++ b/src/Layers/xrRenderPC_R2/r2_rendertarget.h @@ -108,17 +108,17 @@ class CRenderTarget : public IRender_Target ref_geom g_accum_omnipart; ref_geom g_accum_volumetric; - IDirect3DVertexBuffer9* g_accum_point_vb; - IDirect3DIndexBuffer9* g_accum_point_ib; + ID3DVertexBuffer* g_accum_point_vb; + ID3DIndexBuffer* g_accum_point_ib; - IDirect3DVertexBuffer9* g_accum_omnip_vb; - IDirect3DIndexBuffer9* g_accum_omnip_ib; + ID3DVertexBuffer* g_accum_omnip_vb; + ID3DIndexBuffer* g_accum_omnip_ib; - IDirect3DVertexBuffer9* g_accum_spot_vb; - IDirect3DIndexBuffer9* g_accum_spot_ib; + ID3DVertexBuffer* g_accum_spot_vb; + ID3DIndexBuffer* g_accum_spot_ib; - IDirect3DVertexBuffer9* g_accum_volumetric_vb; - IDirect3DIndexBuffer9* g_accum_volumetric_ib; + ID3DVertexBuffer* g_accum_volumetric_vb; + ID3DIndexBuffer* g_accum_volumetric_ib; // SSAO ref_shader s_ssao; diff --git a/src/Layers/xrRenderPC_R3/blender_light_direct.cpp b/src/Layers/xrRenderPC_R3/blender_light_direct.cpp index 9d5a3973f00..1c97a3e925b 100644 --- a/src/Layers/xrRenderPC_R3/blender_light_direct.cpp +++ b/src/Layers/xrRenderPC_R3/blender_light_direct.cpp @@ -77,8 +77,8 @@ void CBlender_accum_direct::Compile(CBlender_Compile& C) jitter(C); { u32 s = C.r_dx10Sampler("smp_smap"); - C.i_dx10Address(s, D3DTADDRESS_BORDER); - C.i_dx10BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); + C.i_Address(s, D3DTADDRESS_BORDER); + C.i_BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); } C.r_End(); @@ -251,8 +251,8 @@ void CBlender_accum_direct_msaa::Compile(CBlender_Compile& C) jitter(C); { u32 s = C.r_dx10Sampler("smp_smap"); - C.i_dx10Address(s, D3DTADDRESS_BORDER); - C.i_dx10BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); + C.i_Address(s, D3DTADDRESS_BORDER); + C.i_BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); } C.r_End(); diff --git a/src/Layers/xrRenderPC_R3/r3.cpp b/src/Layers/xrRenderPC_R3/r3.cpp index efb1d0e24df..44d6983ec3c 100644 --- a/src/Layers/xrRenderPC_R3/r3.cpp +++ b/src/Layers/xrRenderPC_R3/r3.cpp @@ -616,9 +616,9 @@ IRenderVisual* CRender::getVisual(int id) VERIFY(id < int(Visuals.size())); return Visuals[id]; } -D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) +D3DVERTEXELEMENT9* CRender::getVB_Format(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xDC.size())); return xDC[id].begin(); @@ -629,9 +629,9 @@ D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) return nDC[id].begin(); } } -ID3DVertexBuffer* CRender::getVB(int id, BOOL _alt) +ID3DVertexBuffer* CRender::getVB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xVB.size())); return xVB[id]; @@ -642,9 +642,9 @@ ID3DVertexBuffer* CRender::getVB(int id, BOOL _alt) return nVB[id]; } } -ID3DIndexBuffer* CRender::getIB(int id, BOOL _alt) +ID3DIndexBuffer* CRender::getIB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xIB.size())); return xIB[id]; diff --git a/src/Layers/xrRenderPC_R3/r3.h b/src/Layers/xrRenderPC_R3/r3.h index f4e2ab197a4..f2d5d9205c3 100644 --- a/src/Layers/xrRenderPC_R3/r3.h +++ b/src/Layers/xrRenderPC_R3/r3.h @@ -185,7 +185,7 @@ class CRender : public D3DXRenderBase private: // Loading / Unloading - void LoadBuffers(CStreamReader* fs, BOOL _alternative); + void LoadBuffers(CStreamReader* fs, bool alternative); void LoadVisuals(IReader* fs); void LoadLights(IReader* fs); void LoadPortals(IReader* fs); @@ -217,9 +217,9 @@ class CRender : public D3DXRenderBase ShaderElement* rimp_select_sh_static(dxRender_Visual* pVisual, float cdist_sq); ShaderElement* rimp_select_sh_dynamic(dxRender_Visual* pVisual, float cdist_sq); - D3DVERTEXELEMENT9* getVB_Format(int id, BOOL _alt = FALSE); - ID3DVertexBuffer* getVB(int id, BOOL _alt = FALSE); - ID3DIndexBuffer* getIB(int id, BOOL _alt = FALSE); + D3DVERTEXELEMENT9* getVB_Format(int id, bool alternative = false); + ID3DVertexBuffer* getVB(int id, bool alternative = false); + ID3DIndexBuffer* getIB(int id, bool alternative = false); FSlideWindowItem* getSWI(int id); IRender_Portal* getPortal(int id); IRender_Sector* getSectorActive(); diff --git a/src/Layers/xrRenderPC_R3/r3_loader.cpp b/src/Layers/xrRenderPC_R3/r3_loader.cpp index 97c573c71e7..6bc6c07f605 100644 --- a/src/Layers/xrRenderPC_R3/r3_loader.cpp +++ b/src/Layers/xrRenderPC_R3/r3_loader.cpp @@ -62,7 +62,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geom"); R_ASSERT2(geom, "level.geom"); - LoadBuffers(geom, FALSE); + LoadBuffers(geom, false); LoadSWIs(geom); FS.r_close(geom); } @@ -71,7 +71,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geomx"); R_ASSERT2(geom, "level.geomX"); - LoadBuffers(geom, TRUE); + LoadBuffers(geom, true); FS.r_close(geom); } @@ -207,15 +207,15 @@ void CRender::level_Unload() b_loaded = FALSE; } -void CRender::LoadBuffers(CStreamReader* base_fs, BOOL _alternative) +void CRender::LoadBuffers(CStreamReader* base_fs, bool alternative) { R_ASSERT2(base_fs, "Could not load geometry. File not found."); Resources->Evict(); // u32 dwUsage = D3DUSAGE_WRITEONLY; - xr_vector& _DC = _alternative ? xDC : nDC; - xr_vector& _VB = _alternative ? xVB : nVB; - xr_vector& _IB = _alternative ? xIB : nIB; + xr_vector& _DC = alternative ? xDC : nDC; + xr_vector& _VB = alternative ? xVB : nVB; + xr_vector& _IB = alternative ? xIB : nIB; // Vertex buffers { diff --git a/src/Layers/xrRenderPC_R4/CSCompiler.cpp b/src/Layers/xrRenderPC_R4/CSCompiler.cpp index 0411d1e5dcd..9c58cb90fd0 100644 --- a/src/Layers/xrRenderPC_R4/CSCompiler.cpp +++ b/src/Layers/xrRenderPC_R4/CSCompiler.cpp @@ -23,8 +23,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) // Use D3DTADDRESS_CLAMP, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT if (0 == xr_strcmp(ResourceName, "smp_nofilter")) { - // i_dx10Address( stage, D3DTADDRESS_CLAMP); - // i_dx10Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); + // i_Address( stage, D3DTADDRESS_CLAMP); + // i_Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; return defSampler(ResourceName, desc); @@ -33,8 +33,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) // Use D3DTADDRESS_CLAMP, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_rtlinear")) { - // i_dx10Address( stage, D3DTADDRESS_CLAMP); - // i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + // i_Address( stage, D3DTADDRESS_CLAMP); + // i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; desc.Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; return defSampler(ResourceName, desc); @@ -43,8 +43,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) // Use D3DTADDRESS_WRAP, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_linear")) { - // i_dx10Address( stage, D3DTADDRESS_WRAP); - // i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); + // i_Address( stage, D3DTADDRESS_WRAP); + // i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_LINEAR, D3DTEXF_LINEAR); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; return defSampler(ResourceName, desc); @@ -53,7 +53,7 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) // Use D3DTADDRESS_WRAP, D3DTEXF_ANISOTROPIC, D3DTEXF_LINEAR, D3DTEXF_ANISOTROPIC if (0 == xr_strcmp(ResourceName, "smp_base")) { - // i_dx10Address( stage, D3DTADDRESS_WRAP); + // i_Address( stage, D3DTADDRESS_WRAP); // i_dx10FilterAnizo( stage, TRUE); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; desc.Filter = D3D11_FILTER_ANISOTROPIC; @@ -64,8 +64,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) // Use D3DTADDRESS_CLAMP, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR if (0 == xr_strcmp(ResourceName, "smp_material")) { - // i_dx10Address( stage, D3DTADDRESS_CLAMP); - // i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + // i_Address( stage, D3DTADDRESS_CLAMP); + // i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); // RS.SetSAMP(stage,D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP); desc.AddressU = desc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; @@ -75,8 +75,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) if (0 == xr_strcmp(ResourceName, "smp_smap")) { - // i_dx10Address( stage, D3DTADDRESS_CLAMP); - // i_dx10Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); + // i_Address( stage, D3DTADDRESS_CLAMP); + // i_Filter(stage, D3DTEXF_LINEAR, D3DTEXF_NONE, D3DTEXF_LINEAR); // RS.SetSAMP(stage, XRDX10SAMP_COMPARISONFILTER, TRUE); // RS.SetSAMP(stage, XRDX10SAMP_COMPARISONFUNC, D3D_COMPARISON_LESS_EQUAL); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; @@ -87,8 +87,8 @@ CSCompiler& CSCompiler::defSampler(LPCSTR ResourceName) if (0 == xr_strcmp(ResourceName, "smp_jitter")) { - // i_dx10Address( stage, D3DTADDRESS_WRAP); - // i_dx10Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); + // i_Address( stage, D3DTADDRESS_WRAP); + // i_Filter(stage, D3DTEXF_POINT, D3DTEXF_NONE, D3DTEXF_POINT); desc.AddressU = desc.AddressV = desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; return defSampler(ResourceName, desc); diff --git a/src/Layers/xrRenderPC_R4/blender_light_direct.cpp b/src/Layers/xrRenderPC_R4/blender_light_direct.cpp index 9d5a3973f00..1c97a3e925b 100644 --- a/src/Layers/xrRenderPC_R4/blender_light_direct.cpp +++ b/src/Layers/xrRenderPC_R4/blender_light_direct.cpp @@ -77,8 +77,8 @@ void CBlender_accum_direct::Compile(CBlender_Compile& C) jitter(C); { u32 s = C.r_dx10Sampler("smp_smap"); - C.i_dx10Address(s, D3DTADDRESS_BORDER); - C.i_dx10BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); + C.i_Address(s, D3DTADDRESS_BORDER); + C.i_BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); } C.r_End(); @@ -251,8 +251,8 @@ void CBlender_accum_direct_msaa::Compile(CBlender_Compile& C) jitter(C); { u32 s = C.r_dx10Sampler("smp_smap"); - C.i_dx10Address(s, D3DTADDRESS_BORDER); - C.i_dx10BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); + C.i_Address(s, D3DTADDRESS_BORDER); + C.i_BorderColor(s, D3DCOLOR_ARGB(255, 255, 255, 255)); } C.r_End(); diff --git a/src/Layers/xrRenderPC_R4/r4.cpp b/src/Layers/xrRenderPC_R4/r4.cpp index 2d8b24bff1b..ecc0dff3606 100644 --- a/src/Layers/xrRenderPC_R4/r4.cpp +++ b/src/Layers/xrRenderPC_R4/r4.cpp @@ -627,9 +627,9 @@ IRenderVisual* CRender::getVisual(int id) VERIFY(id < int(Visuals.size())); return Visuals[id]; } -D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) +D3DVERTEXELEMENT9* CRender::getVB_Format(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xDC.size())); return xDC[id].begin(); @@ -640,9 +640,9 @@ D3DVERTEXELEMENT9* CRender::getVB_Format(int id, BOOL _alt) return nDC[id].begin(); } } -ID3DVertexBuffer* CRender::getVB(int id, BOOL _alt) +ID3DVertexBuffer* CRender::getVB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xVB.size())); return xVB[id]; @@ -653,9 +653,9 @@ ID3DVertexBuffer* CRender::getVB(int id, BOOL _alt) return nVB[id]; } } -ID3DIndexBuffer* CRender::getIB(int id, BOOL _alt) +ID3DIndexBuffer* CRender::getIB(int id, bool alternative) { - if (_alt) + if (alternative) { VERIFY(id < int(xIB.size())); return xIB[id]; diff --git a/src/Layers/xrRenderPC_R4/r4.h b/src/Layers/xrRenderPC_R4/r4.h index 673729eea34..587e8a2b1bb 100644 --- a/src/Layers/xrRenderPC_R4/r4.h +++ b/src/Layers/xrRenderPC_R4/r4.h @@ -193,7 +193,7 @@ class CRender : public D3DXRenderBase private: // Loading / Unloading - void LoadBuffers(CStreamReader* fs, BOOL _alternative); + void LoadBuffers(CStreamReader* fs, bool alternative); void LoadVisuals(IReader* fs); void LoadLights(IReader* fs); void LoadPortals(IReader* fs); @@ -226,9 +226,9 @@ class CRender : public D3DXRenderBase public: ShaderElement* rimp_select_sh_static(dxRender_Visual* pVisual, float cdist_sq); ShaderElement* rimp_select_sh_dynamic(dxRender_Visual* pVisual, float cdist_sq); - D3DVERTEXELEMENT9* getVB_Format(int id, BOOL _alt = FALSE); - ID3DVertexBuffer* getVB(int id, BOOL _alt = FALSE); - ID3DIndexBuffer* getIB(int id, BOOL _alt = FALSE); + D3DVERTEXELEMENT9* getVB_Format(int id, bool alternative = false); + ID3DVertexBuffer* getVB(int id, bool alternative = false); + ID3DIndexBuffer* getIB(int id, bool alternative = false); FSlideWindowItem* getSWI(int id); IRender_Portal* getPortal(int id); IRender_Sector* getSectorActive(); diff --git a/src/Layers/xrRenderPC_R4/r4_loader.cpp b/src/Layers/xrRenderPC_R4/r4_loader.cpp index 71b59e8511c..88aad26ad8d 100644 --- a/src/Layers/xrRenderPC_R4/r4_loader.cpp +++ b/src/Layers/xrRenderPC_R4/r4_loader.cpp @@ -62,7 +62,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geom"); R_ASSERT2(geom, "level.geom"); - LoadBuffers(geom, FALSE); + LoadBuffers(geom, false); LoadSWIs(geom); FS.r_close(geom); } @@ -71,7 +71,7 @@ void CRender::level_Load(IReader* fs) { CStreamReader* geom = FS.rs_open("$level$", "level.geomx"); R_ASSERT2(geom, "level.geomX"); - LoadBuffers(geom, TRUE); + LoadBuffers(geom, true); FS.r_close(geom); } @@ -186,15 +186,15 @@ void CRender::level_Unload() b_loaded = FALSE; } -void CRender::LoadBuffers(CStreamReader* base_fs, BOOL _alternative) +void CRender::LoadBuffers(CStreamReader* base_fs, bool alternative) { R_ASSERT2(base_fs, "Could not load geometry. File not found."); RImplementation.Resources->Evict(); // u32 dwUsage = D3DUSAGE_WRITEONLY; - xr_vector& _DC = _alternative ? xDC : nDC; - xr_vector& _VB = _alternative ? xVB : nVB; - xr_vector& _IB = _alternative ? xIB : nIB; + xr_vector& _DC = alternative ? xDC : nDC; + xr_vector& _VB = alternative ? xVB : nVB; + xr_vector& _IB = alternative ? xIB : nIB; // Vertex buffers { diff --git a/src/xrEngine/xr_input_xinput.cpp b/src/xrEngine/xr_input_xinput.cpp index b92c97e4925..79d97978b5a 100644 --- a/src/xrEngine/xr_input_xinput.cpp +++ b/src/xrEngine/xr_input_xinput.cpp @@ -8,113 +8,111 @@ ENGINE_API _key_group g_current_keygroup = _sp; // clang-format off _action actions[] = { - { "left", kLEFT, _both }, - { "right", kRIGHT, _both }, - { "up", kUP, _both }, - { "down", kDOWN, _both }, - { "jump", kJUMP, _both }, - { "crouch", kCROUCH, _both }, - { "accel", kACCEL, _both }, - { "sprint_toggle", kSPRINT_TOGGLE, _both }, - - { "forward", kFWD, _both }, - { "back", kBACK, _both }, - { "lstrafe", kL_STRAFE, _both }, - { "rstrafe", kR_STRAFE, _both }, - - { "llookout", kL_LOOKOUT, _both }, - { "rlookout", kR_LOOKOUT, _both }, - - { "cam_1", kCAM_1, _both }, - { "cam_2", kCAM_2, _both }, - { "cam_3", kCAM_3, _both }, - { "cam_zoom_in", kCAM_ZOOM_IN, _both }, - { "cam_zoom_out", kCAM_ZOOM_OUT, _both }, - - { "torch", kTORCH, _both }, - { "night_vision", kNIGHT_VISION, _both }, - { "show_detector", kDETECTOR, _sp }, - - { "wpn_1", kWPN_1, _both }, - { "wpn_2", kWPN_2, _both }, - { "wpn_3", kWPN_3, _both }, - { "wpn_4", kWPN_4, _both }, - { "wpn_5", kWPN_5, _both }, - { "wpn_6", kWPN_6, _both }, - { "artefact", kARTEFACT, _both /*_mp*/ }, - { "wpn_next", kWPN_NEXT, _both }, // means next ammo type - { "wpn_fire", kWPN_FIRE, _both }, - { "wpn_zoom", kWPN_ZOOM, _both }, - { "wpn_zoom_inc", kWPN_ZOOM_INC, _both }, - { "wpn_zoom_dec", kWPN_ZOOM_DEC, _both }, - { "wpn_reload", kWPN_RELOAD, _both }, - { "wpn_func", kWPN_FUNC, _both }, + { "left", kLEFT, _both }, + { "right", kRIGHT, _both }, + { "up", kUP, _both }, + { "down", kDOWN, _both }, + { "jump", kJUMP, _both }, + { "crouch", kCROUCH, _both }, + { "accel", kACCEL, _both }, + { "sprint_toggle", kSPRINT_TOGGLE, _both }, + + { "forward", kFWD, _both }, + { "back", kBACK, _both }, + { "lstrafe", kL_STRAFE, _both }, + { "rstrafe", kR_STRAFE, _both }, + + { "llookout", kL_LOOKOUT, _both }, + { "rlookout", kR_LOOKOUT, _both }, + + { "cam_1", kCAM_1, _both }, + { "cam_2", kCAM_2, _both }, + { "cam_3", kCAM_3, _both }, + { "cam_zoom_in", kCAM_ZOOM_IN, _both }, + { "cam_zoom_out", kCAM_ZOOM_OUT, _both }, + + { "torch", kTORCH, _both }, + { "night_vision", kNIGHT_VISION, _both }, + { "show_detector", kDETECTOR, _sp }, + + { "wpn_1", kWPN_1, _both }, + { "wpn_2", kWPN_2, _both }, + { "wpn_3", kWPN_3, _both }, + { "wpn_4", kWPN_4, _both }, + { "wpn_5", kWPN_5, _both }, + { "wpn_6", kWPN_6, _both }, + { "artefact", kARTEFACT, _both /*_mp*/ }, + { "wpn_next", kWPN_NEXT, _both }, // means next ammo type + { "wpn_fire", kWPN_FIRE, _both }, + { "wpn_zoom", kWPN_ZOOM, _both }, + { "wpn_zoom_inc", kWPN_ZOOM_INC, _both }, + { "wpn_zoom_dec", kWPN_ZOOM_DEC, _both }, + { "wpn_reload", kWPN_RELOAD, _both }, + { "wpn_func", kWPN_FUNC, _both }, { "wpn_firemode_prev", kWPN_FIREMODE_PREV, _both }, { "wpn_firemode_next", kWPN_FIREMODE_NEXT, _both }, - { "pause", kPAUSE, _both }, - { "drop", kDROP, _both }, - { "use", kUSE, _both }, - { "scores", kSCORES, _both }, - { "chat", kCHAT, _both }, - { "chat_team", kCHAT_TEAM, _both }, - { "screenshot", kSCREENSHOT, _both }, - { "quit", kQUIT, _both }, - { "console", kCONSOLE, _both }, - { "inventory", kINVENTORY, _both }, - { "buy_menu", kBUY, _both }, - { "skin_menu", kSKIN, _both }, - { "team_menu", kTEAM, _both }, - { "active_jobs", kACTIVE_JOBS, _sp }, - - { "vote_begin", kVOTE_BEGIN, _both }, - { "show_admin_menu", kSHOW_ADMIN_MENU, _both }, - { "vote", kVOTE, _both }, - { "vote_yes", kVOTEYES, _both }, - { "vote_no", kVOTENO, _both }, - - { "next_slot", kNEXT_SLOT, _both }, - { "prev_slot", kPREV_SLOT, _both }, - - { "speech_menu_0", kSPEECH_MENU_0, _both }, - { "speech_menu_1", kSPEECH_MENU_1, _both }, - - { "quick_use_1", kQUICK_USE_1, _both }, - { "quick_use_2", kQUICK_USE_2, _both }, - { "quick_use_3", kQUICK_USE_3, _both }, - { "quick_use_4", kQUICK_USE_4, _both }, - - { "quick_save", kQUICK_SAVE, _sp }, - { "quick_load", kQUICK_LOAD, _sp }, - //{ "alife_command", kALIFE_CMD, _sp}, - - { "custom1", kCUSTOM1, _sp }, - { "custom2", kCUSTOM2, _sp }, - { "custom3", kCUSTOM3, _sp }, - { "custom4", kCUSTOM4, _sp }, - { "custom5", kCUSTOM5, _sp }, - { "custom6", kCUSTOM6, _sp }, - { "custom7", kCUSTOM7, _sp }, - { "custom8", kCUSTOM8, _sp }, - { "custom9", kCUSTOM9, _sp }, - { "custom10", kCUSTOM10, _sp }, - { "custom11", kCUSTOM11, _sp }, - { "custom12", kCUSTOM12, _sp }, - { "custom13", kCUSTOM13, _sp }, - { "custom14", kCUSTOM14, _sp }, - { "custom15", kCUSTOM15, _sp }, - { "cam_autoaim", kCAM_AUTOAIM, _sp }, - { "pda_tab1", kPDA_TAB1, _sp }, - { "pda_tab2", kPDA_TAB2, _sp }, - { "pda_tab3", kPDA_TAB3, _sp }, - { "pda_tab4", kPDA_TAB4, _sp }, - { "pda_tab5", kPDA_TAB5, _sp }, - { "pda_tab6", kPDA_TAB6, _sp }, -#ifdef COC_KICK - { "kick", kKICK, _sp }, -#endif - - { nullptr, kLASTACTION, _both } + { "pause", kPAUSE, _both }, + { "drop", kDROP, _both }, + { "use", kUSE, _both }, + { "scores", kSCORES, _both }, + { "chat", kCHAT, _both }, + { "chat_team", kCHAT_TEAM, _both }, + { "screenshot", kSCREENSHOT, _both }, + { "quit", kQUIT, _both }, + { "console", kCONSOLE, _both }, + { "inventory", kINVENTORY, _both }, + { "buy_menu", kBUY, _both }, + { "skin_menu", kSKIN, _both }, + { "team_menu", kTEAM, _both }, + { "active_jobs", kACTIVE_JOBS, _sp }, + + { "vote_begin", kVOTE_BEGIN, _both }, + { "show_admin_menu", kSHOW_ADMIN_MENU, _both }, + { "vote", kVOTE, _both }, + { "vote_yes", kVOTEYES, _both }, + { "vote_no", kVOTENO, _both }, + + { "next_slot", kNEXT_SLOT, _both }, + { "prev_slot", kPREV_SLOT, _both }, + + { "speech_menu_0", kSPEECH_MENU_0, _both }, + { "speech_menu_1", kSPEECH_MENU_1, _both }, + + { "quick_use_1", kQUICK_USE_1, _both }, + { "quick_use_2", kQUICK_USE_2, _both }, + { "quick_use_3", kQUICK_USE_3, _both }, + { "quick_use_4", kQUICK_USE_4, _both }, + + { "quick_save", kQUICK_SAVE, _sp }, + { "quick_load", kQUICK_LOAD, _sp }, + //{ "alife_command", kALIFE_CMD, _sp}, + + { "custom1", kCUSTOM1, _sp }, + { "custom2", kCUSTOM2, _sp }, + { "custom3", kCUSTOM3, _sp }, + { "custom4", kCUSTOM4, _sp }, + { "custom5", kCUSTOM5, _sp }, + { "custom6", kCUSTOM6, _sp }, + { "custom7", kCUSTOM7, _sp }, + { "custom8", kCUSTOM8, _sp }, + { "custom9", kCUSTOM9, _sp }, + { "custom10", kCUSTOM10, _sp }, + { "custom11", kCUSTOM11, _sp }, + { "custom12", kCUSTOM12, _sp }, + { "custom13", kCUSTOM13, _sp }, + { "custom14", kCUSTOM14, _sp }, + { "custom15", kCUSTOM15, _sp }, + { "cam_autoaim", kCAM_AUTOAIM, _sp }, + { "pda_tab1", kPDA_TAB1, _sp }, + { "pda_tab2", kPDA_TAB2, _sp }, + { "pda_tab3", kPDA_TAB3, _sp }, + { "pda_tab4", kPDA_TAB4, _sp }, + { "pda_tab5", kPDA_TAB5, _sp }, + { "pda_tab6", kPDA_TAB6, _sp }, + { "kick", kKICK, _sp }, + + { nullptr, kLASTACTION, _both } }; _keyboard keyboards[] = @@ -402,7 +400,7 @@ _keyboard keyboards[] = { "kBRIGHTNESSUP", SDL_SCANCODE_BRIGHTNESSUP, "Brightness Up" }, { "kDISPLAYSWITCH", SDL_SCANCODE_DISPLAYSWITCH, "Display Switch" }, - { "kKBDILLUMTOGGLE)", SDL_SCANCODE_KBDILLUMTOGGLE, "Illum Toogle" }, + { "kKBDILLUMTOGGLE", SDL_SCANCODE_KBDILLUMTOGGLE, "Illum Toogle" }, { "kKBDILLUMDOWN", SDL_SCANCODE_KBDILLUMDOWN, "Illum Down" }, { "kKBDILLUMUP", SDL_SCANCODE_KBDILLUMUP, "Illum Up" }, diff --git a/src/xrEngine/xr_input_xinput.h b/src/xrEngine/xr_input_xinput.h index 33850949945..dbe6d8c27aa 100644 --- a/src/xrEngine/xr_input_xinput.h +++ b/src/xrEngine/xr_input_xinput.h @@ -83,7 +83,7 @@ enum EGameActions kQUICK_SAVE, kQUICK_LOAD, - // kALIFE_CMD, + //kALIFE_CMD, kCUSTOM1, kCUSTOM2, @@ -110,9 +110,7 @@ enum EGameActions kPDA_TAB5, kPDA_TAB6, -#ifdef COC_KICK kKICK, // alpet: kick dynamic objects -#endif kLASTACTION, kNOTBINDED, diff --git a/src/xrGame/ui/UIScriptWnd_script.cpp b/src/xrGame/ui/UIScriptWnd_script.cpp index 3909c07e0c9..8e576577b0b 100644 --- a/src/xrGame/ui/UIScriptWnd_script.cpp +++ b/src/xrGame/ui/UIScriptWnd_script.cpp @@ -2,20 +2,26 @@ // UI-controls #include "UIScriptWnd.h" +#include "uiscriptwnd_script.h" #include "xrScriptEngine/ScriptExporter.hpp" #include "xrScriptEngine/Functor.hpp" using namespace luabind; -SCRIPT_EXPORT(CUIDialogWndEx, (CUIDialogWnd, IFactoryObject), { - module(luaState)[class_>("CUIScriptWnd") - .def("OnKeyboard", &CUIDialogWndEx::OnKeyboardAction) - .def("Update", &CUIDialogWndEx::Update) - .def("Dispatch", &CUIDialogWndEx::Dispatch) - .def("AddCallback", (void (CUIDialogWndEx::*)(LPCSTR, s16, const functor&, const object&)) & - CUIDialogWndEx::AddCallback) - .def("Register", (void (CUIDialogWndEx::*)(CUIWindow*, LPCSTR)) &CUIDialogWndEx::Register) - .def("Load", &CUIDialogWndEx::Load) - ]; +extern export_class& script_register_ui_window1(export_class&); +extern export_class& script_register_ui_window2(export_class&); + +SCRIPT_EXPORT(CUIDialogWndEx, (), { + export_class instance("CUIScriptWnd"); + + module(luaState)[script_register_ui_window2(script_register_ui_window1(instance)).def("Load", &BaseType::Load)]; }); +export_class& script_register_ui_window1(export_class& instance) +{ + instance.def(constructor<>()) + .def("AddCallback", (void (BaseType::*)(LPCSTR, s16, const luabind::functor&, const luabind::object&)) & + BaseType::AddCallback) + .def("Register", (void (BaseType::*)(CUIWindow*, LPCSTR)) & BaseType::Register); + return (instance); +} diff --git a/src/xrGame/ui/uiscriptwnd_script.h b/src/xrGame/ui/uiscriptwnd_script.h new file mode 100644 index 00000000000..a5e82218de1 --- /dev/null +++ b/src/xrGame/ui/uiscriptwnd_script.h @@ -0,0 +1,31 @@ +#pragma once + +template +struct CWrapperBase : public T, public luabind::wrap_base +{ + typedef T inherited; + typedef CWrapperBase self_type; + + virtual bool OnKeyboardAction(int dik, EUIMessages keyboard_action) + { + return luabind::call_member(this, "OnKeyboard", dik, keyboard_action); + } + static bool OnKeyboard_static(inherited* ptr, int dik, EUIMessages keyboard_action) + { + return ptr->self_type::inherited::OnKeyboardAction(dik, keyboard_action); + } + + virtual void Update() { luabind::call_member(this, "Update"); } + static void Update_static(inherited* ptr) { ptr->self_type::inherited::Update(); } + virtual bool Dispatch(int cmd, int param) { return luabind::call_member(this, "Dispatch", cmd, param); } + static bool Dispatch_static(inherited* ptr, int cmd, int param) + { + return ptr->self_type::inherited::Dispatch(cmd, param); + } +}; + +typedef CWrapperBase WrapType; +typedef CUIDialogWndEx BaseType; + +typedef luabind::class_, luabind::default_holder, WrapType> + export_class; diff --git a/src/xrGame/ui/uiscriptwnd_script2.cpp b/src/xrGame/ui/uiscriptwnd_script2.cpp new file mode 100644 index 00000000000..9a1a528aed8 --- /dev/null +++ b/src/xrGame/ui/uiscriptwnd_script2.cpp @@ -0,0 +1,31 @@ +#include "pch_script.h" + +// UI-controls + +#include "UIScriptWnd.h" +#include "xrUICore/Buttons/UIButton.h" +#include "xrUICore/MessageBox/UIMessageBox.h" +#include "xrUICore/PropertiesBox/UIPropertiesBox.h" +#include "xrUICore/Buttons/UICheckButton.h" +#include "xrUICore/Buttons/UIRadioButton.h" +#include "xrUICore/Static/UIStatic.h" +#include "xrUICore/EditBox/UIEditBox.h" +#include "xrUICore/Windows/UIFrameWindow.h" +#include "xrUICore/Windows/UIFrameLineWnd.h" +#include "xrUICore/ProgressBar/UIProgressBar.h" +#include "xrUICore/TabControl/UITabControl.h" + +#include "uiscriptwnd_script.h" + +using namespace luabind; + +#pragma optimize("s", on) +export_class& script_register_ui_window2(export_class& instance) +{ + instance.def("OnKeyboard", &BaseType::OnKeyboardAction, &WrapType::OnKeyboard_static) + .def("Update", &BaseType::Update, &WrapType::Update_static) + .def("Dispatch", &BaseType::Dispatch, &WrapType::Dispatch_static) + + ; + return (instance); +} diff --git a/src/xrGame/ui_export_script.cpp b/src/xrGame/ui_export_script.cpp index e088d455913..a70315baac3 100644 --- a/src/xrGame/ui_export_script.cpp +++ b/src/xrGame/ui_export_script.cpp @@ -13,10 +13,17 @@ using namespace luabind; CMainMenu* MainMenu(); -SCRIPT_EXPORT(UIRegistrator, (), { - module(luaState)[class_("CGameFont") - .enum_("EAligment")[value("alLeft", int(CGameFont::alLeft)), - value("alRight", int(CGameFont::alRight)), value("alCenter", int(CGameFont::alCenter))], +ICF static void UIRegistratorScriptExport(lua_State* luaState) +{ + module(luaState) + [ + class_("CGameFont") + .enum_("EAligment") + [ + value("alLeft", int(CGameFont::alLeft)), + value("alRight", int(CGameFont::alRight)), + value("alCenter", int(CGameFont::alCenter)) + ], class_("Patch_Dawnload_Progress") .def("GetInProgress", &Patch_Dawnload_Progress::GetInProgress) @@ -37,6 +44,10 @@ SCRIPT_EXPORT(UIRegistrator, (), { .def("GetAccountMngr", &CMainMenu::GetAccountMngr) .def("GetProfileStore", &CMainMenu::GetProfileStore) #endif - ]; - module(luaState, "main_menu")[def("get_main_menu", &MainMenu)]; -}); + ]; + module(luaState, "main_menu") + [ + def("get_main_menu", &MainMenu) + ]; +} +SCRIPT_EXPORT_FUNC(UIRegistrator, (), UIRegistratorScriptExport) diff --git a/src/xrGame/xrGame.vcxproj b/src/xrGame/xrGame.vcxproj index 82d5e793095..e14bf081a6a 100644 --- a/src/xrGame/xrGame.vcxproj +++ b/src/xrGame/xrGame.vcxproj @@ -1479,6 +1479,7 @@ + @@ -3451,6 +3452,10 @@ pch_script.h $(IntDir)$(ProjectName)_script.pch + + pch_script.h + $(IntDir)$(ProjectName)_script.pch + diff --git a/src/xrGame/xrGame.vcxproj.filters b/src/xrGame/xrGame.vcxproj.filters index 4c3689ae7dc..5b313fba009 100644 --- a/src/xrGame/xrGame.vcxproj.filters +++ b/src/xrGame/xrGame.vcxproj.filters @@ -6042,6 +6042,9 @@ UI\UIWindows\ScriptWnd + + UI\UIWindows\ScriptWnd + UI\UIWindows\DragDrop @@ -6458,7 +6461,6 @@ UI\UIWindows\Static - @@ -9365,6 +9367,9 @@ UI\UIWindows\ScriptWnd + + UI\UIWindows\ScriptWnd + UI\UIWindows\DragDrop @@ -9787,6 +9792,9 @@ Core\Client\Objects\items & weapons\Weapons\WeaponScript + + UI\Common\LoadingScreen + UI\UIWindows\Static diff --git a/src/xrGameSpy/GameSpy_Browser.cpp b/src/xrGameSpy/GameSpy_Browser.cpp index a7ea6f89fd5..86210440b72 100644 --- a/src/xrGameSpy/GameSpy_Browser.cpp +++ b/src/xrGameSpy/GameSpy_Browser.cpp @@ -328,7 +328,7 @@ void CGameSpy_Browser::ReadServerInfo(ServerInfo* pServerInfo, void* gsServer) { PlayerInfo PInfo; snprintf( - PInfo.Name, "%s", SBServerGetPlayerStringValueA(pServer, i, "player", "Unknown")); + PInfo.Name, sizeof(PInfo.Name) - 1, "%s", SBServerGetPlayerStringValueA(pServer, i, "player", "Unknown")); PInfo.Name[sizeof(PInfo.Name) - 1] = 0; PInfo.Frags = s16(SBServerGetPlayerIntValueA(pServer, i, "score", 0)); PInfo.Deaths = u16(SBServerGetPlayerIntValueA(pServer, i, "deaths", 0)); diff --git a/src/xrGameSpy/xrGameSpy.cpp b/src/xrGameSpy/xrGameSpy.cpp index 2c4ba709871..1e94754fd97 100644 --- a/src/xrGameSpy/xrGameSpy.cpp +++ b/src/xrGameSpy/xrGameSpy.cpp @@ -35,7 +35,8 @@ const char* GetGameVersion() { return GAME_VERSION; } int GetGameDistribution() { - int KeyValue; + int KeyValue = 0; + #ifdef WINDOWS HKEY KeyCDKey = 0;