Skip to content

Commit dda98b1

Browse files
committed
Video modes token processing moved to xrEngine
Refresh rate processing moved to xrEngine Resolution safety check moved to xrEngine Untested multiple monitors handling xr_input.cpp: now cursor will be clipped in the window like before xr_ioc_cmd.cpp: use GetToken() instead of direct tokens usage
1 parent 8f9d286 commit dda98b1

File tree

15 files changed

+345
-435
lines changed

15 files changed

+345
-435
lines changed

src/Layers/xrRender/HW.cpp

Lines changed: 6 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@
55
#include "xrEngine/XR_IOConsole.h"
66
#include "xrCore/xr_token.h"
77

8-
extern ENGINE_API xr_vector<xr_token> AvailableVideoModes;
9-
10-
void fill_vid_mode_list(CHW* _hw);
11-
void free_vid_mode_list();
12-
138
CHW HW;
149

1510
CHW::CHW() {}
@@ -40,9 +35,7 @@ void CHW::CreateDevice(SDL_Window* m_sdlWnd)
4035
{
4136
CreateD3D();
4237

43-
bool bWindowed = !psDeviceFlags.is(rsFullscreen);
44-
if (GEnv.isDedicatedServer || Device.editor())
45-
bWindowed = true;
38+
const bool bWindowed = !psDeviceFlags.is(rsFullscreen);
4639

4740
m_DriverType = Caps.bForceGPU_REF ? D3DDEVTYPE_REF : D3DDEVTYPE_HAL;
4841

@@ -123,7 +116,8 @@ void CHW::CreateDevice(SDL_Window* m_sdlWnd)
123116
D3DPRESENT_PARAMETERS& P = DevPP;
124117
ZeroMemory(&P, sizeof(P));
125118

126-
selectResolution(P.BackBufferWidth, P.BackBufferHeight, bWindowed);
119+
DevPP.BackBufferWidth = Device.dwWidth;
120+
DevPP.BackBufferHeight = Device.dwHeight;
127121

128122
// Back buffer
129123
P.BackBufferFormat = fTarget;
@@ -160,15 +154,9 @@ void CHW::CreateDevice(SDL_Window* m_sdlWnd)
160154

161155
// Refresh rate
162156
if (bWindowed)
163-
{
164157
P.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
165-
P.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
166-
}
167158
else
168-
{
169159
P.PresentationInterval = selectPresentInterval(); // Vsync (R1\R2)
170-
P.FullScreen_RefreshRateInHz = selectRefresh(P.BackBufferWidth, P.BackBufferHeight, fTarget);
171-
}
172160

173161
// Create the device
174162
const auto GPU = selectGPU();
@@ -212,8 +200,6 @@ void CHW::CreateDevice(SDL_Window* m_sdlWnd)
212200
u32 memory = pDevice->GetAvailableTextureMem();
213201
Msg("* Texture memory: %d M", memory / (1024 * 1024));
214202
Msg("* DDI-level: %2.1f", float(D3DXGetDriverLevel(pDevice)) / 100.f);
215-
216-
fill_vid_mode_list(this);
217203
}
218204

219205
void CHW::DestroyDevice()
@@ -231,8 +217,6 @@ void CHW::DestroyDevice()
231217
_RELEASE(HW.pDevice);
232218

233219
DestroyD3D();
234-
235-
free_vid_mode_list();
236220
}
237221

238222
//////////////////////////////////////////////////////////////////////
@@ -248,24 +232,17 @@ void CHW::Reset()
248232
_RELEASE(pBaseZB);
249233
_RELEASE(pBaseRT);
250234

251-
bool bWindowed = true;
252-
if (!GEnv.isDedicatedServer)
253-
bWindowed = !psDeviceFlags.is(rsFullscreen);
235+
const bool bWindowed = !psDeviceFlags.is(rsFullscreen);
254236

255-
selectResolution(DevPP.BackBufferWidth, DevPP.BackBufferHeight, bWindowed);
237+
DevPP.BackBufferWidth = Device.dwWidth;
238+
DevPP.BackBufferHeight = Device.dwHeight;
256239
// Windoze
257240
DevPP.SwapEffect = bWindowed ? D3DSWAPEFFECT_COPY : D3DSWAPEFFECT_DISCARD;
258241
DevPP.Windowed = bWindowed;
259242
if (!bWindowed)
260-
{
261243
DevPP.PresentationInterval = selectPresentInterval(); // Vsync (R1\R2)
262-
DevPP.FullScreen_RefreshRateInHz = selectRefresh(DevPP.BackBufferWidth, DevPP.BackBufferHeight, Caps.fTarget);
263-
}
264244
else
265-
{
266245
DevPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
267-
DevPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
268-
}
269246

270247
while (true)
271248
{
@@ -311,38 +288,6 @@ D3DFORMAT CHW::selectDepthStencil(D3DFORMAT fTarget)
311288
return D3DFMT_UNKNOWN;
312289
}
313290

