Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 53 additions & 8 deletions ogsr_engine/Layers/xrRenderPC_R4/r4_R_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ constexpr float PUDDLES_RENDER_RANGE_SQR{_sqr(150.f)};
constexpr float BASE_FOV{67.f};

// Aproximate, adjusted by fov, distance from camera to position (For right work when looking though binoculars and scopes)

IC float GetDistFromCamera(const Fvector& from_position)
{
const float distance = Device.vCameraPosition.distance_to(from_position);
Expand Down Expand Up @@ -280,6 +279,58 @@ void CRender::Render()
Target->u_setrt(cmd_list, Target->GetRenderWidth(), Target->GetRenderHeight(), nullptr, nullptr, nullptr, nullptr);
rmNormal(cmd_list);

bool _menu_pp = g_pGamePersistent ? g_pGamePersistent->OnRenderPPUI_query() : false;
if (_menu_pp)
{
PIX_EVENT(MENU_RENDER);
// Globals
cmd_list.set_CullMode(CULL_CCW);
cmd_list.set_Stencil(FALSE);
cmd_list.set_ColorWriteEnable();

// Main Render
{
Target->u_setrt(cmd_list, Target->rt_Generic_0, 0, 0, Target->rt_Base_Depth); // LDR RT
g_pGamePersistent->OnRenderPPUI_main(); // PP-UI
}

// Distort
{
const Fcolor ColorRGBA = {127.0f / 255.0f, 127.0f / 255.0f, 0.0f, 127.0f / 255.0f};
Target->u_setrt(cmd_list, Target->rt_Generic_1, 0, 0, Target->rt_Base_Depth); // Now RT is a distortion mask
cmd_list.ClearRT(Target->rt_Generic_1, ColorRGBA);
g_pGamePersistent->OnRenderPPUI_PP(); // PP-UI
}

// Actual Display
Target->u_setrt(cmd_list, Device.dwWidth, Device.dwHeight, Target->get_base_rt(), nullptr, nullptr, Target->get_base_zb());
cmd_list.set_Shader(Target->s_menu);
cmd_list.set_Geometry(Target->g_menu);

Fvector2 p0, p1;
u32 Offset;
constexpr u32 C = color_rgba(255, 255, 255, 255);
float _w = float(Device.dwWidth);
float _h = float(Device.dwHeight);
constexpr float d_Z = EPS_S;
constexpr float d_W = 1.f;
p0.set(.5f / _w, .5f / _h);
p1.set((_w + .5f) / _w, (_h + .5f) / _h);

FVF::TL* pv = (FVF::TL*)Vertex.Lock(4, Target->g_menu->vb_stride, Offset);
pv->set(EPS, float(_h + EPS), d_Z, d_W, C, p0.x, p1.y);
pv++;
pv->set(EPS, EPS, d_Z, d_W, C, p0.x, p0.y);
pv++;
pv->set(float(_w + EPS), float(_h + EPS), d_Z, d_W, C, p1.x, p1.y);
pv++;
pv->set(float(_w + EPS), EPS, d_Z, d_W, C, p1.x, p0.y);
pv++;
Vertex.Unlock(4, Target->g_menu->vb_stride);
cmd_list.Render(D3DPT_TRIANGLELIST, Offset, 0, 4, 0, 2);
return;
}

if (ShouldSkipRender())
{
Target->ResetTemporalHistory();
Expand Down Expand Up @@ -494,15 +545,9 @@ void CRender::Render()
{
if (nullptr == it)
continue;
// try
//{

for (int id = 0; id < R__NUM_CONTEXTS; ++id)
it->svis[id].flush();
/*}
catch (...)
{
Msg("! Failed to flush-OCCq on light [%d] %X", it, *(u32*)(&Lights_LastFrame[it]));
}*/
}
Lights_LastFrame.clear();
}
Expand Down
20 changes: 10 additions & 10 deletions ogsr_engine/Layers/xrRenderPC_R4/r4_rendertarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,11 @@ CRenderTarget::CRenderTarget()
TriangleGeom.create(FVF::F_TL, TriangleVB, TriangleIB);
}

