2012-10-15 24 views
5

Ich möchte Multi-Sampling aktivieren, wenn Dreiecke wie auf dem folgenden Bild zeichnen: enter image description hereMultisampling funktioniert nicht im exklusiven Modus

ich einen Weg mit SlimDX in another question zu tun gefunden, aber es funktioniert nicht im exklusiven Modus.

Hier ist mein Code:

void Form1_Load(object sender, EventArgs e) 
{ 
    Direct3D d3d = new Direct3D(); 

    PresentParameters presentParams; 

    presentParams.Windowed = false; 
    presentParams.BackBufferFormat = Format.X8R8G8B8; 
    presentParams.BackBufferWidth = 800; 
    presentParams.BackBufferHeight = 600; 
    presentParams.FullScreenRefreshRateInHertz = 60; 
    presentParams.SwapEffect = SwapEffect.Copy; 
    presentParams.BackBufferCount = 1; 
    presentParams.PresentationInterval = PresentInterval.One; 

    int multisampleQuality; 
    Result result; 
    if (d3d.CheckDeviceMultisampleType(adaptor, DeviceType.Hardware, Format.X8R8G8B8, false, MultisampleType.FourSamples, out multisampleQuality, out result)) 
    { 
     if(multisampleQuality > 4) 
     { 
      presentParams.Multisample = multisampleType; 
      presentParams.MultisampleQuality = 4; 
     } 
    } 

    // Device creation 
    Device device = new Device(d3d, adaptor, DeviceType.Hardware, this.Handle, CreateFlags.HardwareVertexProcessing, presentParams); 
} 

Die letzte Zeile alway Crashs mit einem D3DERR_INVALIDCALL Fehler, auch wenn die CheckDeviceMultisampleType Rückkehr immer wahr ohne Fehler und 8 für multisampleQuality.

Es funktioniert, wenn ich den Fenstermodus verwende oder wenn ich die Multisample-Option entferne.

Kann mir jemand sagen, was los ist?

Antwort

1

Versuchen mit

presentParams.SwapEffect = SwapEffect.Discard; 
+0

Es funktioniert wie ein Charme !!! Vielen Dank :) –

+0

Hallo @catflier! Hast du eine Erklärung dafür? Ich erkannte, dass ich tatsächlich diesen aktuellen Parameter auf * SwapEffect.Copy * ... setzen muss ... –

+0

@tinmaru: Ja, es gibt einige Gründe, warum Sie das nicht tun können, vor allem da swapeffect.copy Pixel pro Pixel kopieren muss , so würde es nicht mit Msaa funktionieren (da Sie Sub-Pixel-Samples haben). Warum brauchen Sie auch SwapEffect.Copy? Verwerfen ist ziemlich Brei der Standard – catflier