本文整理汇总了C++中reflect::ObjectPtr::Get方法的典型用法代码示例。如果您正苦于以下问题:C++ ObjectPtr::Get方法的具体用法?C++ ObjectPtr::Get怎么用?C++ ObjectPtr::Get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类reflect::ObjectPtr
的用法示例。
在下文中一共展示了ObjectPtr::Get方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CacheResource
/// @copydoc ResourceHandler::CacheResource()
bool MaterialResourceHandler::CacheResource(
AssetPreprocessor* pAssetPreprocessor,
Resource* pResource,
const String& /*rSourceFilePath*/ )
{
HELIUM_ASSERT( pAssetPreprocessor );
HELIUM_ASSERT( pResource );
Material* pMaterial = Reflect::AssertCast< Material >( pResource );
Shader* pShader = pMaterial->GetShader();
bool failedToWriteASubdata = false;
StrongPtr< Material::PersistentResourceData > resource_data( new Material::PersistentResourceData() );
// Compute the shader variant indices from the user options selected in the material, as the array of indices in
// the material is not yet initialized.
//uint32_t shaderVariantIndices[ RShader::TYPE_MAX ];
if( pShader )
{
const Shader::Options& rShaderUserOptions = pShader->GetUserOptions();
const DynamicArray< Shader::SelectPair >& rMaterialUserOptions = pMaterial->GetUserOptions();
for( size_t shaderTypeIndex = 0; shaderTypeIndex < RShader::TYPE_MAX; ++shaderTypeIndex )
{
size_t optionSetIndex = rShaderUserOptions.GetOptionSetIndex(
static_cast< RShader::EType >( shaderTypeIndex ),
rMaterialUserOptions.GetData(),
rMaterialUserOptions.GetSize() );
resource_data->m_shaderVariantIndices[ shaderTypeIndex ] = static_cast< uint32_t >( optionSetIndex );
}
}
else
{
MemoryZero( resource_data->m_shaderVariantIndices, sizeof( resource_data->m_shaderVariantIndices ) );
}
size_t float1ParameterCount = pMaterial->GetFloat1ParameterCount();
size_t float2ParameterCount = pMaterial->GetFloat2ParameterCount();
size_t float3ParameterCount = pMaterial->GetFloat3ParameterCount();
size_t float4ParameterCount = pMaterial->GetFloat4ParameterCount();
Name parameterConstantBufferName = Material::GetParameterConstantBufferName();
for( size_t platformIndex = 0; platformIndex < static_cast< size_t >( Cache::PLATFORM_MAX ); ++platformIndex )
{
PlatformPreprocessor* pPreprocessor = pAssetPreprocessor->GetPlatformPreprocessor(
static_cast< Cache::EPlatform >( platformIndex ) );
if( !pPreprocessor )
{
continue;
}
Resource::PreprocessedData& rPreprocessedData = pResource->GetPreprocessedData(
static_cast< Cache::EPlatform >( platformIndex ) );
SaveObjectToPersistentDataBuffer(resource_data.Get(), rPreprocessedData.persistentDataBuffer);
rPreprocessedData.bLoaded = true;
// Write out the parameter constant buffer data as the resource sub-data.
size_t shaderProfileCount = pPreprocessor->GetShaderProfileCount();
DynamicArray< DynamicArray< uint8_t > >& rSubDataBuffers = rPreprocessedData.subDataBuffers;
rSubDataBuffers.Clear();
rSubDataBuffers.Reserve( shaderProfileCount * RShader::TYPE_MAX );
rSubDataBuffers.Resize( shaderProfileCount * RShader::TYPE_MAX );
if( pShader )
{
// deserializer.SetByteSwapping( bSwapBytes );
for( size_t shaderTypeIndex = 0; shaderTypeIndex < RShader::TYPE_MAX; ++shaderTypeIndex )
{
RShader::EType shaderType = static_cast< RShader::EType >( shaderTypeIndex );
size_t variantLoadId = pShader->BeginLoadVariant(
shaderType,
resource_data->m_shaderVariantIndices[ shaderTypeIndex ] );
if( IsInvalid( variantLoadId ) )
{
continue;
}
ShaderVariantPtr spVariant;
while( !pShader->TryFinishLoadVariant( variantLoadId, spVariant ) )
{
}
ShaderVariant* pVariant = spVariant;
if( !pVariant )
{
continue;
}
const Resource::PreprocessedData& rVariantData = pVariant->GetPreprocessedData(
static_cast< Cache::EPlatform >( platformIndex ) );
HELIUM_ASSERT( rVariantData.bLoaded );
const DynamicArray< DynamicArray< uint8_t > >& rVariantSubDataBuffers = rVariantData.subDataBuffers;
size_t variantSubDataCount = rVariantSubDataBuffers.GetSize();
HELIUM_ASSERT( variantSubDataCount != 0 );
//.........这里部分代码省略.........