Exemplo n.º 1
0
void nMeshGroup::RenderShaderSkinning(int meshGroupIdx, U2BonePalette& bonePalette)
{
	
	static const int maxBonePaletteSize = 72;
	static D3DXMATRIX boneMatArray[maxBonePaletteSize];

	int paletteSize = bonePalette.GetNumJoints();
	U2ASSERT(paletteSize <= maxBonePaletteSize);

	int paletteIdx;
	for(paletteIdx = 0; paletteIdx < paletteSize; ++paletteIdx)
	{
		const U2Bone& bone = m_pSkinMod->GetSkeleton()->GetJoint(
			bonePalette.GetJointIdx(paletteIdx));
		boneMatArray[paletteIdx] = bone.GetSKinMat44();
	}

	U2SceneMgr *pSceneMgr = U2SceneMgr::Instance();
	U2ASSERT(pSceneMgr);
	U2Dx9Renderer *pRenderer = U2Dx9Renderer::GetRenderer();
	U2ASSERT(pRenderer);

	U2D3DXEffectShader *pCurrShader = pRenderer->GetCurrEffectShader();
	U2ASSERT(pCurrShader);
	if(pCurrShader->IsParamUsed(U2FxShaderState::JointPalette))
	{
		pCurrShader->SetMatrixArray(U2FxShaderState::JointPalette, boneMatArray, paletteSize);
	}

	pRenderer->SetVertexRange(GetFirstVertex(), GetNumVertices());
	pRenderer->SetIndexRange(GetFirstIndex(), GetNumIndices());
	pRenderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST);
}
Exemplo n.º 2
0
bool nMeshGroup::Render(U2SceneMgr* pSceneMgr, U2RenderContext* pCxt)
{
	IsRendererOK2;

	if(m_pSkinMod)
		pCxt->pUserData = m_pSkinMod;
	
	for(unsigned int i=0; i < GetNumControllers(); ++i)
	{		
		GetController(i)->Update(0.f, pCxt);
	}


	if(m_pSkinMod)		
	{
		


		// Set D3D VB /IB
		//for(uint32 i=0; i < GetEffectCnt(); ++i)
		//{
		//	U2Dx9FxShaderEffect* pEffect = 
		//		DynamicCast<U2Dx9FxShaderEffect>(GetEffect(i));
		//	if(pEffect)
		//	{
		//		pRenderer->SetupMesh(GetMesh());
		//	}
		//}		
		
		int numFragments = m_pSkinMod->GetNumFragments();
		int fragIdx;

		
		for(fragIdx = 0; fragIdx < numFragments; ++fragIdx)
		{
			U2SkinModifier::Fragment& fragment = 
				*m_pSkinMod->GetFragment(fragIdx);
			RenderShaderSkinning(fragment.GetMeshGroupIdx(), fragment.GetBonePalette());			
		}
	}
	else 
	{
		//// Set D3D VB /IB
		//for(uint32 i=0; i < GetEffectCnt(); ++i)
		//{
		//	U2Dx9FxShaderEffect* pEffect = 
		//		DynamicCast<U2Dx9FxShaderEffect>(GetEffect(i));
		//	if(pEffect)
		//	{
		//		pRenderer->SetupMesh(GetMesh());
		//	}
		//}

		pRenderer->SetVertexRange(GetFirstVertex(), GetNumVertices());
		pRenderer->SetIndexRange(GetFirstIndex(), GetNumIndices());
		pRenderer->DrawIndexedPrimitive(m_spModelData->GetPrimitiveType());
	}

	return true;
}
Exemplo n.º 3
0
void tGeometry::Draw(int prog)
{
	// the default is just to draw all according to the indices
	glDrawElements(GL_TRIANGLES, GetNumIndices(), GL_UNSIGNED_BYTE, (GLvoid*)0);
}