00001 // Filename: displayInformation.cxx 00002 // Created by: aignacio (17Jan07) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #include "graphicsStateGuardian.h" 00016 #include "displayInformation.h" 00017 00018 //////////////////////////////////////////////////////////////////// 00019 // Function: DisplayInformation::Destructor 00020 // Access: Published 00021 // Description: 00022 //////////////////////////////////////////////////////////////////// 00023 DisplayInformation:: 00024 ~DisplayInformation() { 00025 if (_display_mode_array != NULL) { 00026 delete[] _display_mode_array; 00027 } 00028 if (_cpu_id_data != NULL) { 00029 delete _cpu_id_data; 00030 } 00031 if (_cpu_brand_string != NULL) { 00032 delete _cpu_brand_string; 00033 } 00034 } 00035 00036 //////////////////////////////////////////////////////////////////// 00037 // Function: DisplayInformation::Constructor 00038 // Access: Published 00039 // Description: 00040 //////////////////////////////////////////////////////////////////// 00041 DisplayInformation:: 00042 DisplayInformation() { 00043 DisplayInformation::DetectionState state; 00044 int get_adapter_display_mode_state; 00045 int get_device_caps_state; 00046 int window_width; 00047 int window_height; 00048 int window_bits_per_pixel; 00049 int total_display_modes; 00050 DisplayMode *display_mode_array; 00051 int shader_model; 00052 int video_memory; 00053 int texture_memory; 00054 PN_uint64 physical_memory; 00055 PN_uint64 available_physical_memory; 00056 00057 state = DisplayInformation::DS_unknown; 00058 get_adapter_display_mode_state = false; 00059 get_device_caps_state = false; 00060 window_width = 0; 00061 window_height = 0; 00062 window_bits_per_pixel = 0; 00063 total_display_modes = 0; 00064 display_mode_array = NULL; 00065 shader_model = GraphicsStateGuardian::SM_00; 00066 video_memory = 0; 00067 texture_memory = 0; 00068 physical_memory = 0; 00069 available_physical_memory = 0; 00070 00071 _state = state; 00072 _get_adapter_display_mode_state = get_adapter_display_mode_state; 00073 _get_device_caps_state = get_device_caps_state; 00074 _maximum_window_width = window_width; 00075 _maximum_window_height = window_height; 00076 _window_bits_per_pixel = window_bits_per_pixel; 00077 _total_display_modes = total_display_modes; 00078 _display_mode_array = display_mode_array; 00079 _shader_model = shader_model; 00080 _video_memory = video_memory; 00081 _texture_memory = texture_memory; 00082 00083 _physical_memory = physical_memory; 00084 _available_physical_memory = available_physical_memory; 00085 _page_file_size = 0; 00086 _available_page_file_size = 0; 00087 _process_virtual_memory = 0; 00088 _available_process_virtual_memory = 0; 00089 _memory_load = 0; 00090 _page_fault_count = 0; 00091 _process_memory = 0; 00092 _peak_process_memory = 0; 00093 _page_file_usage = 0; 00094 _peak_page_file_usage = 0; 00095 00096 _vendor_id = 0; 00097 _device_id = 0; 00098 00099 _driver_product = 0; 00100 _driver_version = 0; 00101 _driver_sub_version = 0; 00102 _driver_build = 0; 00103 00104 _driver_date_month = 0; 00105 _driver_date_day = 0; 00106 _driver_date_year = 0; 00107 00108 _cpu_id_version = 1; 00109 _cpu_id_size = 0; 00110 _cpu_id_data = 0; 00111 00112 _cpu_vendor_string = 0; 00113 _cpu_brand_string = 0; 00114 _cpu_version_information = 0; 00115 _cpu_brand_index = 0; 00116 00117 _cpu_frequency = 0; 00118 00119 _maximum_cpu_frequency = 0; 00120 _current_cpu_frequency = 0; 00121 00122 _num_cpu_cores = 0; 00123 _num_logical_cpus = 0; 00124 00125 _get_memory_information_function = 0; 00126 _cpu_time_function = 0; 00127 _update_cpu_frequency_function = 0; 00128 00129 _os_version_major = -1; 00130 _os_version_minor = -1; 00131 _os_version_build = -1; 00132 _os_platform_id = -1; 00133 } 00134 00135 //////////////////////////////////////////////////////////////////// 00136 // Function: DisplayInformation:: 00137 // Access: Published 00138 // Description: 00139 //////////////////////////////////////////////////////////////////// 00140 int DisplayInformation::get_display_state() { 00141 return _state; 00142 } 00143 00144 //////////////////////////////////////////////////////////////////// 00145 // Function: DisplayInformation::get_maximum_window_width 00146 // Access: Published 00147 // Description: 00148 //////////////////////////////////////////////////////////////////// 00149 int DisplayInformation:: 00150 get_maximum_window_width() { 00151 return _maximum_window_width; 00152 } 00153 00154 //////////////////////////////////////////////////////////////////// 00155 // Function: DisplayInformation::get_maximum_window_height 00156 // Access: Published 00157 // Description: 00158 //////////////////////////////////////////////////////////////////// 00159 int DisplayInformation:: 00160 get_maximum_window_height() { 00161 return _maximum_window_height; 00162 } 00163 00164 //////////////////////////////////////////////////////////////////// 00165 // Function: DisplayInformation::get_window_bits_per_pixel 00166 // Access: Published 00167 // Description: 00168 //////////////////////////////////////////////////////////////////// 00169 int DisplayInformation:: 00170 get_window_bits_per_pixel() { 00171 return _window_bits_per_pixel; 00172 } 00173 00174 //////////////////////////////////////////////////////////////////// 00175 // Function: DisplayInformation::get_total_display_modes 00176 // Access: Published 00177 // Description: 00178 //////////////////////////////////////////////////////////////////// 00179 int DisplayInformation:: 00180 get_total_display_modes() { 00181 return _total_display_modes; 00182 } 00183 00184 //////////////////////////////////////////////////////////////////// 00185 // Function: DisplayInformation::get_display_mode_width 00186 // Access: Published 00187 // Description: 00188 //////////////////////////////////////////////////////////////////// 00189 int DisplayInformation:: 00190 get_display_mode_width (int display_index) { 00191 int value; 00192 00193 value = 0; 00194 if (display_index >= 0 && display_index < _total_display_modes) { 00195 value = _display_mode_array [display_index].width; 00196 } 00197 00198 return value; 00199 } 00200 00201 //////////////////////////////////////////////////////////////////// 00202 // Function: DisplayInformation::get_display_mode_height 00203 // Access: Published 00204 // Description: 00205 //////////////////////////////////////////////////////////////////// 00206 int DisplayInformation:: 00207 get_display_mode_height (int display_index) { 00208 int value; 00209 00210 value = 0; 00211 if (display_index >= 0 && display_index < _total_display_modes) { 00212 value = _display_mode_array [display_index].height; 00213 } 00214 00215 return value; 00216 } 00217 00218 //////////////////////////////////////////////////////////////////// 00219 // Function: DisplayInformation::get_display_mode_bits_per_pixel 00220 // Access: Published 00221 // Description: 00222 //////////////////////////////////////////////////////////////////// 00223 int DisplayInformation:: 00224 get_display_mode_bits_per_pixel (int display_index) { 00225 int value; 00226 00227 value = 0; 00228 if (display_index >= 0 && display_index < _total_display_modes) { 00229 value = _display_mode_array [display_index].bits_per_pixel; 00230 } 00231 00232 return value; 00233 } 00234 00235 //////////////////////////////////////////////////////////////////// 00236 // Function: DisplayInformation::get_display_mode_refresh_rate 00237 // Access: Published 00238 // Description: 00239 //////////////////////////////////////////////////////////////////// 00240 int DisplayInformation:: 00241 get_display_mode_refresh_rate (int display_index) { 00242 int value; 00243 00244 value = 0; 00245 if (display_index >= 0 && display_index < _total_display_modes) { 00246 value = _display_mode_array [display_index].refresh_rate; 00247 } 00248 00249 return value; 00250 } 00251 00252 //////////////////////////////////////////////////////////////////// 00253 // Function: DisplayInformation::get_display_mode_fullscreen_only 00254 // Access: Published 00255 // Description: 00256 //////////////////////////////////////////////////////////////////// 00257 int DisplayInformation:: 00258 get_display_mode_fullscreen_only (int display_index) { 00259 int value; 00260 00261 value = 0; 00262 if (display_index >= 0 && display_index < _total_display_modes) { 00263 value = _display_mode_array [display_index].fullscreen_only; 00264 } 00265 00266 return value; 00267 } 00268 00269 //////////////////////////////////////////////////////////////////// 00270 // Function: DisplayInformation::get_shader_model 00271 // Access: Published 00272 // Description: 00273 //////////////////////////////////////////////////////////////////// 00274 int DisplayInformation:: 00275 get_shader_model ( ) { 00276 return _shader_model; 00277 } 00278 00279 //////////////////////////////////////////////////////////////////// 00280 // Function: DisplayInformation::get_video_memory 00281 // Access: Published 00282 // Description: 00283 //////////////////////////////////////////////////////////////////// 00284 int DisplayInformation:: 00285 get_video_memory ( ) { 00286 return _video_memory; 00287 } 00288 00289 //////////////////////////////////////////////////////////////////// 00290 // Function: DisplayInformation::get_texture_memory 00291 // Access: Published 00292 // Description: 00293 //////////////////////////////////////////////////////////////////// 00294 int DisplayInformation:: 00295 get_texture_memory() { 00296 return _texture_memory; 00297 } 00298 00299 //////////////////////////////////////////////////////////////////// 00300 // Function: DisplayInformation::update_memory_information 00301 // Access: Published 00302 // Description: 00303 //////////////////////////////////////////////////////////////////// 00304 void DisplayInformation:: 00305 update_memory_information() { 00306 if (_get_memory_information_function) { 00307 _get_memory_information_function (this); 00308 } 00309 } 00310 00311 //////////////////////////////////////////////////////////////////// 00312 // Function: DisplayInformation::get_physical_memory 00313 // Access: Published 00314 // Description: 00315 //////////////////////////////////////////////////////////////////// 00316 PN_uint64 DisplayInformation:: 00317 get_physical_memory() { 00318 return _physical_memory; 00319 } 00320 00321 //////////////////////////////////////////////////////////////////// 00322 // Function: DisplayInformation::get_available_physical_memory 00323 // Access: Published 00324 // Description: 00325 //////////////////////////////////////////////////////////////////// 00326 PN_uint64 DisplayInformation:: 00327 get_available_physical_memory() { 00328 return _available_physical_memory; 00329 } 00330 00331 //////////////////////////////////////////////////////////////////// 00332 // Function: DisplayInformation::get_page_file_size 00333 // Access: Published 00334 // Description: 00335 //////////////////////////////////////////////////////////////////// 00336 PN_uint64 DisplayInformation:: 00337 get_page_file_size() { 00338 return _page_file_size; 00339 } 00340 00341 //////////////////////////////////////////////////////////////////// 00342 // Function: DisplayInformation::get_available_page_file_size 00343 // Access: Published 00344 // Description: 00345 //////////////////////////////////////////////////////////////////// 00346 PN_uint64 DisplayInformation:: 00347 get_available_page_file_size() { 00348 return _available_page_file_size; 00349 } 00350 00351 //////////////////////////////////////////////////////////////////// 00352 // Function: DisplayInformation::_process_virtual_memory 00353 // Access: Published 00354 // Description: 00355 //////////////////////////////////////////////////////////////////// 00356 PN_uint64 DisplayInformation:: 00357 get_process_virtual_memory() { 00358 return _process_virtual_memory; 00359 } 00360 00361 //////////////////////////////////////////////////////////////////// 00362 // Function: DisplayInformation::get_available_process_virtual_memory 00363 // Access: Published 00364 // Description: 00365 //////////////////////////////////////////////////////////////////// 00366 PN_uint64 DisplayInformation:: 00367 get_available_process_virtual_memory() { 00368 return _available_process_virtual_memory; 00369 } 00370 00371 //////////////////////////////////////////////////////////////////// 00372 // Function: DisplayInformation::get_memory_load 00373 // Access: Published 00374 // Description: 00375 //////////////////////////////////////////////////////////////////// 00376 int DisplayInformation:: 00377 get_memory_load() { 00378 return _memory_load; 00379 } 00380 00381 //////////////////////////////////////////////////////////////////// 00382 // Function: DisplayInformation::get_page_fault_count 00383 // Access: Published 00384 // Description: 00385 //////////////////////////////////////////////////////////////////// 00386 PN_uint64 DisplayInformation:: 00387 get_page_fault_count() { 00388 return _page_fault_count; 00389 } 00390 00391 //////////////////////////////////////////////////////////////////// 00392 // Function: DisplayInformation::get_process_memory 00393 // Access: Published 00394 // Description: 00395 //////////////////////////////////////////////////////////////////// 00396 PN_uint64 DisplayInformation:: 00397 get_process_memory() { 00398 return _process_memory; 00399 } 00400 00401 //////////////////////////////////////////////////////////////////// 00402 // Function: DisplayInformation::get_peak_process_memory 00403 // Access: Published 00404 // Description: 00405 //////////////////////////////////////////////////////////////////// 00406 PN_uint64 DisplayInformation:: 00407 get_peak_process_memory() { 00408 return _peak_process_memory; 00409 } 00410 00411 //////////////////////////////////////////////////////////////////// 00412 // Function: DisplayInformation::get_page_file_usage 00413 // Access: Published 00414 // Description: 00415 //////////////////////////////////////////////////////////////////// 00416 PN_uint64 DisplayInformation:: 00417 get_page_file_usage() { 00418 return _page_file_usage; 00419 } 00420 00421 //////////////////////////////////////////////////////////////////// 00422 // Function: DisplayInformation::get_peak_page_file_usage 00423 // Access: Published 00424 // Description: 00425 //////////////////////////////////////////////////////////////////// 00426 PN_uint64 DisplayInformation:: 00427 get_peak_page_file_usage() { 00428 return _peak_page_file_usage; 00429 } 00430 00431 //////////////////////////////////////////////////////////////////// 00432 // Function: DisplayInformation::get_vendor_id 00433 // Access: Published 00434 // Description: 00435 //////////////////////////////////////////////////////////////////// 00436 int DisplayInformation:: 00437 get_vendor_id() { 00438 return _vendor_id; 00439 } 00440 00441 //////////////////////////////////////////////////////////////////// 00442 // Function: DisplayInformation::get_device_id 00443 // Access: Published 00444 // Description: 00445 //////////////////////////////////////////////////////////////////// 00446 int DisplayInformation:: 00447 get_device_id() { 00448 return _device_id; 00449 } 00450 00451 //////////////////////////////////////////////////////////////////// 00452 // Function: DisplayInformation::get_driver_product 00453 // Access: Published 00454 // Description: 00455 //////////////////////////////////////////////////////////////////// 00456 int DisplayInformation:: 00457 get_driver_product() { 00458 return _driver_product; 00459 } 00460 00461 //////////////////////////////////////////////////////////////////// 00462 // Function: DisplayInformation::get_driver_version 00463 // Access: Published 00464 // Description: 00465 //////////////////////////////////////////////////////////////////// 00466 int DisplayInformation:: 00467 get_driver_version() { 00468 return _driver_version; 00469 } 00470 00471 //////////////////////////////////////////////////////////////////// 00472 // Function: DisplayInformation::get_driver_sub_version 00473 // Access: Published 00474 // Description: 00475 //////////////////////////////////////////////////////////////////// 00476 int DisplayInformation:: 00477 get_driver_sub_version() { 00478 return _driver_sub_version; 00479 } 00480 00481 //////////////////////////////////////////////////////////////////// 00482 // Function: DisplayInformation::get_driver_build 00483 // Access: Published 00484 // Description: 00485 //////////////////////////////////////////////////////////////////// 00486 int DisplayInformation:: 00487 get_driver_build() { 00488 return _driver_build; 00489 } 00490 00491 //////////////////////////////////////////////////////////////////// 00492 // Function: DisplayInformation::get_driver_date_month 00493 // Access: Published 00494 // Description: 00495 //////////////////////////////////////////////////////////////////// 00496 int DisplayInformation:: 00497 get_driver_date_month() { 00498 return _driver_date_month; 00499 } 00500 00501 //////////////////////////////////////////////////////////////////// 00502 // Function: DisplayInformation::get_driver_date_day 00503 // Access: Published 00504 // Description: 00505 //////////////////////////////////////////////////////////////////// 00506 int DisplayInformation:: 00507 get_driver_date_day() { 00508 return _driver_date_day; 00509 } 00510 00511 //////////////////////////////////////////////////////////////////// 00512 // Function: DisplayInformation::get_driver_date_year 00513 // Access: Published 00514 // Description: 00515 //////////////////////////////////////////////////////////////////// 00516 int DisplayInformation:: 00517 get_driver_date_year() { 00518 return _driver_date_year; 00519 } 00520 00521 //////////////////////////////////////////////////////////////////// 00522 // Function: DisplayInformation::get_cpu_id_version 00523 // Access: Published 00524 // Description: 00525 //////////////////////////////////////////////////////////////////// 00526 int DisplayInformation:: 00527 get_cpu_id_version() { 00528 return _cpu_id_version; 00529 } 00530 00531 //////////////////////////////////////////////////////////////////// 00532 // Function: DisplayInformation::get_cpu_id_size 00533 // Access: Published 00534 // Description: Returns the number of 32-bit values for cpu id 00535 // binary data. 00536 //////////////////////////////////////////////////////////////////// 00537 int DisplayInformation:: 00538 get_cpu_id_size() { 00539 return _cpu_id_size; 00540 } 00541 00542 //////////////////////////////////////////////////////////////////// 00543 // Function: DisplayInformation::get_cpu_id_data 00544 // Access: Published 00545 // Description: Returns part of cpu id binary data based on the 00546 // index. 00547 //////////////////////////////////////////////////////////////////// 00548 unsigned int DisplayInformation:: 00549 get_cpu_id_data(int index) { 00550 unsigned int data; 00551 00552 data = 0; 00553 if (index >= 0 && index < _cpu_id_size) { 00554 data = _cpu_id_data [index]; 00555 } 00556 00557 return data; 00558 } 00559 00560 //////////////////////////////////////////////////////////////////// 00561 // Function: DisplayInformation::get_cpu_vendor_string 00562 // Access: Published 00563 // Description: 00564 //////////////////////////////////////////////////////////////////// 00565 const char *DisplayInformation:: 00566 get_cpu_vendor_string() { 00567 const char *string; 00568 00569 string = _cpu_vendor_string; 00570 if (string == 0) { 00571 string = ""; 00572 } 00573 00574 return string; 00575 } 00576 00577 //////////////////////////////////////////////////////////////////// 00578 // Function: DisplayInformation::get_cpu_brand_string 00579 // Access: Published 00580 // Description: 00581 //////////////////////////////////////////////////////////////////// 00582 const char *DisplayInformation:: 00583 get_cpu_brand_string() { 00584 const char *string; 00585 00586 string = _cpu_brand_string; 00587 if (string == 0) { 00588 string = ""; 00589 } 00590 00591 return string; 00592 } 00593 00594 //////////////////////////////////////////////////////////////////// 00595 // Function: DisplayInformation::get_cpu_version_information 00596 // Access: Published 00597 // Description: 00598 //////////////////////////////////////////////////////////////////// 00599 unsigned int DisplayInformation:: 00600 get_cpu_version_information() { 00601 return _cpu_version_information; 00602 } 00603 00604 //////////////////////////////////////////////////////////////////// 00605 // Function: DisplayInformation::get_cpu_brand_index 00606 // Access: Published 00607 // Description: 00608 //////////////////////////////////////////////////////////////////// 00609 unsigned int DisplayInformation:: 00610 get_cpu_brand_index() { 00611 return _cpu_brand_index; 00612 } 00613 00614 //////////////////////////////////////////////////////////////////// 00615 // Function: DisplayInformation::get_cpu_frequency 00616 // Access: Published 00617 // Description: 00618 //////////////////////////////////////////////////////////////////// 00619 PN_uint64 DisplayInformation:: 00620 get_cpu_frequency() { 00621 return _cpu_frequency; 00622 } 00623 00624 //////////////////////////////////////////////////////////////////// 00625 // Function: DisplayInformation::get_cpu_time 00626 // Access: Published 00627 // Description: 00628 //////////////////////////////////////////////////////////////////// 00629 PN_uint64 DisplayInformation:: 00630 get_cpu_time() { 00631 PN_uint64 cpu_time; 00632 00633 cpu_time = 0; 00634 if (_cpu_time_function) { 00635 cpu_time = _cpu_time_function(); 00636 } 00637 00638 return cpu_time; 00639 } 00640 00641 //////////////////////////////////////////////////////////////////// 00642 // Function: DisplayInformation::get_maximum_cpu_frequency 00643 // Access: Published 00644 // Description: 00645 //////////////////////////////////////////////////////////////////// 00646 PN_uint64 DisplayInformation:: 00647 get_maximum_cpu_frequency() { 00648 return _maximum_cpu_frequency; 00649 } 00650 00651 //////////////////////////////////////////////////////////////////// 00652 // Function: DisplayInformation::get_current_cpu_frequency 00653 // Access: Published 00654 // Description: 00655 //////////////////////////////////////////////////////////////////// 00656 PN_uint64 DisplayInformation:: 00657 get_current_cpu_frequency() { 00658 return _current_cpu_frequency; 00659 } 00660 00661 //////////////////////////////////////////////////////////////////// 00662 // Function: DisplayInformation::update_cpu_frequency 00663 // Access: Published 00664 // Description: 00665 //////////////////////////////////////////////////////////////////// 00666 void DisplayInformation:: 00667 update_cpu_frequency(int processor_number) { 00668 if (_update_cpu_frequency_function) { 00669 _update_cpu_frequency_function (processor_number, this); 00670 } 00671 } 00672 00673 //////////////////////////////////////////////////////////////////// 00674 // Function: DisplayInformation::get_num_cpu_cores 00675 // Access: Published 00676 // Description: Returns the number of individual CPU cores in the 00677 // system, or 0 if this number is not available. A 00678 // hyperthreaded CPU counts once here. 00679 //////////////////////////////////////////////////////////////////// 00680 int DisplayInformation:: 00681 get_num_cpu_cores() { 00682 return _num_cpu_cores; 00683 } 00684 00685 //////////////////////////////////////////////////////////////////// 00686 // Function: DisplayInformation::get_num_logical_cpus 00687 // Access: Published 00688 // Description: Returns the number of logical CPU's in the 00689 // system, or 0 if this number is not available. A 00690 // hyperthreaded CPU counts as two or more here. 00691 //////////////////////////////////////////////////////////////////// 00692 int DisplayInformation:: 00693 get_num_logical_cpus() { 00694 return _num_logical_cpus; 00695 } 00696 00697 //////////////////////////////////////////////////////////////////// 00698 // Function: DisplayInformation::get_os_version_major 00699 // Access: Published 00700 // Description: Returns -1 if not set. 00701 //////////////////////////////////////////////////////////////////// 00702 int DisplayInformation:: 00703 get_os_version_major() { 00704 return _os_version_major; 00705 } 00706 00707 //////////////////////////////////////////////////////////////////// 00708 // Function: DisplayInformation::get_os_version_minor 00709 // Access: Published 00710 // Description: Returns -1 if not set. 00711 //////////////////////////////////////////////////////////////////// 00712 int DisplayInformation:: 00713 get_os_version_minor() { 00714 return _os_version_minor; 00715 } 00716 00717 //////////////////////////////////////////////////////////////////// 00718 // Function: DisplayInformation::get_os_version_build 00719 // Access: Published 00720 // Description: Returns -1 if not set. 00721 //////////////////////////////////////////////////////////////////// 00722 int DisplayInformation:: 00723 get_os_version_build() { 00724 return _os_version_build; 00725 } 00726 00727 //////////////////////////////////////////////////////////////////// 00728 // Function: DisplayInformation::get_os_platform_id 00729 // Access: Published 00730 // Description: Returns -1 if not set. 00731 //////////////////////////////////////////////////////////////////// 00732 int DisplayInformation:: 00733 get_os_platform_id() { 00734 return _os_platform_id; 00735 }