Strange shader behavior due to..

Started by
0 comments, last by Dave Hunt 17 years, 1 month ago
Hey, I've experienced some strange shader behavior due to placement of SetMatrix in my code. I was hoping someone could explain to me why this was. When my render code was like this:

for each object obj..
	..
	matWorldViewProj = m_worldMatrix * m_viewMatrix * m_projMatrix;

	m_pRenderEffect->SetTechnique( m_pTechnique );
	UINT nPasses;
	m_pRenderEffect->Begin( &nPasses, 0 );
	for( UINT i = 0; i < nPasses; i++ )
	{
		m_pRenderEffect->BeginPass( i );

		m_pRenderEffect->SetMatrix( "matWorldViewProj", &matWorldViewProj );
		render( obj );

		m_pRenderEffect->EndPass( );
	}
	m_pRenderEffect->End( );
	..

It freaked out, i was unable to control the camera but instead was able to move objects around in a strange way by trying to move the camera However, when my render code was like this:

for each object obj..
	..
	matWorldViewProj = m_worldMatrix * m_viewMatrix * m_projMatrix;

	m_pRenderEffect->SetTechnique( m_pTechnique );
	m_pRenderEffect->SetMatrix( "matWorldViewProj", &matWorldViewProj );
	UINT nPasses;
	m_pRenderEffect->Begin( &nPasses, 0 );
	for( UINT i = 0; i < nPasses; i++ )
	{
		m_pRenderEffect->BeginPass( i );

		render( obj );

		m_pRenderEffect->EndPass( );
	}
	m_pRenderEffect->End( );
	..

Everything worked fine, the camera moved correctly and objects behaved as they should. Why is there a difference where i put

m_pRenderEffect->SetMatrix( "matWorldViewProj", &matWorldViewProj );
?
Advertisement
If you change any effect states via ID3DXEffect::Setx functions (e.g. SetMatrix) within a BeginPass/EndPass pair, you have to call ID3DXEffect::CommitChanges for those changes to take effect correctly.

This topic is closed to new replies.

Advertisement