Home
DirectX 8
  • Einleitung
  • Initialisierung
  • Enumeration

    Java
    Links


    Kontakt












  • DirectX Programmierung - Enumeration
    • 2.2 Aufzählen aller Grafik Modi

      Im SDK Beispiel von Microsoft wird eine DeviceListe erstellt. Indem alle möglichen Einstellungen (Grafikkarte, Auflösung, Hardware unterstützung usw.) drin stehen.
      Im SDK gibt es folgende Routine die ich auch so übernommen habe.
      	HRESULT BuildDeviceList()
      	
      Den Source Code brauche ich hier ja nicht bereitstellen. Ihr habt ihn ja im SDK.
      Um mit dieser Liste besser umgehen zu können habe ich einige Hilfsroutinen geschrieben. Auf dem ersten Blick mag das alles ein wenig übertrieben sein, doch später kann man damit ein schönes Auswahl Dialog Fenster erstellen.

      Dialog Beispiel
      //
      // Wieviel Adapter gibt es ? 
      //
      int DeviceList_getAdapterCount() {
      {
          return m_dwNumAdapters;
      }
      	
      //  
      // Welchen Namen hat der Adpater ?
      // !! Für Name musss vorher Speicher reseviert wurden sein. ! !
      DeviceList_getAdapterName(int index, char *Name)
      {
          D3DAdapterInfo* pAdapterInfo;
          pAdapterInfo = &m_Adapters[index];
      
          strcpy(Name,pAdapterInfo->d3dAdapterIdentifier.Description);
          return 0;
      }	
      	
      //  
      // Anzahl der Device's Meisst Hal oder Ref also 2 
      //
      int DeviceList_getAdapterDeviceCount(int index)
      {
          D3DAdapterInfo* pAdapterInfo;
          pAdapterInfo = &m_Adapters[index];
      		return pAdapterInfo->dwNumDevices;
      }
      	
      //
      // Name des Devices
      // !! Für Name musss vorher Speicher reseviert wurden sein. ! !
      int DeviceList_getAdapterDeviceName(int index,int DeviceIndex,char *Name)
      {
          D3DAdapterInfo* pAdapterInfo;
          D3DDeviceInfo*  pDeviceInfo;
          pAdapterInfo = &m_Adapters[index];
      
          pDeviceInfo  = &pAdapterInfo->devices[DeviceIndex];
          strcpy(Name,pDeviceInfo->strDesc);
          return pAdapterInfo->dwNumDevices;
      }
      	
      //
      // Anzahl der Bildschirm Modi des Devices
      //
      int DeviceList_getModeCount(int AdapterIndex, int DeviceIndex)
      {
          D3DAdapterInfo* pAdapterInfo;
          D3DDeviceInfo*  pDeviceInfo;
      
          pAdapterInfo = &m_Adapters[AdapterIndex];
          pDeviceInfo  = &pAdapterInfo->devices[DeviceIndex];
      
          return pDeviceInfo->dwNumModes;
      }
      
      //
      // Auflösung einholen Breite Höhe farbtiefe usw. 
      //
      int DeviceList_getMode(int AdapterIndex,int deviceIndex,int modeIndex,
                             int &w, int &h, int &window, int &bit)
      {
          D3DAdapterInfo* pAdapterInfo;
          D3DDeviceInfo*  pDeviceInfo;
          D3DModeInfo*    pModeInfo;
          D3DFORMAT* pDepthStencilFormat;
      
          pAdapterInfo = &m_Adapters[AdapterIndex];
          pDeviceInfo  = &pAdapterInfo->devices[deviceIndex];
          pModeInfo    = &pDeviceInfo->modes[modeIndex];
          w =  pModeInfo->Width;
          h =  pModeInfo->Height;
          pDepthStencilFormat = &pModeInfo->DepthStencilFormat;
          bit = pModeInfo->Format==D3DFMT_X8R8G8B8?32:16;
          return m_dwAdapter;
      }
      	 
      	
      	

      Mit dieser Liste und den Routinen kann man dann ganz einfach ein Dialog erstellen.
      (Pseudo Code)
          for i = 0 to DeviceList_getAdapterCount-1 do begin
              DeviceList_getAdapterName(i,adapterName);
      				
              // Listbox Karten Füllen
              setGraphModus.Items.append(adapterName);
                
              for deviceIndex = 0 to DeviceList_getAdapterDeviceCount(i)-1 do begin
                 for modeIndex = 0 to DeviceList_getModeCount(i,deviceIndex)-1 do begin
                     mode := DeviceList_getMode(i,deviceIndex,modeIndex,w,h,wind,bit);
                     DeviceList_getAdapterDeviceName(i,deviceIndex,deviceName);
                     str := Format('%s w:%d b:%d bit:%d Device:%s',[adapterName,w,h,bit,deviceName]);
      							 
                     // Listbox mit Modi füllen
                     adapters.Items.Append(str);
                  end;
              end;
           end;