Chciałbym włączyć multisampling podczas rysowania trójkątów jak na poniższym zdjęciu: wielodobieranie nie działa w trybie wyłączności
znalazłem sposób zrobić z SlimDX w another question ale to nie działa w trybie wyłączności.
Oto mój kod:
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);
}
Ostatnia linia sprecyzowane ścina z błędem D3DERR_INVALIDCALL nawet jeśli CheckDeviceMultisampleType powrót zawsze prawdziwe bez błędu i 8 dla multisampleQuality.
Działa, gdy korzystam z trybu okienkowego lub jeśli opcja multisample zostanie usunięta.
Czy ktoś może mi powiedzieć, co jest nie tak?
To działa jak urok !!! Dziękuję bardzo :) –
Hi @catflier! Czy masz wyjaśnienie tego? Zdałem sobie sprawę, że w rzeczywistości potrzebuję tego bieżącego parametru do ustawienia * SwapEffect.Copy * ... –
@tinmaru: Tak, jest kilka powodów, dla których nie możesz tego zrobić, głównie dlatego, że swapeffect.copy musi skopiować piksel na piksel , więc nie działałoby z msaa (ponieważ masz próbki subpikseli). Również dlaczego potrzebujesz SwapEffect.Copy? Odrzuć jest dość grubym standardem – catflier