// Menu
s_menu.create("distort");
g_menu.create(FVF::F_TL, RImplementation.Vertex.Buffer(), RImplementation.QuadIB);

// Reset
reset_target_dimensions();
}

Expand All @@ -563,18 +568,13 @@ CRenderTarget::~CRenderTarget()
if (pSurf)
pSurf->Release();
_SHOW_REF("t_envmap_1 - #small", pSurf);
//_SHOW_REF("t_envmap_0 - #small",t_envmap_0->pSurface);
//_SHOW_REF("t_envmap_1 - #small",t_envmap_1->pSurface);
#endif // DEBUG

t_envmap_0->surface_set(nullptr);
t_envmap_1->surface_set(nullptr);
t_envmap_0.destroy();
t_envmap_1.destroy();

// TODO: DX10: Check if we need old style SMAPs
// _RELEASE (rt_smap_ZB);

// Jitter
for (int it = 0; it < TEX_jitter_count; it++)
{
Expand Down Expand Up @@ -631,7 +631,6 @@ void CRenderTarget::increment_light_marker(CBackend& cmd_list)
{
dwLightMarkerID += 2;

// if (dwLightMarkerID>10)
const u32 iMaxMarkerValue = 255;

if (dwLightMarkerID > iMaxMarkerValue)
Expand All @@ -643,10 +642,11 @@ bool CRenderTarget::need_to_render_sunshafts()
if (!ps_r_sun_shafts)
return false;

const CEnvDescriptor& E = *g_pGamePersistent->Environment().CurrentEnv;
const Fcolor sun_color= ((light*)RImplementation.Lights.sun_adapted._get())->color;
const float fValue = E.m_fSunShaftsIntensity * u_diffuse2s(sun_color.r,sun_color.g,sun_color.b);
if (fValue<EPS) return false;
const CEnvDescriptor& E = *g_pGamePersistent->Environment().CurrentEnv;
const Fcolor sun_color = ((light*)RImplementation.Lights.sun_adapted._get())->color;
const float fValue = E.m_fSunShaftsIntensity * u_diffuse2s(sun_color.r, sun_color.g, sun_color.b);
if (fValue < EPS)
return false;

return true;
}
10 changes: 5 additions & 5 deletions ogsr_engine/Layers/xrRenderPC_R4/r4_rendertarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

class light;

static void dummy(){}
static void dummy() {}

class CRenderTarget : public IRender_Target
{
Expand Down Expand Up @@ -38,7 +38,6 @@ class CRenderTarget : public IRender_Target
ref_rt rt_Base_Depth;

// MRT-path

ref_rt rt_Position; // 64bit, fat (x,y,z,?) (eye-space)
ref_rt rt_Color; // 64/32bit,fat (r,g,b,specular-gloss) (or decompressed MET-8-8-8-8)
ref_rt rt_Velocity; // r2_RT_velocity
Expand Down Expand Up @@ -112,7 +111,6 @@ class CRenderTarget : public IRender_Target

private:
// OCCq

ref_shader s_occq;

// Accum
Expand Down Expand Up @@ -190,6 +188,8 @@ class CRenderTarget : public IRender_Target

ref_shader s_postprocess;
ref_geom g_postprocess;
ref_shader s_menu;
ref_geom g_menu;

private:
float im_noise_time;
Expand Down Expand Up @@ -230,13 +230,14 @@ class CRenderTarget : public IRender_Target

void u_compute_texgen_screen(CBackend& cmd_list, Fmatrix& dest);

ID3DRenderTargetView* get_base_rt() const { return rt_base[0/*HW.CurrentBackBuffer*/]->pRT; }
ID3DRenderTargetView* get_base_rt() const { return rt_base[0]->pRT; }
ID3DDepthStencilView* get_base_zb() const { return rt_Base_Depth->pZRT[CHW::IMM_CTX_ID]; }

void u_setrt(CBackend& cmd_list, const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, const ref_rt& _4, ID3DDepthStencilView* zb);
void u_setrt(CBackend& cmd_list, const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, ID3DDepthStencilView* zb);
void u_setrt(CBackend& cmd_list, const ref_rt& _1, const ref_rt& _2, ID3DDepthStencilView* zb);
void u_setrt(CBackend& cmd_list, u32 W, u32 H, ID3DRenderTargetView* _1, ID3DRenderTargetView* _2, ID3DRenderTargetView* _3, ID3DDepthStencilView* zb);
void u_setrt(CBackend& cmd_list, const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, const ref_rt& _zb) { u_setrt(cmd_list, _1, _2, _3, _zb ? _zb->pZRT[cmd_list.context_id] : nullptr); }

void u_calc_tc_noise(CBackend& cmd_list, Fvector2& p0, Fvector2& p1);
void u_calc_tc_duality_ss(Fvector2& r0, Fvector2& r1, Fvector2& l0, Fvector2& l1);
Expand Down Expand Up @@ -383,5 +384,4 @@ class CRenderTarget : public IRender_Target
public:
ID3D11Texture2D* m_ImguiTex{};
ID3D11ShaderResourceView* m_ImguiSRV{};

};
62 changes: 8 additions & 54 deletions ogsr_engine/xrGame/MainMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,17 @@
#include "..\xr_3da\DiscordRPC.hpp"
#include "object_broker.h"

string128 ErrMsgBoxTemplate[] = {"message_box_session_full", "msg_box_error_loading"};

extern bool b_shniaganeed_pp;

CMainMenu* MainMenu() { return (CMainMenu*)g_pGamePersistent->m_pMainMenu; };
//----------------------------------------------------------------------------------
#define INIT_MSGBOX(_box, _template) \
{ \
_box = xr_new<CUIMessageBoxEx>(); \
_box->Init(_template); \
}
//----------------------------------------------------------------------------------

CMainMenu::CMainMenu()
{
m_Flags.zero();
m_startDialog = NULL;
m_screenshotFrame = u32(-1);
g_pGamePersistent->m_pMainMenu = this;

if (Device.b_is_Ready)
OnDeviceCreate();

Expand All @@ -44,25 +36,14 @@ CMainMenu::CMainMenu()
m_deactivated_frame = 0;
languageChanged = false;

m_NeedErrDialog = ErrNoError;
m_start_time = 0;

g_btnHint = xr_new<CUIButtonHint>();

for (u32 i = 0; i < u32(ErrMax); i++)
{
CUIMessageBoxEx* pNewErrDlg;
INIT_MSGBOX(pNewErrDlg, ErrMsgBoxTemplate[i]);
m_pMB_ErrDlgs.push_back(pNewErrDlg);
}
}

CMainMenu::~CMainMenu()
{
xr_delete(g_btnHint);
xr_delete(m_startDialog);
g_pGamePersistent->m_pMainMenu = NULL;
delete_data(m_pMB_ErrDlgs);
CurrentSound.destroy();
}

Expand Down Expand Up @@ -100,8 +81,6 @@ void CMainMenu::ReadTextureInfo()
xr_strcat(fn1, fn3);
xr_strcat(fn1, ".xml");

//xr_string fn1 = (*fit).name;

CUITextureMaster::ParseShTexInfo(fn1);
}
}
Expand Down Expand Up @@ -161,6 +140,7 @@ void CMainMenu::Activate(bool bActivate)
Device.seqRender.Remove(g_pGameLevel);
CCameraManager::ResetPP();
}

