DirectX 11 AntiAliasing



  • D3D11_RASTERIZER_DESC rd;
    rd.AntialiasedLineEnable = TRUE;
    rd.CullMode = D3D11_CULL_NONE;
    rd.DepthBias = 0;
    rd.DepthBiasClamp = 0;
    rd.DepthClipEnable = 1;
    rd.FillMode = D3D11_FILL_SOLID;
    rd.FrontCounterClockwise = 0;
    rd.MultisampleEnable = 0;
    rd.ScissorEnable = 0;
    rd.SlopeScaledDepthBias = 0;
    

    Das. Dabei will ich doch eigentlich nur oben die erste Einstellung ändern 😃


  • Mod

    du kannst die description abfragen die momentan gesetzt ist, deine aenderung machen und wieder setzen, falls es das ist was du fragst.



  • cooky451 schrieb:

    D3D11_RASTERIZER_DESC rd;
    rd.AntialiasedLineEnable = TRUE;
    rd.CullMode = D3D11_CULL_NONE;
    rd.DepthBias = 0;
    rd.DepthBiasClamp = 0;
    rd.DepthClipEnable = 1;
    rd.FillMode = D3D11_FILL_SOLID;
    rd.FrontCounterClockwise = 0;
    rd.MultisampleEnable = 0;
    rd.ScissorEnable = 0;
    rd.SlopeScaledDepthBias = 0;
    

    Das. Dabei will ich doch eigentlich nur oben die erste Einstellung ändern 😃

    Willst du wirklich nur Linien AA?



  • rapso schrieb:

    du kannst die description abfragen die momentan gesetzt ist, deine aenderung machen und wieder setzen, falls es das ist was du fragst.

    Ehm ja.. stimmt eigentlich. DX10: http://msdn.microsoft.com/en-us/library/bb173609(v=vs.85).aspx
    Allerdings scheint ein DX11 Device keinen RSGetState Member mehr zu besitzen 😕
    ID3D11DeviceContext hat den zwar, aber das funktioniert nicht so wirklich:

    ID3D11RasterizerState *rState;
    d3dDeviceContext->RSGetState(&rState);
    

    rState ist danach 0.
    Irgendwie komisch..

    Zudem hat das Ganze scheinbar eh keinen Einfluss. Sobald der Backbuffer Multisampled ist, ist es das Bild im Endeffekt auch. Also irgendwie scheint man RSSetState() gar nicht zu brauchen..

    this->that schrieb:

    Willst du wirklich nur Linien AA?

    Tja, ich würde ja jetzt gerne "fixed" oder sowas schreiben, aber RSSetState() scheint wie gesagt gar keinen Einfluss zu haben. Alles etwas verwirrend gerade 🙄

    Edit:
    Allerdings funktioniert jetzt der Z-Buffer mit MSAA nicht mehr 😕



  • cooky451 schrieb:

    ID3D11DeviceContext hat den zwar, aber das funktioniert nicht so wirklich:

    ID3D11RasterizerState *rState;
    d3dDeviceContext->RSGetState(&rState);
    

    rState ist danach 0.
    Irgendwie komisch..

    Hast du denn schonmal einen State gesetzt?

    cooky451 schrieb:

    Zudem hat das Ganze scheinbar eh keinen Einfluss. Sobald der Backbuffer Multisampled ist, ist es das Bild im Endeffekt auch. Also irgendwie scheint man RSSetState() gar nicht zu brauchen..

    Doch, eigentlich schon, außer du setzt den RasterizerState schonmal irgendwie anders (z.B. in nem Effect File).

    cooky451 schrieb:

    Edit:
    Allerdings funktioniert jetzt der Z-Buffer mit MSAA nicht mehr 😕

    Vermutlich weil dein Depth-Buffer nicht multisampled ist...



  • Ok, AA läuft soweit. Der Witz war dass ich gar keinen DepthBuffer erstellt habe, da ich mich durch die Samples gearbeitet hatte und die es wohl lustig finden den CULLMODE als eine Art Z-Buffer zu missbrauchen 😃

    Trotzdem bleiben Fragen offen:
    - Warum funktioniert RSGetState() nicht? Ich müsste den aktuellen Status doch auch abfragen können, ohne vorher manuell einen gesetzt zu haben?

    - Ich scheine RSSetState() wirklich nicht zu brauchen, AA funktioniert auch ohne.

    - Was soll eigentlich diese "Quality" Einstellung? Ich kann bei Count=4 zwischen Quality=0 und Quality=4 keinen Unterschied ausmachen..



  • cooky451 schrieb:

    - Warum funktioniert RSGetState() nicht? Ich müsste den aktuellen Status doch auch abfragen können, ohne vorher manuell einen gesetzt zu haben?

    Und wo genau steht das?

    cooky451 schrieb:

    - Ich scheine RSSetState() wirklich nicht zu brauchen, AA funktioniert auch ohne.

    Laut Doku solltest du es brauchen.

    cooky451 schrieb:

    - Was soll eigentlich diese "Quality" Einstellung? Ich kann bei Count=4 zwischen Quality=0 und Quality=4 keinen Unterschied ausmachen..

    Naja, damit kannst du eben die Qualität des Multisampling einstellen. Was das genau bedeutet ist Hardwareabhängig.



  • dot schrieb:

    cooky451 schrieb:

    - Warum funktioniert RSGetState() nicht? Ich müsste den aktuellen Status doch auch abfragen können, ohne vorher manuell einen gesetzt zu haben?

    Und wo genau steht das?

    Nirgendwo, aber solange nicht explizit gesagt wird dass es nicht geht, würde ich irgendwie immer davon ausgehen dass man den Status auch so abfragen kann. Denn irgendein Status muss doch wohl gesetzt sein 😕

    dot schrieb:

    cooky451 schrieb:

    - Ich scheine RSSetState() wirklich nicht zu brauchen, AA funktioniert auch ohne.

    Laut Doku solltest du es brauchen.

    Tjoa.. auch wenn es ziemlich unwahrscheinlich klingt, ich brauch es wohl nicht.

    dot schrieb:

    cooky451 schrieb:

    - Was soll eigentlich diese "Quality" Einstellung? Ich kann bei Count=4 zwischen Quality=0 und Quality=4 keinen Unterschied ausmachen..

    Naja, damit kannst du eben die Qualität des Multisampling einstellen. Was das genau bedeutet ist Hardwareabhängig.

    Damit werd ich mich wohl abfinden müssen, man kann die zur Verfügung stehenden Level ja abfragen.



  • cooky451 schrieb:

    dot schrieb:

    cooky451 schrieb:

    - Warum funktioniert RSGetState() nicht? Ich müsste den aktuellen Status doch auch abfragen können, ohne vorher manuell einen gesetzt zu haben?

    Und wo genau steht das?

    Nirgendwo, aber solange nicht explizit gesagt wird dass es nicht geht, würde ich irgendwie immer davon ausgehen dass man den Status auch so abfragen kann. Denn irgendein Status muss doch wohl gesetzt sein 😕

    Kein State-Object entpspricht dem Default State. Was genau das für Werte sind findest du in der Doku.

    cooky451 schrieb:

    dot schrieb:

    cooky451 schrieb:

    - Ich scheine RSSetState() wirklich nicht zu brauchen, AA funktioniert auch ohne.

    Laut Doku solltest du es brauchen.

    Tjoa.. auch wenn es ziemlich unwahrscheinlich klingt, ich brauch es wohl nicht.

    Sehr merkwürdig, hast du das schonmal auf anderen Rechnern getestet?



  • dot schrieb:

    Sehr merkwürdig, hast du das schonmal auf anderen Rechnern getestet?

    Jetzt ja. Auf meinen beiden Rechnern läufts. (Beides NVidia Karten). Auf dem Rechner eines Kollegen (Radeon) failt D3D11CreateDeviceAndSwapChain() wenn MSAA aktiviert ist. Dürfte zwar nichts mit RSSetState() am Hut haben, da das ja erst später aufgerufen würde, aber komisch ist es trotzdem..

    Ich habe mal zwei Versionen hochgeladen:
    Ohne MSAA: http://www65.zippyshare.com/v/70982314/file.html
    Mit MSAA: http://www66.zippyshare.com/v/52292502/file.html

    Den Quelltext dazu zu zeigen macht glaube ich wenig Sinn, da das mein DX11 Testprojekt ist und der Quelltext somit eher unlesbar ist 😉
    RSSetState() wird aber von mir nicht aufgerufen.


Anmelden zum Antworten