Axiom.RenderSystems.DirectX9.D3DRenderSystem.DetermineFSAASettings C# (CSharp) Метод

DetermineFSAASettings() приватный метод

private DetermineFSAASettings ( Device d3D9Device, int fsaa, string fsaaHint, System.Text.Format d3DPixelFormat, bool fullScreen, MultisampleType &outMultisampleType, int &outMultisampleQuality ) : void
d3D9Device Device
fsaa int
fsaaHint string
d3DPixelFormat System.Text.Format
fullScreen bool
outMultisampleType MultisampleType
outMultisampleQuality int
Результат void
        internal void DetermineFSAASettings(Device d3D9Device,
            int fsaa, string fsaaHint, Format d3DPixelFormat,
            bool fullScreen, out MultisampleType outMultisampleType, out int outMultisampleQuality)
        {
            outMultisampleType = MultisampleType.None;
            outMultisampleQuality = 0;

            var ok = false;
            var qualityHint = fsaaHint.Contains("Quality");
            var origFSAA = fsaa;

            var driverList = Direct3DDrivers;
            var deviceDriver = _activeD3DDriver;
            var device = _deviceManager.GetDeviceFromD3D9Device(d3D9Device);

            foreach (var currDriver in driverList)
            {
                if ( currDriver.AdapterNumber != device.AdapterNumber )
                    continue;
                deviceDriver = currDriver;
                break;
            }

            var tryCsaa = false;
            // NVIDIA, prefer CSAA if available for 8+
            // it would be tempting to use getCapabilities()->getVendor() == GPU_NVIDIA but
            // if this is the first window, caps will not be initialised yet
            if (deviceDriver.AdapterIdentifier.VendorId == 0x10DE && 
                fsaa >= 8)
            {
                tryCsaa     = true;
            }
            
            while (!ok)
            {
                // Deal with special cases
                if (tryCsaa)
                {
                    // see http://developer.nvidia.com/object/coverage-sampled-aa.html
                    switch(fsaa)
                    {
                    case 8:
                        if (qualityHint)
                        {
                            outMultisampleType = MultisampleType.EightSamples;
                            outMultisampleQuality = 0;
                        }
                        else
                        {
                            outMultisampleType = MultisampleType.FourSamples;
                            outMultisampleQuality = 2;
                        }
                        break;
                    case 16:
                        if (qualityHint)
                        {
                            outMultisampleType = MultisampleType.EightSamples;
                            outMultisampleQuality = 2;
                        }
                        else
                        {
                            outMultisampleType = MultisampleType.FourSamples;
                            outMultisampleQuality = 4;
                        }
                        break;
                    }
                }
                else // !CSAA
                {
                    outMultisampleType = (MultisampleType)fsaa;
                    outMultisampleQuality = 0;
                }

                int outQuality;
                var hr = _pD3D.CheckDeviceMultisampleType(
                    deviceDriver.AdapterNumber, DeviceType.Hardware, d3DPixelFormat,
                    fullScreen, outMultisampleType, out outQuality );

                if (hr && (!tryCsaa || outQuality > outMultisampleQuality))
                {
                    ok = true;
                }
                else
                {
                    // downgrade
                    if (tryCsaa && fsaa == 8)
                    {
                        // for CSAA, we'll try downgrading with quality mode at all samples.
                        // then try without quality, then drop CSAA
                        if (qualityHint)
                        {
                            // drop quality first
                            qualityHint = false;
                        }
                        else
                        {
                            // drop CSAA entirely 
                            tryCsaa = false;
                        }
                        // return to original requested samples
                        fsaa = origFSAA;
                    }
                    else
                    {
                        // drop samples
                        --fsaa;

                        if (fsaa == 1)
                        {
                            // ran out of options, no FSAA
                            fsaa = 0;
                            ok = true;
                        }
                    }
                }

            } // while !ok
        }
D3DRenderSystem