18#if defined(__i386) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
21#elif defined(__GNUC__) && !defined(__clang__)
31 return (width == other.width && height == other.height &&
32 bits_per_pixel == other.bits_per_pixel &&
33 refresh_rate == other.refresh_rate &&
34 fullscreen_only == other.fullscreen_only);
49output(std::ostream &out)
const {
50 out << width <<
'x' << height;
51 if (bits_per_pixel > 0) {
52 out <<
' ' << bits_per_pixel <<
"bpp";
54 if (refresh_rate > 0) {
55 out <<
' ' << refresh_rate <<
"Hz";
57 if (fullscreen_only > 0) {
58 out <<
" (fullscreen only)";
66~DisplayInformation() {
67 if (_display_mode_array !=
nullptr) {
68 delete[] _display_mode_array;
77 DisplayInformation::DetectionState state;
78 int get_device_caps_state;
81 int window_bits_per_pixel;
82 int total_display_modes;
86 uint64_t physical_memory;
87 uint64_t available_physical_memory;
89 state = DisplayInformation::DS_unknown;
90 get_device_caps_state =
false;
93 window_bits_per_pixel = 0;
94 total_display_modes = 0;
95 display_mode_array =
nullptr;
99 available_physical_memory = 0;
102 _current_display_mode_index = -1;
103 _get_device_caps_state = get_device_caps_state;
104 _maximum_window_width = window_width;
105 _maximum_window_height = window_height;
106 _window_bits_per_pixel = window_bits_per_pixel;
107 _total_display_modes = total_display_modes;
108 _display_mode_array = display_mode_array;
109 _shader_model = GraphicsStateGuardian::SM_00;
110 _video_memory = video_memory;
111 _texture_memory = texture_memory;
113 _physical_memory = physical_memory;
114 _available_physical_memory = available_physical_memory;
116 _available_page_file_size = 0;
117 _process_virtual_memory = 0;
118 _available_process_virtual_memory = 0;
120 _page_fault_count = 0;
122 _peak_process_memory = 0;
123 _page_file_usage = 0;
124 _peak_page_file_usage = 0;
131 _driver_sub_version = 0;
134 _driver_date_month = 0;
135 _driver_date_day = 0;
136 _driver_date_year = 0;
138 _cpu_version_information = 0;
139 _cpu_brand_index = 0;
143 _maximum_cpu_frequency = 0;
144 _current_cpu_frequency = 0;
147 _num_logical_cpus = 0;
149 _get_memory_information_function =
nullptr;
150 _update_cpu_frequency_function =
nullptr;
152 _os_version_major = -1;
153 _os_version_minor = -1;
154 _os_version_build = -1;
155 _os_platform_id = -1;
161int DisplayInformation::get_display_state() {
168int DisplayInformation::
169get_maximum_window_width() {
170 return _maximum_window_width;
176int DisplayInformation::
177get_maximum_window_height() {
178 return _maximum_window_height;
184int DisplayInformation::
185get_window_bits_per_pixel() {
186 return _window_bits_per_pixel;
192int DisplayInformation::
193get_total_display_modes() {
194 return _total_display_modes;
201get_display_mode(
int display_index) {
204 nassertr(display_index >= 0 && display_index < _total_display_modes, err_mode);
207 return _display_mode_array[display_index];
217 return _current_display_mode_index;
223int DisplayInformation::
224get_display_mode_width (
int display_index) {
228 if (display_index >= 0 && display_index < _total_display_modes) {
229 value = _display_mode_array [display_index].width;
238int DisplayInformation::
239get_display_mode_height (
int display_index) {
243 if (display_index >= 0 && display_index < _total_display_modes) {
244 value = _display_mode_array [display_index].height;
253int DisplayInformation::
254get_display_mode_bits_per_pixel (
int display_index) {
258 if (display_index >= 0 && display_index < _total_display_modes) {
259 value = _display_mode_array [display_index].bits_per_pixel;
268int DisplayInformation::
269get_display_mode_refresh_rate (
int display_index) {
273 if (display_index >= 0 && display_index < _total_display_modes) {
274 value = _display_mode_array [display_index].refresh_rate;
283int DisplayInformation::
284get_display_mode_fullscreen_only (
int display_index) {
288 if (display_index >= 0 && display_index < _total_display_modes) {
289 value = _display_mode_array [display_index].fullscreen_only;
298GraphicsStateGuardian::ShaderModel DisplayInformation::
300 return _shader_model;
306int DisplayInformation::
307get_video_memory ( ) {
308 return _video_memory;
314int DisplayInformation::
315get_texture_memory() {
316 return _texture_memory;
322void DisplayInformation::
323update_memory_information() {
324 if (_get_memory_information_function) {
325 _get_memory_information_function (
this);
332uint64_t DisplayInformation::
333get_physical_memory() {
334 return _physical_memory;
340uint64_t DisplayInformation::
341get_available_physical_memory() {
342 return _available_physical_memory;
348uint64_t DisplayInformation::
349get_page_file_size() {
350 return _page_file_size;
356uint64_t DisplayInformation::
357get_available_page_file_size() {
358 return _available_page_file_size;
364uint64_t DisplayInformation::
365get_process_virtual_memory() {
366 return _process_virtual_memory;
372uint64_t DisplayInformation::
373get_available_process_virtual_memory() {
374 return _available_process_virtual_memory;
380int DisplayInformation::
388uint64_t DisplayInformation::
389get_page_fault_count() {
390 return _page_fault_count;
396uint64_t DisplayInformation::
397get_process_memory() {
398 return _process_memory;
404uint64_t DisplayInformation::
405get_peak_process_memory() {
406 return _peak_process_memory;
412uint64_t DisplayInformation::
413get_page_file_usage() {
414 return _page_file_usage;
420uint64_t DisplayInformation::
421get_peak_page_file_usage() {
422 return _peak_page_file_usage;
428int DisplayInformation::
436int DisplayInformation::
444int DisplayInformation::
445get_driver_product() {
446 return _driver_product;
452int DisplayInformation::
453get_driver_version() {
454 return _driver_version;
460int DisplayInformation::
461get_driver_sub_version() {
462 return _driver_sub_version;
468int DisplayInformation::
470 return _driver_build;
476int DisplayInformation::
477get_driver_date_month() {
478 return _driver_date_month;
484int DisplayInformation::
485get_driver_date_day() {
486 return _driver_date_day;
492int DisplayInformation::
493get_driver_date_year() {
494 return _driver_date_year;
500const std::string &DisplayInformation::
501get_cpu_vendor_string()
const {
502 return _cpu_vendor_string;
508const std::string &DisplayInformation::
509get_cpu_brand_string()
const {
510 return _cpu_brand_string;
516unsigned int DisplayInformation::
517get_cpu_version_information() {
518 return _cpu_version_information;
524unsigned int DisplayInformation::
525get_cpu_brand_index() {
526 return _cpu_brand_index;
532uint64_t DisplayInformation::
534 return _cpu_frequency;
542#if defined(__i386) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
543#if defined(_MSC_VER) || (defined(__GNUC__) && !defined(__clang__))
546 unsigned int lo, hi = 0;
547 __asm__ __volatile__ (
"rdtsc" :
"=a" (lo),
"=d" (hi));
548 return ((uint64_t)hi << 32) | lo;
558uint64_t DisplayInformation::
559get_maximum_cpu_frequency() {
560 return _maximum_cpu_frequency;
566uint64_t DisplayInformation::
567get_current_cpu_frequency() {
568 return _current_cpu_frequency;
574void DisplayInformation::
575update_cpu_frequency(
int processor_number) {
576 if (_update_cpu_frequency_function) {
577 _update_cpu_frequency_function (processor_number,
this);
587 return _num_cpu_cores;
596 return _num_logical_cpus;
604 return _os_version_major;
612 return _os_version_minor;
620 return _os_version_build;
628 return _os_platform_id;
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool operator==(const DisplayMode &other) const
Returns true if these two DisplayModes are identical.
bool operator!=(const DisplayMode &other) const
Returns false if these two DisplayModes are identical.