314-
void CHW::selectResolution(u32& dwWidth, u32& dwHeight, BOOL bWindowed)
315-
{
316-
fill_vid_mode_list(this);
317-
318-
if (GEnv.isDedicatedServer)
319-
{
320-
dwWidth = 640;
321-
dwHeight = 480;
322-
return;
323-
}
324-
325-
if (bWindowed)
326-
{
327-
dwWidth = psCurrentVidMode[0];
328-
dwHeight = psCurrentVidMode[1];
329-
}
330-
else // check
331-
{
332-
string64 buff;
333-
xr_sprintf(buff, sizeof(buff), "%dx%d", psCurrentVidMode[0], psCurrentVidMode[1]);
334-
335-
if (_ParseItem(buff, AvailableVideoModes.data()) == u32(-1)) // not found
336-
{ // select safe
337-
xr_sprintf(buff, sizeof(buff), "vid_mode %s", AvailableVideoModes[0].name);
338-
Console->Execute(buff);
339-
}
340-
341-
dwWidth = psCurrentVidMode[0];
342-
dwHeight = psCurrentVidMode[1];
343-
}
344-
}
345-
346291
u32 CHW::selectPresentInterval()
347292
{
348293
D3DCAPS9 caps;
@@ -431,28 +376,6 @@ u32 CHW::selectGPU()
431376
return D3DCREATE_SOFTWARE_VERTEXPROCESSING;
432377
}
433378

434-
u32 CHW::selectRefresh(u32 dwWidth, u32 dwHeight, D3DFORMAT fmt)
435-
{
436-
if (psDeviceFlags.is(rsRefresh60hz))
437-
return D3DPRESENT_RATE_DEFAULT;
438-
439-
auto selected = D3DPRESENT_RATE_DEFAULT;
440-
const auto count = pD3D->GetAdapterModeCount(DevAdapter, fmt);
441-
for (u32 I = 0; I < count; I++)
442-
{
443-
D3DDISPLAYMODE Mode;
444-
pD3D->EnumAdapterModes(DevAdapter, fmt, I, &Mode);
445-
if (Mode.Width == dwWidth && Mode.Height == dwHeight)
446-
{
447-
//if (Mode.RefreshRate > selected)
448-
// selected = Mode.RefreshRate;
449-
if (Mode.RefreshRate <= maxRefreshRate && Mode.RefreshRate>selected)
450-
selected = Mode.RefreshRate; //ECO_RENDER modif.
451-
}
452-
}
453-
return selected;
454-
}
455-
456379
BOOL CHW::support(D3DFORMAT fmt, DWORD type, DWORD usage)
457380
{
458381
auto result = pD3D->CheckDeviceFormat(DevAdapter, m_DriverType, Caps.fTarget, usage, (D3DRESOURCETYPE)type, fmt);
@@ -467,46 +390,3 @@ struct uniqueRenderingMode
467390
pcstr value;
468391
bool operator()(const xr_token other) const { return !xr_stricmp(value, other.name);}
469392
};
470-
471-
void free_vid_mode_list()
472-
{
473-
for (auto& mode : AvailableVideoModes)
474-
xr_free(mode.name);
475-
AvailableVideoModes.clear();
476-
}
477-
478-
void fill_vid_mode_list(CHW* _hw)
479-
{
480-
if (!AvailableVideoModes.empty())
481-
return;
482-
483-
xr_vector<D3DDISPLAYMODE> displayModes;
484-
485-
// Get the number of display modes available
486-
const auto cnt = _hw->pD3D->GetAdapterModeCount(_hw->DevAdapter, _hw->Caps.fTarget);
487-
488-
// Get the list of display modes
489-
displayModes.resize(cnt);
490-
for (auto i = 0; i < cnt; ++i)
491-
_hw->pD3D->EnumAdapterModes(_hw->DevAdapter, _hw->Caps.fTarget, i, &displayModes[i]);
492-
493-
int i = 0;
494-
auto& AVM = AvailableVideoModes;
495-
for (const auto& it : displayModes)
496-
{
497-
string32 str;
498-
499-
xr_sprintf(str, sizeof(str), "%dx%d", it.Width, it.Height);
500-
501-
if (AVM.cend() != std::find_if(AVM.cbegin(), AVM.cend(), uniqueRenderingMode(str)))
502-
continue;
503-
504-
AVM.emplace_back(xr_token(xr_strdup(str), i));
505-
++i;
506-
}
507-
AVM.emplace_back(xr_token(nullptr, -1));
508-
509-
Msg("Available video modes[%d]:", AVM.size());
510-
for (const auto& mode : AVM)
511-
Msg("[%s]", mode.name);
512-
}

src/Layers/xrRender/HW.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,9 @@ class CHW
3232
void Reset();
3333

3434
#ifndef USE_OGL
35-
void selectResolution(u32& dwWidth, u32& dwHeight, BOOL bWindowed);
3635
D3DFORMAT selectDepthStencil(D3DFORMAT);
3736
u32 selectPresentInterval();
3837
u32 selectGPU();
39-
u32 selectRefresh(u32 dwWidth, u32 dwHeight, D3DFORMAT fmt);
4038
BOOL support(D3DFORMAT fmt, DWORD type, DWORD usage);
4139
#endif // !USE_OGL
4240

@@ -130,8 +128,6 @@ class CHW
130128
void UpdateViews();
131129
#endif
132130
#if defined(USE_DX10) || defined(USE_DX11)
133-
DXGI_RATIONAL selectRefresh(u32 dwWidth, u32 dwHeight, DXGI_FORMAT fmt);
134-
135131
virtual void OnAppActivate();
136132
virtual void OnAppDeactivate();
137133
#endif // USE_DX10
@@ -142,8 +138,6 @@ class CHW
142138
void ClearDepthStencilView(GLuint pDepthStencilView, UINT ClearFlags, FLOAT Depth, UINT8 Stencil);
143139
HRESULT Present(UINT SyncInterval, UINT Flags);
144140
#endif // USE_OGL
145-
146-
int maxRefreshRate = 200; // ECO_RENDER add
147141
};
148142

149143
extern ECORE_API CHW HW;

0 commit comments

Comments
 (0)