D3D Enumeration



  • hi,
    ich versuche momentan einen Dialog zur Grafikkartenauswhl zu programmieren...
    Er funktioniert auch schon teilweise:
    - Er zeigt schön alle Adapter an und man kann sie auswählen
    - Man kann zwischen Softwaremodus und ggf. Hardwarebeschleunigung
    wählen
    - Man kann zwischen Fenster- oder Vollbildmodus wählen
    - Man kann den Videomodus wählen
    - Man kann teilweise den Backbuffer wählen
    - Er zeigt die Z-Stencil-Buffer-Formate an

    Meine Fragen:

    1.) Bei gewähltem Vollbildmodus kommen nur Videomodi mit 32 Bit

    hat sich erledigt... da hat was gaaanz kleines gefehlt

    2.) Bei gewähltem Software-Modus kommt kein Backbufferformat zur
    Auswahl

    Das check ich gar nich....
    Kann es sein, dass man bei den Funktionen CheckDeviceFormat und
    CheckDeviceType D3DDEVTYPE_HAL angeben MUSS?
    Hier ist der Code:

    int temp_bbpos =0; 
    
                         bool bHardwareFormatConversation; 
                         char acBackBufferString[256]; 
                         D3DFORMAT      aFormat[] = {D3DFMT_A2R10G10B10, D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, 
                                                    D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5}; 
                         for(int x=0; x < 6; x++) 
                         { 
                            if((g_pD3D->CheckDeviceFormat(iCur_Adapter,info[iCur_Adapter].DevType,info[iCur_Adapter].mode.Format, 
                                                     D3DUSAGE_RENDERTARGET,D3DRTYPE_SURFACE,aFormat[x])) == D3D_OK) 
                            {    
                               if(SUCCEEDED(g_pD3D->CheckDeviceType(iCur_Adapter,info[iCur_Adapter].DevType,info[iCur_Adapter].mode.Format, 
                                        aFormat[x],info[iCur_Adapter].bWindowed))) 
                               { 
                                  bHardwareFormatConversation = true; 
                                  if(info[iCur_Adapter].bWindowed && (aFormat[x] != info[iCur_Adapter].mode.Format)) 
                                  { 
                                     if(FAILED(g_pD3D->CheckDeviceFormatConversion(iCur_Adapter,info[iCur_Adapter].DevType,info[iCur_Adapter].mode.Format,aFormat[x]))) 
                                     { 
                                        bHardwareFormatConversation = false; 
                                        MessageBox(0,"keine HardwareFormatConversation möglich","Fehler",0); 
                                     } 
                                  } 
    
                                  if(bHardwareFormatConversation) 
                                  { 
                                     GetFormatString(aFormat[x],acBackBufferString); 
                                     if(info[iCur_Adapter].bWindowed) 
                                     { 
                                        sprintf(acBackBufferString, "%s %s", acBackBufferString, 
                                              aFormat[x] != info[iCur_Adapter].mode.Format ? "(Hardwarekonv.)" : ""); 
    
                                     } 
                                     SendDlgItemMessage(hWindowDlg, IDC_SETBACK, CB_ADDSTRING,0, (LPARAM)(acBackBufferString)); 
                                     info[iCur_Adapter].BackBufferFormats[temp_bbpos]=aFormat[x]; 
                                     temp_bbpos++; 
                                  } 
                               } 
                            } 
                         }
    

    Das war's eigentlich "schon"!
    Ich hoff mal, ihr wisst des....
    thnx,
    cYa

    [ Dieser Beitrag wurde am 27.06.2003 um 16:23 Uhr von PhilipS editiert. ]


Anmelden zum Antworten