在directX中,是否可以保存Texture After效果的EndPass函数?

问题描述

for (auto iter = m_listMaterial.begin(); iter != m_listMaterial.end();++iter)
{
    Material* pMat = (*iter);

    pMat->GetBuffer()->Ready_Component();

    _uint numPass;
    //if effect is different Changing Effect
    if (pEffect != pMat->GetShader()->GetEffect())
    {
        if (pEffect)
        {
            for (int i = 0; i < 10; ++i)
            {
                m_pTextures[i] = nullptr;
            }
            pEffect->EndPass();
            pEffect->End();
        }

        pEffect = pMat->GetShader()->GetEffect();
        pEffect->Begin(&numPass,D3DXFX_DONOTSAVESTATE);
        pEffect->BeginPass(0);
    }

    vector<Texture*> vecTex = pMat->GetTextures();

    for (_uint i = 0;i < vecTex.size(); ++i)
    {
        
        // if texture is different changing texture
        if (vecTex[i]->GetTexture() != m_pTextures[i])
        {
            pDev->SetTexture(i,vecTex[i]->GetTexture());
            m_pTextures[i] = vecTex[i]->GetTexture();
        }

    }

    pMat->RenderSettingFunc();
    pEffect->CommitChanges();

    pMat->GetBuffer()->RenderBuffer();
    
}
pEffect->EndPass();
pEffect->End();

我在DirectX9中制作了批处理系统

因为我只想调用SetTexture()函数一次

但是我发现在调用Effect的EndPass()函数后,gpu中的纹理信息消失了

那么,如何保存纹理信息?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)