From 859516b55c77799d056031970f372063fe46f41b Mon Sep 17 00:00:00 2001 From: SkyLoaderr Date: Wed, 10 Oct 2018 17:52:24 +0300 Subject: [PATCH] Replaced D3DPT_TRIANGLEFAN with D3DPT_TRIANGLELIST in Portal class --- src/Layers/xrRender/r__sector.cpp | 49 ++++++++++++++++++------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/Layers/xrRender/r__sector.cpp b/src/Layers/xrRender/r__sector.cpp index 206ef9a7936..95ba93a1d40 100644 --- a/src/Layers/xrRender/r__sector.cpp +++ b/src/Layers/xrRender/r__sector.cpp @@ -33,40 +33,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++) - { - C.add(poly[k]); - V[k + 1].set(poly[k], 0x800000FF); - } - V.back().set(poly[0], 0x800000FF); - C.div((float)poly.size()); - V[0].set(C, 0x800000FF); + xr_vector V; V.resize(poly.size()*3); + Fvector vCenter = { 0.0f, 0.0f, 0.0f }; + const u32 uPortalColor = 0x800000FF; + for (u32 k = 0; k < poly.size(); k++) + { + vCenter.add(poly[k]); + + V[k*3+1].set(poly[k], uPortalColor); + if (k+1 == poly.size()) + V[k*3+2].set(poly[0], uPortalColor); + else + V[k*3+2].set(poly[k+1], uPortalColor); + } + vCenter.div((float)poly.size()); + + for (u32 k = 0; k < poly.size(); k++) + V[k*3].set(vCenter, uPortalColor); RCache.set_xform_world(Fidentity); // draw solid - RCache.set_Shader(RImplementation.m_SelectionShader); - RCache.dbg_Draw(D3DPT_TRIANGLEFAN, &*V.begin(), V.size() - 2); + RCache.set_Shader (RImplementation.m_SelectionShader); + 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], uPortalColor); + V.back().set(poly[0], uPortalColor); + if (bDebug) { RImplementation.rmNear(); - } - else - { + } else { Device.SetNearer(TRUE); } - RCache.set_Shader(RImplementation.m_WireShader); - RCache.dbg_Draw(D3DPT_LINESTRIP, &*(V.begin() + 1), V.size() - 2); + RCache.set_Shader (RImplementation.m_WireShader); + RCache.dbg_Draw (D3DPT_LINESTRIP,&*V.begin(),V.size()-1); if (bDebug) { RImplementation.rmNormal(); - } - else - { + } else { Device.SetNearer(FALSE); } }