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-
138CHW HW;
149
1510CHW::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
219205void 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-
346291u32 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-
456379BOOL 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- }
0 commit comments