IDirect3D9::CreateDevice möglichst gut aufrufen



  • Hi,

    mit welchen Parametern ruft ihr CreateDevice auf, oder würdet es empfehlen, wenn der Benutzer möglichst wenig Enstellungen treffen müssen soll?

    Adapter:
    D3DADAPTER_DEFAULT - dürfte meiner Meinung nach in 98% der Fälle funktionieren

    DeviceType:
    D3DDEVTYPE_HAL

    hFocusWindow:
    ...

    BehaviorFlags:
    D3DCREATE_MIXED_VERTEXPROCESSING oder D3DCREATE_HARDWARE_VERTEXPROCESSING?

    Ich bin mir da nichtmal über die genaue Bedeutung bzw. den Unterschied bewusst. Die DirectX Doku sagt:

    D3DCREATE_HARDWARE_VERTEXPROCESSING
    Specifies hardware vertex processing.

    D3DCREATE_MIXED_VERTEXPROCESSING
    Specifies mixed (both software and hardware) vertex processing.

    Heißt das dann, wenn die Hardware eine Operation nicht unterstützt, wird sie bei D3DCREATE_HARDWARE_VERTEXPROCESSING weggelassen, bei D3DCREATE_MIXED_VERTEXPROCESSING aber emuliert? Wenn das so ist, würde ich D3DCREATE_MIXED_VERTEXPROCESSING wählen, sieht das jemand ähnlich?

    pPresentationParameters:
    BackBufferWidth, BackBufferHeight: Vom User erfragt
    BackBufferFormat: Würde ich pauschal zu X8R8G8B8 greifen, wenn man es ab einer gewissen DirectX-Version voraussetzen darf
    BackBufferCount: 1
    MultiSampleType: Vom User erfragt
    MultiSampleQuality: Über die Caps ermittelt - immer höchste Einstellung
    SwapEffect: D3DSWAPEFFECT_DISCARD - laut Doku der Einzige, mit dem MultiSampling klappt
    hDeviceWindow: ...
    Windowed: Vom User erfragt
    EnableAutoDepthStencil: TRUE
    AutoDepthStencilFormat: D3DFMT_D24S8
    Flags: Keine??
    FullScreen_RefreshRateInHz: 0, falls Windowed TRUE, ansonsten vom User erfragt
    PresentationInterval: D3DPRESENT_INTERVAL_DEFAULT

    ppReturnedDeviceInterface:
    ...

    Ja, was mir noch unklar ist, habe ich ja schon kurz erwähnt. Aber im allgemeinen Frage ich mich, kann ich bestimmte Formate voraussetzen? Da gibt es ja so nette Begrifflichkeiten wie "Vollständig DirectX 9 kompatible Grafikkarte". Könnte ich da mein BackBufferFormat und AutoDepthStencilFormat voraussetzen? Was gibt es noch wichtiges zu beachten? Ist es in der Praxis üblich, dass die Grafikkarten je nach Backbuffer-Format unterschiedliche Auflösungen unterstützen? Ich hab gelesen, dass man mit allem rechnen sollte, aber dieses mit allem rechnen verkompliziert auch wieder vieles... 😉



  • Also Grafik-Einstellung ist meiner Meinung nach garnicht so schwer.
    Spontan würde ich das hier als Anfang nehmen
    http://www.zfx.info/Tutorials.php?ID=78

    HAL würde ich standartmäßig voraussetzen, REF wäre für ne Diashow geeigneter
    Das Vertexprozessing Zeug ist T&L, von Mixed würd ich abraten: macht oft Probleme
    Software kannste machen wenn wenig berechnungen anfallen, aber ein _richtiges_ Spiel setzt Hardware T&L voraus.
    Kannste prüfen indem du in den Caps DevCaps auf D3DDEVCAPS_HWTRANSFORMANDLIGHT testest

    Such mal in der DX-Docu nach GetAdapterModeCount, EnumAdapterModes, CheckDeviceFormat, CheckMultiSampleType.
    Oder leg dir gleich ein richtiges Buch zu dem Thema zu (meine Empfehlung: David Scherfgen "3D-Spieleprogrammierung mit DirectX9 und C++, 3. Auflage")



  • Ich kenne die Funktionen und besitze sogar das genannte Buch, die Fragen bleiben trotzdem offen. 😉


Anmelden zum Antworten