Device.seqRender.Add(this, 5); // 1-console 2-cursor 3-tutorial

if (!g_pGameLevel)
Expand Down Expand Up @@ -215,7 +195,7 @@ void CMainMenu::Activate(bool bActivate)
if (m_Flags.test(flNeedVidRestart))
{
m_Flags.set(flNeedVidRestart, FALSE);
Device.PreCache(20, false, false); // Console->Execute("vid_restart");
Device.PreCache(20, false, false);
}
}
}
Expand All @@ -225,6 +205,7 @@ bool CMainMenu::IsActive() { return !!m_Flags.test(flActive); }
bool CMainMenu::CanSkipSceneRendering() { return IsActive() && !m_Flags.test(flGameSaveScreenshot); }

bool CMainMenu::IsLanguageChanged() const { return languageChanged; }

void CMainMenu::SetLanguageChanged(bool status) { languageChanged = status; }

// IInputReceiver
Expand Down Expand Up @@ -319,14 +300,14 @@ void CMainMenu::OnRender()
if (m_Flags.test(flGameSaveScreenshot))
return;

// if (g_pGameLevel)
if (g_pGameLevel)
Render->Calculate();

Render->Render();

::Render->ui_is_rendering = true;

// if (!OnRenderPPUI_query())
if (!OnRenderPPUI_query())
{
DoRenderDialogs();
UI()->RenderFont();
Expand All @@ -338,7 +319,6 @@ void CMainMenu::OnRender()

void CMainMenu::OnRenderPPUI_main()
{
/*
if (!IsActive())
return;

Expand All @@ -354,12 +334,10 @@ void CMainMenu::OnRenderPPUI_main()
}

UI()->pp_stop();
*/
}

void CMainMenu::OnRenderPPUI_PP()
{
/*
if (!IsActive())
return;

Expand All @@ -374,7 +352,6 @@ void CMainMenu::OnRenderPPUI_PP()
(*it)->Draw();
}
UI()->pp_stop();
*/
}

void CMainMenu::StartStopMenu(CUIDialogWnd* pDialog, bool bDoHideIndicators)
Expand All @@ -394,6 +371,7 @@ void CMainMenu::OnFrame()
else
IR_Release();
}

