hlsl 쉐이더 매트릭스가 각각 적용되지 않는 문제
View 12,009 | 작성일2009.10.19 14:30
관련링크
본문
쉐이더 사용시 한 오브젝트당 여러가지 매트릭스를 공급해 줘야 하는 일이 생기는데
여러개의 오브젝트들을 사용할 시에 마지막 공급한 매트릭스 기준으로 모든 오브젝트들이 적용되는 문제가 있습니다.
원래 기본적으로 하나의 오브젝트당 쉐이더 코드를 일일이 적용시켜줘야 하는데 이런경우 쉐이더를 일일이 정해줘야 하기 때문에 속도가 너무 떨어집니다.
다이렉트X 최근 SDK 에서는 이러한 문제를 해결하기 위해서 쉐이더를 한번만 적용시키고 매트릭스를 각각 따로 줄 수 있도록 해결됐습니다.
m_pEffect->SetMatrix(m_hmWVP, m_mViewProj);
m_pEffect->SetMatrix(m_hmWorld, m_mWorld);
m_pEffect->SetMatrix(m_hmView, m_mView);
m_pEffect->SetMatrix(m_hmProj, m_mProj);
m_pEffect->SetFloat(m_hSelection, m_fSelection);
이게 한 세트라면
m_pEffect->CommitChanges();
Commitchages() 를 써줘야 합니다.
그리고 다음 세트를 공급해줄수 있는거죠
이것때문에 '악 왜 마지막꺼 밖에 적용이 안돼!!!' 이러면서 머리를 쥐어 뜯던 나날이 생각나는군요(먼산)