aignacio_sf 19 年 前
コミット
483b663e31
1 ファイル変更0 行追加533 行削除
  1. 0 533
      panda/src/windisplay/winDetectDx.cxx

+ 0 - 533
panda/src/windisplay/winDetectDx.cxx

@@ -1,533 +0,0 @@
-
-// this is an included source code file
-#include <ddraw.h>
-
-typedef struct
-{
-  D3DFORMAT d3d_format;
-  int bits_per_pixel;
-  int fullscreen_only;
-}
-DISPLAY_FORMAT;
-
-static DISPLAY_FORMAT display_format_array [ ] =
-{
-  D3DFMT_X8R8G8B8,    32, FALSE,
-  D3DFMT_R5G6B5,      16, FALSE,
-  D3DFMT_X1R5G5B5,    16, FALSE,
-
-#if DX8 
-#else
-  D3DFMT_A2R10G10B10, 32, TRUE,
-#endif
-
-  // terminator
-  D3DFMT_UNKNOWN,      0, FALSE,
-};
-
-static int d3d_format_to_bits_per_pixel (D3DFORMAT d3d_format)
-{
-  int format_index;
-  int bits_per_pixel;
-
-  format_index = 0;
-  bits_per_pixel = 0;  
-  while (display_format_array [format_index].d3d_format != D3DFMT_UNKNOWN)
-  {
-    if (d3d_format == display_format_array [format_index].d3d_format)
-    {
-      bits_per_pixel = display_format_array [format_index].bits_per_pixel;  
-      break;
-    }
-    
-    format_index++;
-  }
-
-  return bits_per_pixel;
-}
-
-static DWORD _GetLastError (char *message_prefix)
-{
-  LPVOID ptr;
-  DWORD error;
-
-  ptr = 0;
-  error = GetLastError ( );
-  if (FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
-                  FORMAT_MESSAGE_FROM_SYSTEM,
-                  NULL,
-                  error,
-                  MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ),
-                  (LPTSTR)&ptr,
-                  0, NULL))
-  {
-    cout << "ERROR: "<< message_prefix << " result = " << (char*) ptr << "\n";
-    LocalFree( ptr );
-  }
-
-  return error;
-}
-
-static LRESULT CALLBACK window_procedure (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
-{
-  return DefWindowProc(hwnd, msg, wparam, lparam);
-}
-
-static int get_display_information (DisplaySearchParameters &display_search_parameters, DisplayInformation *display_information)
-{
-  int debug = !false;
-  int success;
-  DisplayInformation::DetectionState state;
-  int get_adapter_display_mode_state;
-  int get_device_caps_state;
-
-  int shader_model;
-  UINT minimum_width;
-  UINT maximum_width;
-  UINT minimum_height;
-  UINT maximum_height;
-  int minimum_bits_per_pixel;
-  int maximum_bits_per_pixel;
-
-  UINT texture_memory;
-
-  int window_width;
-  int window_height;
-  int window_bits_per_pixel;
-  int total_display_modes;
-  DisplayMode *display_mode_array;
-
-  PN_uint64 physical_memory;
-  PN_uint64 available_physical_memory;
-
-  success = false;
-  window_width = 0;
-  window_height = 0;
-  window_bits_per_pixel = 0;
-  total_display_modes = 0;
-  display_mode_array = NULL;
-
-  minimum_width = display_search_parameters._minimum_width;
-  minimum_height = display_search_parameters._minimum_height;
-  maximum_width = display_search_parameters._maximum_width;
-  maximum_height = display_search_parameters._maximum_height;
-  minimum_bits_per_pixel = display_search_parameters._minimum_bits_per_pixel;
-  maximum_bits_per_pixel = display_search_parameters._maximum_bits_per_pixel;
-
-  shader_model = GraphicsStateGuardian::SM_00;
-  texture_memory = 0;
-
-  state = DisplayInformation::DS_unknown;    
-  get_adapter_display_mode_state = false;
-  get_device_caps_state = false;
-
-  physical_memory = 0;
-  available_physical_memory = 0;
-
-  MEMORYSTATUSEX memory_status;
-
-  memory_status.dwLength = sizeof (MEMORYSTATUSEX);
-  if (GlobalMemoryStatusEx (&memory_status)) 
-  {
-    physical_memory = memory_status.ullTotalPhys;
-    available_physical_memory = memory_status.ullAvailPhys;
-  }
-  else
-  {
-    MEMORYSTATUS memory_status;
-
-    memory_status.dwLength = sizeof (MEMORYSTATUS);
-    GlobalMemoryStatus (&memory_status);
-
-    physical_memory = memory_status.dwTotalPhys;
-    available_physical_memory = memory_status.dwAvailPhys;
-  }
-  
-  if (debug)
-  {
-    printf ("physical_memory %I64d \n", physical_memory);
-    printf ("available_physical_memory %I64d \n", available_physical_memory);
-  }
-  
-  HMODULE d3d_dll;
-  DIRECT_3D_CREATE Direct3DCreate;
-
-  d3d_dll = LoadLibrary (d3d_dll_name);
-  if (d3d_dll)
-  {
-    Direct3DCreate = (DIRECT_3D_CREATE) GetProcAddress (d3d_dll, direct_3d_create_function_name);
-    if (Direct3DCreate)
-    {
-      DIRECT_3D direct_3d;
-
-      direct_3d = Direct3DCreate (D3D_SDK_VERSION);
-      if (direct_3d != NULL)
-      {
-        DWORD flags;
-        UINT adapter;
-        D3DDEVTYPE device_type;
-        D3DDISPLAYMODE current_d3d_display_mode;
-        D3DADAPTER_IDENTIFIER d3d_adapter_identifier;
-        D3DCAPS d3d_caps;
-
-    //     
-        adapter = D3DADAPTER_DEFAULT;
-        device_type = D3DDEVTYPE_HAL;
-
-        // windowed mode max res and format
-        if (direct_3d -> GetAdapterDisplayMode (adapter, &current_d3d_display_mode) == D3D_OK)
-        {
-          if (debug)
-          {
-            printf ("current mode  w = %d h = %d r = %d f = %d \n",
-              current_d3d_display_mode.Width,
-              current_d3d_display_mode.Height,
-              current_d3d_display_mode.RefreshRate,
-              current_d3d_display_mode.Format);
-          }
-
-          window_width = current_d3d_display_mode.Width;
-          window_height = current_d3d_display_mode.Height;
-          window_bits_per_pixel = d3d_format_to_bits_per_pixel (current_d3d_display_mode.Format);
-
-          get_adapter_display_mode_state = true;
-        }
-        else
-        {
-          get_adapter_display_mode_state = false;    
-        }
-
-        flags = 0;
-        if (direct_3d -> GetAdapterIdentifier (adapter, flags, &d3d_adapter_identifier) == D3D_OK)
-        {
-          // print adapter info
-        }
-
-        if (direct_3d -> GetDeviceCaps (adapter, device_type, &d3d_caps) == D3D_OK)
-        {
-
-    #if DX8
-          // shaders not supported in DX8
-    #else
-          int vertex_shader_version_major;
-          int vertex_shader_version_minor;
-          int pixel_shader_version_major;
-          int pixel_shader_version_minor;
-
-          vertex_shader_version_major = D3DSHADER_VERSION_MAJOR (d3d_caps.VertexShaderVersion);
-          vertex_shader_version_minor = D3DSHADER_VERSION_MINOR (d3d_caps.VertexShaderVersion);
-          pixel_shader_version_major = D3DSHADER_VERSION_MAJOR (d3d_caps.PixelShaderVersion);
-          pixel_shader_version_minor = D3DSHADER_VERSION_MINOR (d3d_caps.PixelShaderVersion);
-
-          switch (pixel_shader_version_major)
-          {
-            case 0:
-              shader_model = GraphicsStateGuardian::SM_00;
-              break;
-            case 1:
-              shader_model = GraphicsStateGuardian::SM_11;
-              break;
-            case 2:
-              // minimim specification for pixel shader 2.0 is 96 instruction slots
-              shader_model = GraphicsStateGuardian::SM_20;
-              if (d3d_caps.PS20Caps.NumInstructionSlots >= 512) {
-                shader_model = GraphicsStateGuardian::SM_2X;
-              }
-              break;
-            case 3:
-              shader_model = GraphicsStateGuardian::SM_30;
-              break;
-            case 4:
-            default:
-              shader_model = GraphicsStateGuardian::SM_40;
-              break;
-          }
-    #endif
-
-          if (debug)
-          {
-            printf ("shader_model = %d \n", shader_model);
-          }
-          get_device_caps_state = true;
-        }
-        else
-        {
-          get_device_caps_state = false;
-        }
-
-        // count display modes
-        int format_index;
-        int maximum_display_modes;
-        UINT display_mode_count;
-        D3DFORMAT d3d_format;
-
-        format_index = 0;
-        maximum_display_modes = 0;
-
-        while (display_format_array [format_index].d3d_format != D3DFMT_UNKNOWN)
-        {      
-          d3d_format = display_format_array [format_index].d3d_format;
-
-    #if DX8
-          display_mode_count = direct_3d -> GetAdapterModeCount (adapter);
-    #else
-          display_mode_count = direct_3d -> GetAdapterModeCount (adapter, d3d_format);
-    #endif
-          if (display_mode_count > 0)
-          {
-            UINT mode_index;
-            D3DDISPLAYMODE d3d_display_mode;
-
-            for (mode_index = 0; mode_index < display_mode_count; mode_index++)
-            {
-    #if DX8
-              if (direct_3d -> EnumAdapterModes (adapter, mode_index, &d3d_display_mode) == D3D_OK)
-    #else
-              if (direct_3d -> EnumAdapterModes (adapter, d3d_format, mode_index, &d3d_display_mode) == D3D_OK)
-    #endif          
-              {
-                if (d3d_display_mode.Width >= minimum_width && d3d_display_mode.Height >= minimum_height &&
-                    d3d_display_mode.Width <= maximum_width && d3d_display_mode.Height <= maximum_height)
-                {                  
-                  if (display_format_array [format_index].bits_per_pixel >= minimum_bits_per_pixel &&
-                      display_format_array [format_index].bits_per_pixel <= maximum_bits_per_pixel)
-                  {                
-                    if (d3d_format == d3d_display_mode.Format)
-                    {
-                      maximum_display_modes++;                
-                    }
-                  }
-                }
-              }            
-            }
-          }
-
-          format_index++;
-        }
-
-        if (debug)
-        {
-          printf ("maximum_display_modes %d \n", maximum_display_modes);
-        }
-
-        display_mode_array = new DisplayMode [maximum_display_modes];
-
-        format_index = 0;
-        while (display_format_array [format_index].d3d_format != D3DFMT_UNKNOWN)
-        {      
-          d3d_format = display_format_array [format_index].d3d_format;
-    #if DX8
-          display_mode_count = direct_3d -> GetAdapterModeCount (adapter);
-    #else
-          display_mode_count = direct_3d -> GetAdapterModeCount (adapter, d3d_format);
-    #endif      
-          if (display_mode_count > 0)
-          {
-            UINT mode_index;
-            D3DDISPLAYMODE d3d_display_mode;
-
-            for (mode_index = 0; mode_index < display_mode_count; mode_index++)
-            {
-    #if DX8
-              if (direct_3d -> EnumAdapterModes (adapter, mode_index, &d3d_display_mode) == D3D_OK)
-    #else
-              if (direct_3d -> EnumAdapterModes (adapter, d3d_format, mode_index, &d3d_display_mode) == D3D_OK)
-    #endif          
-              {
-                if (d3d_display_mode.Width >= minimum_width && d3d_display_mode.Height >= minimum_height &&
-                    d3d_display_mode.Width <= maximum_width && d3d_display_mode.Height <= maximum_height)
-                {                  
-                  if (display_format_array [format_index].bits_per_pixel >= minimum_bits_per_pixel &&
-                      display_format_array [format_index].bits_per_pixel <= maximum_bits_per_pixel)
-                  {
-                    if (debug)
-                    {
-                      printf ("w = %d h = %d r = %d f = %d \n",
-                        d3d_display_mode.Width,
-                        d3d_display_mode.Height,
-                        d3d_display_mode.RefreshRate,
-                        d3d_display_mode.Format);
-                    }
-
-                    if (d3d_format == d3d_display_mode.Format)
-                    {
-                      DisplayMode *display_mode;
-
-                      display_mode = &display_mode_array [total_display_modes];
-                      display_mode -> width = d3d_display_mode.Width;
-                      display_mode -> height = d3d_display_mode.Height;
-                      display_mode -> bits_per_pixel = display_format_array [format_index].bits_per_pixel;
-                      display_mode -> refresh_rate = d3d_display_mode.RefreshRate;
-                      display_mode -> fullscreen_only = display_format_array [format_index].fullscreen_only;
-
-                      total_display_modes++;
-                    }
-                  }
-                }
-              }            
-            }
-          }
-
-          format_index++;
-        }
-
-        UINT width;
-        UINT height;
-
-        width = 640;
-        height = 480;
-
-        // make a window
-        WNDCLASSEX window_class = 
-        { 
-          sizeof (WNDCLASSEX), CS_CLASSDC, window_procedure, 0L, 0L, 
-          GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
-          "class_name", NULL 
-        };
-        RegisterClassEx (&window_class);
-
-        HWND window_handle;
-
-        window_handle = CreateWindow ("class_name", "window_name", WS_DISABLED, 0, 0, width, height, (HWND) NULL, (HMENU) NULL, window_class.hInstance, NULL);
-        if (window_handle != NULL)
-        {
-          ShowWindow (window_handle, SW_HIDE);
-
-          DIRECT_3D_DEVICE direct_3d_device;
-          D3DPRESENT_PARAMETERS present_parameters;
-          DWORD behavior_flags;
-
-          direct_3d_device = 0;
-          memset (&present_parameters, 0, sizeof (D3DPRESENT_PARAMETERS));
-
-          present_parameters.BackBufferWidth = width; 
-          present_parameters.BackBufferHeight = height;
-          present_parameters.BackBufferFormat = D3DFMT_X8R8G8B8;
-          present_parameters.BackBufferCount = 1;
-
-          present_parameters.SwapEffect = D3DSWAPEFFECT_FLIP;
-          present_parameters.hDeviceWindow = window_handle;
-
-          present_parameters.Windowed = true;
-          present_parameters.EnableAutoDepthStencil = true;
-          present_parameters.AutoDepthStencilFormat = D3DFMT_D24S8;
-
-          present_parameters.FullScreen_RefreshRateInHz;
-
-    #if DX8
-    #else
-          present_parameters.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
-    #endif
-
-          if (d3d_caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
-          {
-            behavior_flags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
-          }
-          else
-          {
-            behavior_flags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
-          }
-
-          HRESULT result;
-
-          result = direct_3d -> CreateDevice (adapter, device_type, window_handle, behavior_flags, &present_parameters, &direct_3d_device);
-          if (result == D3D_OK)
-          {  
-            texture_memory = direct_3d_device -> GetAvailableTextureMem ( );
-
-            if (debug)
-            {
-              printf ("texture_memory = %d \n", texture_memory);
-            }
-
-            direct_3d_device -> Release ( );    
-
-            state = DisplayInformation::DS_success;    
-            success = true;
-          }
-          else
-          {
-            if (debug)
-            {
-              printf ("CreateDevice failed.\n");
-            }
-
-            state = DisplayInformation::DS_create_device_error;    
-            success = true;
-          }
-
-          DestroyWindow (window_handle);
-        }
-        else
-        {
-          _GetLastError ("CreateWindow");
-          state = DisplayInformation::DS_create_window_error;
-        }
-
-        direct_3d -> Release ( );
-
-
-GUID IID_IDirectDraw7X = { 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b };
-
-LPDIRECTDRAW7 lpDD;
-DDSCAPS2      ddsCaps2; 
-DWORD         dwTotal; 
-DWORD         dwFree;
-HRESULT       hr; 
-
-hr = DirectDrawCreateEx (NULL, (LPVOID *) &lpDD, IID_IDirectDraw7X, NULL); 
-if (hr == DD_OK) 
-{ 
-  hr = lpDD->QueryInterface (IID_IDirectDraw7X, (LPVOID *)&lpDD); 
-  if (hr == DD_OK) 
-  {
-    ZeroMemory (&ddsCaps2, sizeof(ddsCaps2));
-    ddsCaps2.dwCaps = DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
-    hr = lpDD -> GetAvailableVidMem (&ddsCaps2, &dwTotal, &dwFree); 
-    if (hr == DD_OK) 
-    {
-      printf ("******** dwTotal %d \n", dwTotal);
-    }
-    
-    lpDD -> Release ( );
-  }
-}
-
-
-      }
-      else
-      {
-        state = DisplayInformation::DS_direct_3d_create_error;
-      }
-    }
-    else
-    {
-      state = DisplayInformation::DS_direct_3d_create_error;  
-    }
-
-    FreeLibrary (d3d_dll);
-  }
-  else
-  {
-    state = DisplayInformation::DS_direct_3d_create_error;
-  }
-
-  if (success)
-  {
-    display_information -> _state = state;
-    display_information -> _get_adapter_display_mode_state = get_adapter_display_mode_state;
-    display_information -> _get_device_caps_state = get_device_caps_state;
-    display_information -> _maximum_window_width = window_width;
-    display_information -> _maximum_window_height = window_height;
-    display_information -> _window_bits_per_pixel = window_bits_per_pixel;
-    display_information -> _total_display_modes = total_display_modes;
-    display_information -> _display_mode_array = display_mode_array;
-    display_information -> _shader_model = shader_model;
-    display_information -> _texture_memory = texture_memory;
-  }
-
-  display_information -> _physical_memory = physical_memory;
-  display_information -> _available_physical_memory = available_physical_memory;
-
-  return success;
-}