c++ - ID3D10Device::RSSetState 每帧调用?

标签 c++ direct3d direct3d10

我正在尝试使用 direct3D10 创建一个 ID3D10RasterizerState,然后调用

ID3D10Device::RSSetState()

使用正确的信息。但是,无论何时重新缩放窗口,或者当应用程序进入全屏时,光栅化器状态似乎都重置为默认状态。 我尝试使用 WM_SIZE 消息设置状态,但很尴尬,似乎什么也没有发生...

当我每帧调用 RSSetState() 时它工作正常,但这似乎非常低效。

有人知道解决这个问题的方法吗? 它似乎在 msdn 上记录得很差。

代码:

bool TestGameApp::InitGame()
{
    D3D10_RASTERIZER_DESC desc;
    desc.AntialiasedLineEnable = TRUE;
    desc.CullMode = D3D10_CULL_NONE;
    desc.DepthBias = 0;
    desc.DepthBiasClamp = 0.0f;
    desc.FillMode = D3D10_FILL_SOLID;
    desc.FrontCounterClockwise = false;
    desc.MultisampleEnable = true;
    desc.ScissorEnable = FALSE;
    desc.SlopeScaledDepthBias = 0.0f;

    m_pD3DDevice->CreateRasterizerState(&desc,m_pRSState);
    m_pD3DDevice->RSSetState(m_pRSState);

    //...more code
}

WndProc:

switch( message )
{
    case WM_SIZE:
    {
        m_pD3DDevice->RSSetState(m_pRSState);
        break;
    }
}

最佳答案

只需在每一帧设置它。通常,您希望尽量减少帧中渲染状态更改的次数,但您无需担心每帧设置一次光栅化器状态对性能的影响。每帧设置它还可以让您执行启用和禁用线框渲染以进行调试等操作。

关于c++ - ID3D10Device::RSSetState 每帧调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8068023/

相关文章:

c++ - 在 D3D10 中的着色器常量缓冲区中设置纹理

c++ - 用于投影的 D3DX vector 数学函数?

c++ - 在 C++ 编译期间检查数字是否为质数

c++ - C++从文件中读取整数

c++ - Directx11 - DeviceContext::ClearRenderTargetView 崩溃

graphics - DXGI_FORMAT 的确切颜色空间是什么?

c++ - 创建 DirectX 10 设备和交换链的问题

c++ - 如何在模板中定义迭代器?

c++ - 有效地计算阶乘

c++ - 使用八叉树算法进行网格渲染