void VBlobShadowShader::UpdateShadow(const VBlobShadow *pShadow)
{
  if (m_iShadowTexSampler>=0)
  {
    VStateGroupTexture *pStateGroupTexture = GetStateGroupTexture(VSS_PixelShader, m_iShadowTexSampler);
    if (pStateGroupTexture != NULL)
      pStateGroupTexture->m_spCustomTex = pShadow->GetShadowTexture();
  }

  // update the uv projection planes
  const float fSizeX = pShadow->m_ShadowBox.getSizeX();
  const float fSizeY = pShadow->m_ShadowBox.getSizeY();

  hkvPlane planeU; 
  planeU.m_vNormal = hkvVec3(1.f/fSizeX, 0, 0);  
  planeU.m_fNegDist = -planeU.m_vNormal.dot (pShadow->m_ShadowBox.m_vMin);

  hkvPlane planeV; 
  planeV.m_vNormal = hkvVec3(0, 1.f/fSizeY, 0);  
  planeV.m_fNegDist = -planeV.m_vNormal.dot (pShadow->m_ShadowBox.m_vMin);

  GetConstantBuffer(VSS_VertexShader)->SetSingleRegisterF(m_iRegPlaneU, &planeU.m_vNormal.x);
  GetConstantBuffer(VSS_VertexShader)->SetSingleRegisterF(m_iRegPlaneV, &planeV.m_vNormal.x);

  // shadow color
  GetConstantBuffer(VSS_PixelShader)->SetSingleRegisterF(m_iRegColor, pShadow->m_vBlendColor.data);

  m_bModified = true;
}
////////////////////////////////////////////////////////////////////////////////////////////////
// overridden function to extract the shader registers from the compiled version
void VBlobShadowShader::PostCompileFunction(VShaderEffectResource *pSourceFX,VShaderPassResource *pSourceShader)
{
  VCompiledShaderPass::PostCompileFunction(pSourceFX, pSourceShader);

  m_iRegPlaneU = GetConstantBuffer(VSS_VertexShader)->GetRegisterByName("TexRefPlaneU");
  m_iRegPlaneV = GetConstantBuffer(VSS_VertexShader)->GetRegisterByName("TexRefPlaneV");
  VASSERT(m_iRegPlaneU>=0 && m_iRegPlaneV>=0);

  m_iRegColor = GetConstantBuffer(VSS_PixelShader)->GetRegisterByName("ShadowColor");

  VASSERT(m_iRegColor>=0);

  m_iShadowTexSampler   = GetSamplerIndexByName(VSS_PixelShader, "ShadowTexture");
  m_iGradientTexSampler = GetSamplerIndexByName(VSS_PixelShader, "NormalGradient");
}
void CEffectPixelShader::SetConstantBuffer(unsigned int IdBuffer, void *ConstantBuffer)
{
	ID3D11DeviceContext *l_DeviceContext = UABEngine.GetRenderManager()->GetDeviceContext();
	ID3D11Buffer *l_ConstantBuffer = GetConstantBuffer(IdBuffer);
	l_DeviceContext->UpdateSubresource(l_ConstantBuffer, 0, NULL,
		ConstantBuffer, 0, 0);
	l_DeviceContext->PSSetConstantBuffers(IdBuffer, 1, &l_ConstantBuffer);
}
void CEffectGeometryShader::SetConstantBuffer(unsigned int IdBuffer, void
										   *ConstantBuffer)
{
	ID3D11DeviceContext *l_DeviceContext = CEngine::GetSingleton().getContextManager()->GetDeviceContext();
	ID3D11Buffer *l_ConstantBuffer = GetConstantBuffer(IdBuffer);
	if (l_ConstantBuffer)
	{
		l_DeviceContext->UpdateSubresource(l_ConstantBuffer, 0, NULL,
										   ConstantBuffer, 0, 0);
		l_DeviceContext->GSSetConstantBuffers(IdBuffer, 1, &l_ConstantBuffer);
	}
}