【问题标题】:How to find best MSAA level available in DXUT's ModifyDeviceSettings function如何在 DXUT 的 ModifyDeviceSettings 函数中找到最佳 MSAA 级别
【发布时间】:2015-10-02 08:22:24
【问题描述】:

我想在 DXUT (d3d11) 函数的 ModifyDeviceSettings 回调中选择一个合适的 MSAA 级别,但没有可用于调用 CheckMultisampleQualityLevels 的设备指针。

DXUT 函数 DXUTGetD3D11Device 在 init 的此时返回 null。有许多 D3D9 示例可以满足我的需求,但它们依赖于旧的 DXUTGet3DObject(或其他)调用来返回实时设备指针,而您在 D3D11 中没有。

如果我只是在 pDeviceSettings->d3d11.sd.SampleDesc.Count 中填入“4”就可以了,如果我选择的数字太大,它将恢复为 1,但我想选择最好的最高但不高于 4。

有谁知道我如何枚举 DXUT 框架中可用的多重采样级别并选择一个我认为最好的?

【问题讨论】:

    标签: c direct3d dxut


    【解决方案1】:

    首先,确保您使用的是来自GitHub 的最新DXUT for Direct3D11

    DXUT 枚举所有 MSAA 信息,作为对CD3D11EnumDeviceSettingsCombo 成员multiSampleCountListmultiSampleQualityList 中设置对话框的支持的一部分。

    也就是说,想要“默认”启用 MSAA 4x 的示例通常只是这样做:

    bool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings,
        void* pUserContext )
    {
        static bool s_bFirstTime = true;
        if( s_bFirstTime )
        {
            // Enable 4xMSAA by default
            DXGI_SAMPLE_DESC MSAA4xSampleDesc = { 4, 0 };
            pDeviceSettings->d3d11.sd.SampleDesc = MSAA4xSampleDesc;
        }
    
        return true;
    } 
    

    【讨论】:

    • 我想我说过我已经知道如何在其中塞入 4,我只是不知道如何在回调中找出设备实际支持的内容(我的是 8)。
    • IsD3D11DeviceAcceptable 回调中,您将获得CD3D11EnumAdapterInfo,您可以查看上面的列表。如果设备不支持 8x,您可以拒绝它,或者您可以记住 ModifyDeviceSettings 回调的事实。
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2014-11-28
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多