videoformat-nach einzelnen formaten suchen, oder alle testen



  • also, ich sitze wieder einmal an der initialisierung von directx,und zwar an dem videomodus, und frag mich, was besser wäre:
    a) eine funktion schreiben, der man breite/höhe/pixelformat übergibtgibt, und so testet,ob das format unterstützt wird:

    bool checkVideoFormat(unsigned int width,unsigned int height,D3DFORMAT videoFormat);
    

    liefe darauf hinaus, dass man nur einige wenige formate testet,was natürlich den user beschneiden würde(zb wenn man nur 800x600x16/1024x768x32 abfragt)
    oder b)
    wie gehabt einfach nur das pixelformat abfragen,und alle möglichen formate bis zum ende durchschleifen...

    was würdet ihr bevorzugen?



  • It depends.

    Bye, TGGC \-/



  • on?



  • hm ich hab mich dann erstmal wieder auf die basics besinnt, ich wollte mal fragen, wie ihr diese funktion hier findet? hab mir mühe gegeben, aber irgendwie hab ich das gefühl, dass man die enumeration nicht schön hinbekommen kann^^

    //header
    struct GraphicFormat{
            D3DFORMAT backgroundFormat;
            D3DFORMAT zStencilbufferFormat;
            std::vector<D3DMULTISAMPLE_TYPE> multisampleFormats;
        };
        struct AdapterCaps{
            std::vector<D3DDISPLAYMODE> displayModes;
            std::vector<GraphicFormat> graphicFormats;
            D3DCAPS9 caps;
        };
        std::vector<AdapterCaps> enumerate(IDirect3D9* DXInterface,std::vector<D3DFORMAT> backgroundFormat,std::vector<D3DFORMAT> zStencilbufferFormat,std::vector<D3DMULTISAMPLE_TYPE> multisamplingFormat,bool windowed=false);
    //cpp
    #include "EngineInit.hpp"
    std::vector<Engine::AdapterCaps> Enumerate(IDirect3D9* DXInterface,std::vector<D3DFORMAT> backgroundFormat,std::vector<D3DFORMAT> zStencilbufferFormat,std::vector<D3DMULTISAMPLE_TYPE> multisamplingFormat,bool windowed=false){
        std::vector<Engine::AdapterCaps> adapterCaps;
            //enumerations
            for(unsigned int adapterID=0;adapterID<DXInterface->GetAdapterCount();++adapterID){
                Engine::AdapterChecker checker(DXInterface,adapterID,windowed);
    
                //add adapterCaps structure
                adapterCaps.push_back();
                Engine::AdapterCaps& cardCaps=adapterCaps.back();
    
                //get AdapterCaps
                cardCaps.caps=checker.getCaps();
    
                //get videomodes
                checker.getVideoModes(D3DFMT_R5G6B5,cardCaps.displayModes);//16bit
                checker.getVideoModes(D3DFMT_A8R8G8B8,cardCaps.displayModes);//32bit
    
                //checking backbufferformat
                for(unsigned int backgroundID=0;backgroundID<backgroundFormat.size();++backgroundID){
                    if(checker.checkBackbuffer(backgroundFormat[backgroundID],backgroundFormat[backgroundID])){
    
                        //checking zStencilbuffer Format
                        for(unsigned int zStencilbufferID=0;zStencilbufferID<zStencilbufferFormat.size();++zStencilbufferID){
                            if(checker.checkStencilbuffer(backgroundFormat[backgroundID],zStencilbufferFormat[zStencilbufferID],backgroundFormat[backgroundID])){
    
                                //at this position, we have all data needed for creating  an entry
                                cardCaps.graphicFormats.push_back();
                                Engine::GraphicFormat& format=cardCaps.graphicFormats.back();
    
                                format.backgroundFormat=backgroundFormat[backgroundID];
                                format.zStencilbufferFormat=zStencilbufferFormat[zStencilbufferID];
    
                                //now we have to check all multisampleformats, which fit to this backbuffer/stencilbuffer combination
                                for(unsigned int multisampleID=0;multisampleID<multisamplingFormat.size();++multisampleID){
                                    if(checker.checkMultisampling(backgroundFormat[backgroundID],zStencilbufferFormat[zStencilbufferID],multisamplingFormat[multisampleID])){
                                        format.multisampleFormats.push_back(multisamplingFormat[multisampleID]);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return adapterCaps;
        }
    

    wie immer: tipps required, wie gesagt, hab mir mühe gegeben, hab aber trotz immer benutztem dx sdk keine ahnung, ob ich nicht irgendwas vergessen hab, zb die sache mit der multisamplequality hab ich auslassen müssen, weil ich keine ahnung hatte, was die von mir wollten 🙄



  • otze schrieb:

    hm ich hab mich dann erstmal wieder auf die basics besinnt, ich wollte mal fragen, wie ihr diese funktion hier findet? hab mir mühe gegeben, aber irgendwie hab ich das gefühl, dass man die enumeration nicht schön hinbekommen kann^^

    In C++ wohl nicht. Ich liebe managed DX mit C# 🙂



  • Das ganze restliche Rundrum. Ich finde es z.b. sinnlos dem User eine Liste mit 100 Einträge aller möglichen Formate zu zeigen, aus denen er dann wählen soll.

    Bye, TGGC (Dem beste BdT)



  • das is sicher richtig, tggc, aber andererseits ist das auch nicht die aufgabe dieser funktion, die werte zu überprüfen und werte die einfach nur unlogisch sind rauszuwerfen. kommt ja wie gesagt auf das "drumherum" an, oder mit andren worten: soll sich doch wer anders drum kümmern 😉

    zb kann man ja nochmal ne klasse darum aufbauen, die sortieralgorithmen und andere functoren annimmt,und damit die von der funktion zurückgelieferten werte bearbeitet 😉



  • Also, was genau willst du wissen?

    Bye, TGGC \-/



  • a) geht das schöner
    b) was hat das mit der multisampling quality auf sich?^^



  • zu a) Schöner? Definiere "schöner". Schöner für den User?
    zu b) Das steht eigentlich gut in der Doku: die Qualität des FSAA.

    Bye, TGGC \-/


Anmelden zum Antworten