From 3c487c5cd69c53d6fea948643c0a76df03516605 Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 1 Apr 2022 21:23:39 +0200 Subject: Moved Stars45 to StarsEx --- StarsEx/VideoDX9Enum.h | 184 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 StarsEx/VideoDX9Enum.h (limited to 'StarsEx/VideoDX9Enum.h') diff --git a/StarsEx/VideoDX9Enum.h b/StarsEx/VideoDX9Enum.h new file mode 100644 index 0000000..91279aa --- /dev/null +++ b/StarsEx/VideoDX9Enum.h @@ -0,0 +1,184 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. + + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Direct3D and Direct3D Video classes for DirectX 7 +*/ + +#ifndef VideoDX9Enum_h +#define VideoDX9Enum_h + +#include + +#include "Video.h" +#include "List.h" +#include + +// +--------------------------------------------------------------------+ + +class VideoDX9Enum; +struct VideoDX9DisplayMode; +struct VideoDX9AdapterInfo; +struct VideoDX9DeviceInfo; +struct VideoDX9DSMSConflict; +struct VideoDX9DeviceCombo; +class VideoSettings; + +// +--------------------------------------------------------------------+ + +class VideoDX9Enum +{ +public: + enum VP_TYPE { + SOFTWARE_VP, + MIXED_VP, + HARDWARE_VP, + PURE_HARDWARE_VP + }; + + VideoDX9Enum(IDirect3D9* d3d9); + ~VideoDX9Enum(); + + void SetDirect3D9(IDirect3D9* d3d9); + + HRESULT Enumerate(); + bool SuggestWindowSettings(VideoSettings* vs); + bool SuggestFullscreenSettings(VideoSettings* vs); + + int NumAdapters() const { return adapter_info_list.size(); } + void SelectAdapter(int index); + VideoDX9AdapterInfo* GetAdapterInfo(); + VideoDX9DeviceInfo* GetDeviceInfo(DWORD devtype); + + bool IsModeSupported(int width, int height, int bpp) const; + + UINT min_width; + UINT min_height; + UINT min_color_bits; + UINT min_alpha_bits; + UINT min_depth_bits; + UINT min_stencil_bits; + + bool uses_depth_buffer; + bool uses_mixed_vp; + bool req_windowed; + bool req_fullscreen; + +private: + HRESULT EnumerateDevices(VideoDX9AdapterInfo* adapter_info, std::vector& adapter_format_list); + HRESULT EnumerateDeviceCombos(VideoDX9DeviceInfo* device_info, std::vector& adapter_format_list); + + void BuildDepthStencilFormatList(VideoDX9DeviceCombo* device_combo); + void BuildMultiSampleTypeList(VideoDX9DeviceCombo* device_combo); + void BuildDSMSConflictList(VideoDX9DeviceCombo* device_combo); + void BuildVertexProcessingTypeList(VideoDX9DeviceInfo* device_info, VideoDX9DeviceCombo* device_combo); + void BuildPresentIntervalList(VideoDX9DeviceInfo* device_info, VideoDX9DeviceCombo* device_combo); + + IDirect3D9* d3d; + std::vector allowed_adapter_format_list; + + List adapter_info_list; + int adapter_index; +}; + + +// +--------------------------------------------------------------------+ + +struct VideoDX9AdapterInfo +{ + static const char* TYPENAME() { return "VideoDX9AdapterInfo"; } + + VideoDX9AdapterInfo(); + ~VideoDX9AdapterInfo(); + + const char* GetDescription() const; + + int adapter_ordinal; + D3DADAPTER_IDENTIFIER9 adapter_identifier; + List display_mode_list; + List device_info_list; +}; + + +// +--------------------------------------------------------------------+ + +struct VideoDX9DisplayMode +{ + static const char* TYPENAME() { return "VideoDX9DisplayMode"; } + + VideoDX9DisplayMode(); + VideoDX9DisplayMode(const VideoDX9DisplayMode& m); + VideoDX9DisplayMode(const D3DDISPLAYMODE& m); + + int operator<(const VideoDX9DisplayMode& m) const; + int operator<=(const VideoDX9DisplayMode& m) const; + + const char* GetDescription() const; + static const char* D3DFormatToString(D3DFORMAT format); + + UINT width; + UINT height; + UINT refresh; + D3DFORMAT format; +}; + + +// +--------------------------------------------------------------------+ + +struct VideoDX9DeviceInfo +{ + static const char* TYPENAME() { return "VideoDX9DeviceInfo"; } + + VideoDX9DeviceInfo(); + ~VideoDX9DeviceInfo(); + + int adapter_ordinal; + D3DDEVTYPE device_type; + D3DCAPS9 caps; + List device_combo_list; +}; + + +// +--------------------------------------------------------------------+ + +struct VideoDX9FormatConflict +{ + static const char* TYPENAME() { return "VideoDX9FormatConflict"; } + + D3DFORMAT ds_format; + D3DMULTISAMPLE_TYPE multisample_type; +}; + + +// +--------------------------------------------------------------------+ + +struct VideoDX9DeviceCombo +{ + VideoDX9DeviceCombo(); + ~VideoDX9DeviceCombo(); + + int adapter_ordinal; + D3DDEVTYPE device_type; + D3DFORMAT adapter_format; + D3DFORMAT back_buffer_format; + bool is_windowed; + + std::vector vertex_processing_list; + std::vector depth_stencil_fmt_list; + std::vector multisample_type_list; + std::vector multisample_qual_list; + std::vector present_interval_list; + + List conflict_list; +}; + +// +--------------------------------------------------------------------+ + +#endif // VideoDX9Enum_h + -- cgit v1.1