CDialogHolder::OnFrame();

// screenshot stuff
Expand All @@ -413,9 +391,6 @@ void CMainMenu::OnFrame()
Console->Show();
}

if (IsActive())
CheckForErrorDlg();

if (languageChanged)
{
languageChanged = false;
Expand Down Expand Up @@ -453,34 +428,13 @@ void CMainMenu::RegisterPPDraw(CUIWindow* w)

void CMainMenu::UnregisterPPDraw(CUIWindow* w) { m_pp_draw_wnds.erase(std::remove(m_pp_draw_wnds.begin(), m_pp_draw_wnds.end(), w), m_pp_draw_wnds.end()); }

void CMainMenu::SetErrorDialog(EErrorDlg ErrDlg) { m_NeedErrDialog = ErrDlg; };

void CMainMenu::CheckForErrorDlg()
{
if (m_NeedErrDialog == ErrNoError)
return;
StartStopMenu(m_pMB_ErrDlgs[m_NeedErrDialog], false);
m_NeedErrDialog = ErrNoError;
};

void CMainMenu::DestroyInternal(bool bForce)
{
if (m_startDialog && ((m_deactivated_frame < Device.dwFrame + 4) || bForce))
xr_delete(m_startDialog);
}

void CMainMenu::OnSessionTerminate(LPCSTR reason)
{
if (m_NeedErrDialog == SessionTerminate && (Device.dwTimeGlobal - m_start_time) < 8000)
return;

m_start_time = Device.dwTimeGlobal;
string1024 Text;
strcpy_s(Text, sizeof(Text), "Client disconnected. ");
strcat_s(Text, sizeof(Text), reason);
m_pMB_ErrDlgs[SessionTerminate]->SetText(Text);
SetErrorDialog(CMainMenu::SessionTerminate);
}
void CMainMenu::OnSessionTerminate(LPCSTR reason) {}

void CMainMenu::SetNeedVidRestart() { m_Flags.set(flNeedVidRestart, TRUE); }

Expand Down
Loading