Grafikkartenenumerationsdialog



  • Parapiler schrieb:

    Heute hat man noch 1 Grafikkarte im Board, manche haben schon 2. Vielleicht haben wir in 2 Jahren 10.

    Bist Du irgendwie paranoid oder so?!?! 😕

    Mal im Ernst: Die Tutorials reservieren meistens 20x Adapterplatz. Dann checkst Du, wie viele es wirklich sind und füllst das Ding. Da würde ich nichtmal 'ne if-Abfrage reinbauen, 20 Adapter hat auch in 10 Jahren kein Mensch drin!!
    Wenn das Ding nachher ausgewählt ist, kannst Du das Teil wieder löschen. Fertig.
    Die paar Bytes dürften keinem weh tun.
    Oder willst Du 'ne 3D-Anwendung für 'nen 8 MB-Rechner bauen?!?



  • ja und was ist mit den devices?!

    sagen wir mal ich habe 2 grafikkarten drin.... gehen wir mal in windows gucken welche auflösungen so angeboten werden.... nagut sagen wir mal wir picken uns die besten 4 raus, dann sind wir schon bei 8. Gehen wir davon aus das Die Farbtiefe auch noch reinspielt sind wir schon bei 3 weiteren für 8, 16 und 32 bei 8 * 3 = 24 Devices. Nehme ich jetzt noch an das das ganze noch in 2 Windowmodes aufgeteilt werden kann, bin ich bei 48 usw.

    Ich weiss doch gar nicht was danach noch kommt... Wo soll ich denn da die Grenze setzten?! Also die 40 sind da ja jetzt schon zu tief. Und je nach dem wie groß der Datentyp ist geht ziemlich viel Performance flutschen....



  • Ich habe grade mal in den Samples des DX SDK geschaut die machen das allerdings auch dynamisch:

    struct D3DAdapterInfo
    {
        int AdapterOrdinal;
        D3DADAPTER_IDENTIFIER9 AdapterIdentifier;
        CArrayList* pDisplayModeList; // List of D3DDISPLAYMODEs
        CArrayList* pDeviceInfoList; // List of D3DDeviceInfo pointers
        ~D3DAdapterInfo( void );
    };
    

    aber naja... ich verstehe nicht welche Strukturen welche Elemente sinnvollerweise haben sollten.

    Gruß Para



  • Parapiler schrieb:

    Und je nach dem wie groß der Datentyp ist geht ziemlich viel Performance flutschen....

    Performance bei 'nem "Grafikkartenauswahldialog"??? 😕

    Zudem würde ich 8 Bit-Auflösungen gar nicht mehr anbieten. Entweder 16 oder 32 Bit (bzw. richtigerweise 24 Bit). 💡

    Wo ist das Problem, nachdem Du das D3D Objekt kreiert hast,
    mit
    IDirect3D9::GetAdapterCount Method (Returns the number of adapters on the system)
    bzw.
    IDirect3D9::GetAdapterModeCount Method (Returns the number of display modes available on this adapter)
    die Anzahl rauszufinden?



  • Macht's doch nicht so kompliziert. Einfach std::list oder std::vector benutzen, und gut ist...

    Bye, TGGC \-/





  • was haltet ihr eigendlich von der Lösung hier:

    typedef const enum VERTEXPROCESSING
    {
    	SOFTWARE_VP,
    	MIXED_VP,
    	HARDWARE_VP,
    	PURE_HARDWARE_VP
    };
    
    typedef struct MACDEVICECOMBINATION
    {
    	int adapter; 
    	bool windowed;  
    	D3DFORMAT adapterFormat;                 
    	D3DFORMAT backbufferFormat;                                         
    	D3DDEVTYPE DeviceTyp;                                                 
    	std::vector<D3DFORMAT*> ptr_stencilFormat;      
    	std::vector<D3DMULTISAMPLE_TYPE*> ptr_multisampleTypes;
    	std::vector<int> multisample_quality;
    	std::vector<VERTEXPROCESSING*> vertex_processing;
    	std::vector<D3DPRESENT_PARAMETERS> present_intervall;
    
    };
    
    typedef struct MACDEVICE
    {   
    	int adapter;                             //adapter id
    	D3DDEVTYPE devtype;                      //hal, ref, sw
    	D3DCAPS9 d3d_caps;						 //caps
    	std::vector <MACDEVICECOMBINATION*>ptr_combo; //dialog combination
    };
    
    typedef struct MACADAPTER
    {
    	int adapter;									  //adapternr.
    	D3DADAPTER_IDENTIFIER9 adapterinfo;				  //Treiberinformationen
    	vector<D3DDISPLAYMODE*> displaymodes;             //Array von Moden
    	vector<MACDEVICE*> deviceinfo;                    //Array von Devicestrukturen
    };
    

    Bitte ehrliche Meinungen und Verbesserungsvorschlage 😃



  • Das ist keine Lösung sondern 4 typedefs.

    Bye, TGGC \-/



  • wow die hammer aussage....

    Ich weiss wohl selber das es typedefs sind.



  • Die Frage ist: Was ist überhaupt deine Frage?

    Willst du wissen,

    - wie du den Grafikkartenenumerationsdialog programmieren musst?
    - was die Begriffe in den Strukturen bedeuten?
    - wie die Strukturen aufeinander aufbauen?
    - warum gerade die jeweiligen Elemente in der jeweiligen Struktur sind?
    - ...

    Wenn du uns das mal gesagt hast, können wir dir vielleicht mit richtigen Antworten weiterhelfen...



  • Naja ich teils mal auf:

    Meine Frage war:

    * primär: Wie muss ich die Strukturen aufbauen, damit das Sinn ergibt. Ich habe im Netz die Strukturen von ganz oben gefunden, habe allerding mich im weiteren an der D3DEnumeration.h in den Samples des DXSDK 9 orientiert.

    * sekundär: Natürlich ist mir auch noch nicht 100 %ig klar, wie ich einen solchen Dialog vom Code her aufbauen (also wie ich den Dialog anzeige und Starte, das ist mir klar, allerdings nicht, wie ich jetzt an die Daten in der Grafikkarte komme und wie ich die Daten aktualisiere

    Meine Frage ist nun:

    * Die Strukturen, wie ich sie gepostet habe (von den Elementen her), ergeben die im Zusammenhang auf Frage 1 oben einen Sinn oder mache ich das besser anders (wenn anders: wie?! ) ?!

    * das mit dem Dialog bleibt, daran habe ich noch nix getan

    * Eine weitere Frage ist aufgekommen: Meine enumerationsklasse ist durch einen Eziger auf sich in meine d3d klasse eingebunden. Für die Enumeration muss ich ja d3d initalisieren (wegen dem d3d_device). Wo mache ich das am besten???

    Gruß Para



  • Klar, ich bin hier ja auch zuständig für die Hammer Aussagen. 😎

    Meine Frage ist nun:

    * Die Strukturen, wie ich sie gepostet habe (von den Elementen her), ergeben die im Zusammenhang auf Frage 1 oben einen Sinn oder mache ich das besser anders (wenn anders: wie?! ) ?!

    Wenn alles drin gespeichert ist, was du brauchst: ja.

    * das mit dem Dialog bleibt, daran habe ich noch nix getan

    Ahso, und das hat was mit mir zu tun?

    * Eine weitere Frage ist aufgekommen: Meine enumerationsklasse ist durch einen Eziger auf sich in meine d3d klasse eingebunden. Für die Enumeration muss ich ja d3d initalisieren (wegen dem d3d_device). Wo mache ich das am besten???

    Irgendwo Im Code bevor du anfängst zu enumerieren.

    BTW: Was ist ein Eziger? Sowas wie ein Singleton?

    Bye, TGGC \-/



  • waren das jetzt die richtigen Antworten die mir weiterhelfen?!

    Ich denke nicht. Also sagt mir was ich falsch mache, was ihr an meiner Frage nicht versteht oder warum ihr so ein Problem damit habt, ernsthaft die Fragen zu beantworten.

    Gruß Para



  • Die Strukturen sind so i.O., wenn du denn wirklich alle Infos dadrin brauchst.

    Wie du an die Infos rankommst, erfährst du in den beiden geposteten Links oder in der SDK Doku. Außerdem kannst du die Suche des Forums betätigen, da erst letztens der komplette Code zur Enumeration gepostet wurde.



  • hmmm also unter dem Stichwort Grafikkartenenumeration hatte ich keine Einträge gefunden, vielleicht habe ich es ja falsch geschrieben.

    Wenn jemand ganz zufällig den Link weiss, bitte posten.





  • Parapiler schrieb:

    Ich denke nicht.

    Ja, ich habe dein Problem auch schon erkannt.

    Bye, TGGC \-/



  • TGGC schrieb:

    Parapiler schrieb:

    Ich denke nicht.

    Ja, ich habe dein Problem auch schon erkannt.

    Der war fies!! 👎 👎

    🤡 😉


Anmelden zum Antworten