Toate functiile save/restore eliminate
In loc de ele se foloseste
STATEMANAGER.PushState();
STATEMANAGER.Set...()
STATEMANAGER.PopState();
In felul acesta evitam problemele in caz ca salvam o setare dar nu o restauram pentru ca se face automat.
Exemplu:
Code:
//inainte
if (!vertices.empty() && SetPDTStream(vertices.data(), vertices.size()))
{
//start save
STATEMANAGER.SaveTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
STATEMANAGER.SaveTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
STATEMANAGER.SaveTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
STATEMANAGER.SaveTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
STATEMANAGER.SetTexture(0, nullptr);
STATEMANAGER.SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLEFAN, 0, iTriCount);
STATEMANAGER.RestoreTextureStageState(0, D3DTSS_COLORARG1);
STATEMANAGER.RestoreTextureStageState(0, D3DTSS_COLOROP);
STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ALPHAARG1);
STATEMANAGER.RestoreTextureStageState(0, D3DTSS_ALPHAOP);
//end restore
}
//dupa
if (!vertices.empty() && SetPDTStream(vertices.data(), vertices.size()))
{
//start save
STATEMANAGER.PushState(); // inainte de functiile save apeleaza asta,si in loc de save.. se foloseste set
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
STATEMANAGER.SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
STATEMANAGER.SetTexture(0, nullptr);
STATEMANAGER.SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLEFAN, 0, iTriCount);
STATEMANAGER.PopState(); //revenire la setarile initiale,nu mai faci restore manual pentru fiecare setare
//end restore
}
Codul este usor de adaptat!


la acest mesaj și conținutul se va afișa automat.
