本文整理汇总了C++中ConstantBuffer::SetValue方法的典型用法代码示例。如果您正苦于以下问题:C++ ConstantBuffer::SetValue方法的具体用法?C++ ConstantBuffer::SetValue怎么用?C++ ConstantBuffer::SetValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ConstantBuffer
的用法示例。
在下文中一共展示了ConstantBuffer::SetValue方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ShadowLightRenderGameObject
AEResult GameLightsUpdate::ShadowLightRenderGameObject(GameObject* gameObject, const glm::mat4& lightView, const glm::mat4& lightProj)
{
AEAssert(gameObject != nullptr);
if (gameObject == nullptr)
{
return AEResult::NullParameter;
}
if (gameObject->HasMeshGOC() && gameObject->HasMaterialGOCs())
{
Mesh* mesh = gameObject->GetMeshGOC()->GetMeshResource();
if (mesh != nullptr)
{
ConstantBuffer* cb = nullptr;
Material* mat = nullptr;
bool hasAnimation = gameObject->HasMeshAnimationGOC();
if (hasAnimation)
{
mat = m_VarianceSkinningShadowMaterial;
ShaderProperties* vsProps = m_VarianceSkinningShadowMaterial->GetVSProps();
cb = vsProps->GetConstantBuffer(AE_CB_WORLD_VIEW_PROJ_NAME);
ConstantBuffer* cbBones = vsProps->GetConstantBuffer(AE_CB_BONES_NAME);
if (cbBones != nullptr)
{
AnimationPlayer* player = gameObject->GetMeshAnimationGOC()->GetAnimationPlayer();
cbBones->SetValue(AE_CB_BONE_TRANSFORMS_VAR_NAME, player->GetBoneTransforms(), sizeof(glm::mat4) * AE_MAX_BONES);
}
}
else
{
mat = m_VarianceShadowMaterial;
ShaderProperties* vsProps = m_VarianceShadowMaterial->GetVSProps();
cb = vsProps->GetConstantBuffer(AE_CB_WORLD_VIEW_PROJ_NAME);
}
cb->SetValueT<glm::mat4>(AE_CB_WORLD_VAR_NAME, gameObject->GetWorldTransform());
cb->SetValueT<glm::mat4>(AE_CB_VIEW_VAR_NAME, lightView);
cb->SetValueT<glm::mat4>(AE_CB_PROJECTION_VAR_NAME, lightProj);
AETODO("check return");
mat->Apply();
for (uint32_t i = 0; i < mesh->GetNumberMeshParts(); i++)
{
MeshPart* meshPart = mesh->GetMeshPart(i);
m_GraphicDevice->SetVertexBuffer(meshPart->GetVertexBuffer());
m_GraphicDevice->SetIndexBuffer(meshPart->GetIndexBuffer());
m_GraphicDevice->SetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_GraphicDevice->DrawIndexed(0, 0, meshPart->GetIndexBuffer()->GetSize());
}
AETODO("check return");
mat->UnApply();
}
}
for (auto goIt : *gameObject)
{
ShadowLightRenderGameObject(goIt.second, lightView, lightProj);
}
return AEResult::Ok;
}