本文整理汇总了C++中AssetPtr::Get方法的典型用法代码示例。如果您正苦于以下问题:C++ AssetPtr::Get方法的具体用法?C++ AssetPtr::Get怎么用?C++ AssetPtr::Get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AssetPtr
的用法示例。
在下文中一共展示了AssetPtr::Get方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: IAssetTransfer_Asset
static duk_ret_t IAssetTransfer_Asset(duk_context* ctx)
{
IAssetTransfer* thisObj = GetThisWeakObject<IAssetTransfer>(ctx);
AssetPtr ret = thisObj->Asset();
PushWeakObject(ctx, ret.Get());
return 1;
}
示例2: IAsset_Clone_String
static duk_ret_t IAsset_Clone_String(duk_context* ctx)
{
IAsset* thisObj = GetThisWeakObject<IAsset>(ctx);
String newAssetName = duk_require_string(ctx, 0);
AssetPtr ret = thisObj->Clone(newAssetName);
PushWeakObject(ctx, ret.Get());
return 1;
}
示例3: TryFinishLoad
/// Test whether an object load request has completed, getting the result object if so.
///
/// Note that after a load request has completed (this function returns true), the request ID should no longer be
/// considered valid.
///
/// @param[in] id Load request ID.
/// @param[out] rspObject Smart pointer set to the loaded object if loading has completed. Note that this will be
/// set to the object instance even if the object isn't finished loading (i.e. still being
/// linked, etc.).
///
/// @return True if the load request has completed, false if it is still being processed.
///
/// @see FinishLoad(), BeginLoadObject()
bool AssetLoader::TryFinishLoad( size_t id, AssetPtr& rspObject )
{
HELIUM_ASSERT( IsValid( id ) );
// Retrieve the load request and test whether it has completed.
LoadRequest* pRequest = m_loadRequestPool.GetObject( id );
HELIUM_ASSERT( pRequest );
if( ( pRequest->stateFlags & LOAD_FLAG_FULLY_LOADED ) != LOAD_FLAG_FULLY_LOADED )
{
return false;
}
HELIUM_TRACE(
TraceLevels::Debug,
"AssetLoader::TryFinishLoad - Completed load for asset %s\n",
*pRequest->path.ToString());
HELIUM_ASSERT( !pRequest->spObject.Get() || pRequest->spObject->IsFullyLoaded() || ( pRequest->spObject->GetFlags() & Asset::FLAG_BROKEN ) );
rspObject = pRequest->spObject;
// Acquire an exclusive lock to the request entry.
AssetPath objectPath = pRequest->path;
ConcurrentHashMap< AssetPath, LoadRequest* >::Accessor requestAccessor;
HELIUM_VERIFY( m_loadRequestMap.Find( requestAccessor, objectPath ) );
HELIUM_ASSERT( requestAccessor->Second() == pRequest );
// Decrement the reference count on the load request, releasing it if the reference count reaches zero.
int32_t newRequestCount = AtomicDecrementRelease( pRequest->requestCount );
if( newRequestCount == 0 )
{
pRequest->spObject.Release();
pRequest->resolver.Clear();
m_loadRequestMap.Remove( requestAccessor );
m_loadRequestPool.Release( pRequest );
}
requestAccessor.Release();
#if HELIUM_TOOLS
if (rspObject)
{
if ( !(rspObject->SetFlags(Asset::FLAG_LOAD_EVENT_FIRED) & Asset::FLAG_LOAD_EVENT_FIRED) )
{
AssetTracker::GetStaticInstance()->NotifyAssetLoaded( rspObject.Get() );
}
}
#endif
return true;
}
示例4: OnSignal
void OnSignal(AssetPtr param0)
{
duk_context* ctx = ctx_;
duk_push_global_object(ctx);
duk_get_prop_string(ctx, -1, "_OnSignal");
duk_remove(ctx, -2);
duk_push_number(ctx, (size_t)key_);
duk_push_array(ctx);
PushWeakObject(ctx, param0.Get());
duk_put_prop_index(ctx, -2, 0);
bool success = duk_pcall(ctx, 2) == 0;
if (!success) LogError("[JavaScript] OnSignal: " + GetErrorString(ctx));
duk_pop(ctx);
}
示例5: TXT
TEST(Engine, PackageObjectTest)
{
{
AssetPath testPath;
HELIUM_VERIFY( testPath.Set( HELIUM_PACKAGE_PATH_CHAR_STRING TXT( "EngineTest" ) HELIUM_OBJECT_PATH_CHAR_STRING TXT( "TestObject" ) ) );
AssetPtr spObject;
HELIUM_VERIFY( gAssetLoader->LoadObject( testPath, spObject ) );
HELIUM_ASSERT( spObject );
Package* pTestPackageCast = Reflect::SafeCast< Package >( spObject.Get() );
HELIUM_ASSERT( !pTestPackageCast );
HELIUM_UNREF( pTestPackageCast );
// The following line should not compile...
// Animation* pTestAnimationCast = Reflect::SafeCast< Animation >( pTestPackageCast );
// HELIUM_UNREF( pTestAnimationCast );
Asset* pTestObjectCast = Reflect::SafeCast< Asset >( spObject.Get() );
HELIUM_ASSERT( pTestObjectCast );
HELIUM_UNREF( pTestObjectCast );
}
}
示例6: OnAssetCreated
void AssetRefListener::OnAssetCreated(AssetPtr assetData)
{
if (assetData.Get() && !currentWaitingRef.Empty() && currentWaitingRef == assetData->Name())
{
/// @todo Remove this logic once a EC_Material + EC_Mesh behaves correctly without failed requests, see generated:// logic in HandleAssetRefChange.
/** Log the same message as before for non generated:// refs. This is good to do
because AssetAPI has now said the request failed, so user might be confused when it still works. */
if (!currentWaitingRef.ToLower().StartsWith("generated://"))
LogInfo("AssetRefListener: Asset \"" + assetData->Name() + "\" was created, applying after it loads.");
// The asset we are waiting for has been created, hook to the IAsset::Loaded signal.
currentWaitingRef = "";
asset = assetData;
assetData->Loaded.Connect(this, &AssetRefListener::OnAssetLoaded);
if (myAssetAPI)
myAssetAPI->AssetCreated.Disconnect(this, &AssetRefListener::OnAssetCreated);
}
}
示例7: OnCollisionMeshAssetLoaded
void RigidBody::OnCollisionMeshAssetLoaded(AssetPtr asset)
{
IMeshAsset* meshAsset = dynamic_cast<IMeshAsset*>(asset.Get());
if (!meshAsset)
LogError("RigidBody::OnCollisionMeshAssetLoaded: Mesh asset load finished for asset \"" +
asset->Name() + "\", but asset pointer was null!");
if (shapeType.Get() == TriMesh)
{
impl->triangleMesh = impl->owner->GetTriangleMeshFromMeshAsset(meshAsset);
CreateCollisionShape();
}
else if (shapeType.Get() == ConvexHull)
{
impl->convexHullSet = impl->owner->GetConvexHullSetFromMeshAsset(meshAsset);
CreateCollisionShape();
}
impl->cachedShapeType = shapeType.Get();
impl->cachedSize = size.Get();
}
示例8: OnMaterialAssetLoaded
void Sky::OnMaterialAssetLoaded(AssetPtr asset)
{
IMaterialAsset* mAsset = dynamic_cast<IMaterialAsset*>(asset.Get());
if (mAsset)
{
material_.Reset();
material_ = Urho3D::DynamicCast<IMaterialAsset>(asset);
if (mAsset->textures_.Size() >= 6)
{
AssetReferenceList list;
for (int i=0 ; i<6 ; ++i)
list.Append(mAsset->textures_[i].second_);
textureRefs.Set(list, AttributeChange::LocalOnly);
// Update call is implicit via OnTextureAssetLoaded()
}
else
Update();
}
}
示例9: HandleAssetRefChange
void AssetRefListener::HandleAssetRefChange(AssetAPI *assetApi, String assetRef, const String& assetType)
{
// Disconnect from any previous transfer we might be listening to
if (!currentTransfer.Expired())
{
IAssetTransfer* current = currentTransfer.Get();
current->Succeeded.Disconnect(this, &AssetRefListener::OnTransferSucceeded);
current->Failed.Disconnect(this, &AssetRefListener::OnTransferFailed);
currentTransfer.Reset();
}
assert(assetApi);
// Store AssetAPI ptr for later signal hooking.
if (!myAssetAPI)
myAssetAPI = assetApi;
// If the ref is empty, don't go any further as it will just trigger the LogWarning below.
assetRef = assetRef.Trimmed();
if (assetRef.Empty())
{
asset = AssetPtr();
return;
}
currentWaitingRef = "";
// Resolve the protocol for generated:// assets. These assets are never meant to be
// requested from AssetAPI, they cannot be fetched from anywhere. They can only be either
// loaded or we must wait for something to load/create them.
String protocolPart = "";
assetApi->ParseAssetRef(assetRef, &protocolPart);
if (protocolPart.ToLower() == "generated")
{
AssetPtr loadedAsset = assetApi->FindAsset(assetRef);
if (loadedAsset.Get() && loadedAsset->IsLoaded())
{
// Asset is loaded, emit Loaded with 1 msec delay to preserve the logic
// that HandleAssetRefChange won't emit anything itself as before.
// Otherwise existing connection can break/be too late after calling this function.
asset = loadedAsset;
assetApi->GetFramework()->Frame()->DelayedExecute(0.0f).Connect(this, &AssetRefListener::EmitLoaded);
return;
}
else
{
// Wait for it to be created.
currentWaitingRef = assetRef;
myAssetAPI->AssetCreated.Connect(this, &AssetRefListener::OnAssetCreated);
}
}
else
{
// This is not a generated asset, request normally from asset api.
AssetTransferPtr transfer = assetApi->RequestAsset(assetRef, assetType);
if (!transfer)
{
LogWarning("AssetRefListener::HandleAssetRefChange: Asset request for asset \"" + assetRef + "\" failed.");
return;
}
currentWaitingRef = assetRef;
transfer->Succeeded.Connect(this, &AssetRefListener::OnTransferSucceeded);
transfer->Failed.Connect(this, &AssetRefListener::OnTransferFailed);
currentTransfer = transfer;
}
// Disconnect from the old asset's load signal
if (asset)
asset->Loaded.Disconnect(this, &AssetRefListener::OnAssetLoaded);
asset = AssetPtr();
}
示例10: EmitLoaded
void AssetRefListener::EmitLoaded(float /*time*/)
{
AssetPtr currentAsset = asset.Lock();
if (currentAsset.Get())
Loaded.Emit(currentAsset);
}
示例11: _tWinMain
int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpCmdLine*/, int nCmdShow )
{
ForceLoadComponentsDll();
#if HELIUM_TOOLS
ForceLoadEditorSupportDll();
#endif
HELIUM_TRACE_SET_LEVEL( TraceLevels::Debug );
Timer::StaticInitialize();
#if !HELIUM_RELEASE && !HELIUM_PROFILE
Helium::InitializeSymbols();
#endif
AsyncLoader::GetStaticInstance().Initialize();
FilePath baseDirectory;
if ( !FileLocations::GetBaseDirectory( baseDirectory ) )
{
HELIUM_TRACE( TraceLevels::Error, TXT( "Could not get base directory." ) );
return -1;
}
HELIUM_VERIFY( CacheManager::InitializeStaticInstance( baseDirectory ) );
Helium::Bullet::Initialize();
int resultCode = -1;
{
Reflect::Initialize();
Helium::Components::Initialize();
Helium::TaskScheduler::CalculateSchedule();
#if HELIUM_TOOLS
#endif
InitEngineJobsDefaultHeap();
InitGraphicsJobsDefaultHeap();
InitTestJobsDefaultHeap();
#if HELIUM_TOOLS
//HELIUM_VERIFY( LooseAssetLoader::InitializeStaticInstance() );
HELIUM_VERIFY( LooseAssetLoader::InitializeStaticInstance() );
AssetPreprocessor* pAssetPreprocessor = AssetPreprocessor::CreateStaticInstance();
HELIUM_ASSERT( pAssetPreprocessor );
PlatformPreprocessor* pPlatformPreprocessor = new PcPreprocessor;
HELIUM_ASSERT( pPlatformPreprocessor );
pAssetPreprocessor->SetPlatformPreprocessor( Cache::PLATFORM_PC, pPlatformPreprocessor );
#else
HELIUM_VERIFY( CacheAssetLoader::InitializeStaticInstance() );
#endif
#if !GTEST
AssetLoader* gAssetLoader = NULL;
#endif
gAssetLoader = AssetLoader::GetStaticInstance();
HELIUM_ASSERT( gAssetLoader );
Config& rConfig = Config::GetStaticInstance();
rConfig.BeginLoad();
while( !rConfig.TryFinishLoad() )
{
gAssetLoader->Tick();
}
#if HELIUM_TOOLS
ConfigPc::SaveUserConfig();
#endif
uint32_t displayWidth;
uint32_t displayHeight;
//bool bFullscreen;
bool bVsync;
{
StrongPtr< GraphicsConfig > spGraphicsConfig(
rConfig.GetConfigObject< GraphicsConfig >( Name( TXT( "GraphicsConfig" ) ) ) );
HELIUM_ASSERT( spGraphicsConfig );
displayWidth = spGraphicsConfig->GetWidth();
displayHeight = spGraphicsConfig->GetHeight();
//bFullscreen = spGraphicsConfig->GetFullscreen();
bVsync = spGraphicsConfig->GetVsync();
}
WNDCLASSEXW windowClass;
windowClass.cbSize = sizeof( windowClass );
windowClass.style = 0;
windowClass.lpfnWndProc = WindowProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = hInstance;
windowClass.hIcon = NULL;
windowClass.hCursor = NULL;
windowClass.hbrBackground = NULL;
//.........这里部分代码省略.........
示例12: Initialize
/// Initialize all resources provided by this manager.
///
/// @see Cleanup(), PostConfigUpdate()
bool RenderResourceManager::Initialize()
{
// Release any existing resources.
Cleanup();
// Get the renderer and graphics configuration.
Renderer* pRenderer = Renderer::GetInstance();
if ( !pRenderer )
{
return false;
}
Config* pConfig = Config::GetInstance();
if ( !HELIUM_VERIFY( pConfig ) )
{
return false;
}
StrongPtr< GraphicsConfig > spGraphicsConfig( pConfig->GetConfigObject< GraphicsConfig >( Name( "GraphicsConfig" ) ) );
if ( !spGraphicsConfig )
{
HELIUM_TRACE( TraceLevels::Error, "RenderResourceManager::Initialize(): Initialization failed; missing GraphicsConfig.\n" );
return false;
}
// Create the standard rasterizer states.
RRasterizerState::Description rasterizerStateDesc;
rasterizerStateDesc.fillMode = RENDERER_FILL_MODE_SOLID;
rasterizerStateDesc.cullMode = RENDERER_CULL_MODE_BACK;
rasterizerStateDesc.winding = RENDERER_WINDING_CLOCKWISE;
rasterizerStateDesc.depthBias = 0;
rasterizerStateDesc.slopeScaledDepthBias = 0.0f;
m_rasterizerStates[RASTERIZER_STATE_DEFAULT] = pRenderer->CreateRasterizerState( rasterizerStateDesc );
HELIUM_ASSERT( m_rasterizerStates[RASTERIZER_STATE_DEFAULT] );
rasterizerStateDesc.cullMode = RENDERER_CULL_MODE_NONE;
m_rasterizerStates[RASTERIZER_STATE_DOUBLE_SIDED] = pRenderer->CreateRasterizerState( rasterizerStateDesc );
HELIUM_ASSERT( m_rasterizerStates[RASTERIZER_STATE_DOUBLE_SIDED] );
rasterizerStateDesc.depthBias = 1;
rasterizerStateDesc.slopeScaledDepthBias = 2.0f;
m_rasterizerStates[RASTERIZER_STATE_SHADOW_DEPTH] = pRenderer->CreateRasterizerState( rasterizerStateDesc );
HELIUM_ASSERT( m_rasterizerStates[RASTERIZER_STATE_SHADOW_DEPTH] );
rasterizerStateDesc.depthBias = 0;
rasterizerStateDesc.slopeScaledDepthBias = 0.0f;
rasterizerStateDesc.fillMode = RENDERER_FILL_MODE_WIREFRAME;
m_rasterizerStates[RASTERIZER_STATE_WIREFRAME_DOUBLE_SIDED] = pRenderer->CreateRasterizerState(
rasterizerStateDesc );
HELIUM_ASSERT( m_rasterizerStates[RASTERIZER_STATE_WIREFRAME_DOUBLE_SIDED] );
rasterizerStateDesc.cullMode = RENDERER_CULL_MODE_BACK;
m_rasterizerStates[RASTERIZER_STATE_WIREFRAME] = pRenderer->CreateRasterizerState( rasterizerStateDesc );
HELIUM_ASSERT( m_rasterizerStates[RASTERIZER_STATE_WIREFRAME] );
// Create the standard blend states.
RBlendState::Description blendStateDesc;
blendStateDesc.bBlendEnable = false;
m_blendStates[BLEND_STATE_OPAQUE] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_OPAQUE] );
blendStateDesc.colorWriteMask = 0;
m_blendStates[BLEND_STATE_NO_COLOR] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_NO_COLOR] );
blendStateDesc.colorWriteMask = RENDERER_COLOR_WRITE_MASK_FLAG_ALL;
blendStateDesc.bBlendEnable = true;
blendStateDesc.sourceFactor = RENDERER_BLEND_FACTOR_SRC_ALPHA;
blendStateDesc.destinationFactor = RENDERER_BLEND_FACTOR_INV_SRC_ALPHA;
blendStateDesc.function = RENDERER_BLEND_FUNCTION_ADD;
m_blendStates[BLEND_STATE_TRANSPARENT] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_TRANSPARENT] );
blendStateDesc.sourceFactor = RENDERER_BLEND_FACTOR_ONE;
blendStateDesc.destinationFactor = RENDERER_BLEND_FACTOR_ONE;
m_blendStates[BLEND_STATE_ADDITIVE] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_ADDITIVE] );
blendStateDesc.function = RENDERER_BLEND_FUNCTION_REVERSE_SUBTRACT;
m_blendStates[BLEND_STATE_SUBTRACTIVE] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_SUBTRACTIVE] );
blendStateDesc.sourceFactor = RENDERER_BLEND_FACTOR_DEST_COLOR;
blendStateDesc.destinationFactor = RENDERER_BLEND_FACTOR_ZERO;
blendStateDesc.function = RENDERER_BLEND_FUNCTION_ADD;
m_blendStates[BLEND_STATE_MODULATE] = pRenderer->CreateBlendState( blendStateDesc );
HELIUM_ASSERT( m_blendStates[BLEND_STATE_MODULATE] );
// Create the standard depth/stencil states.
RDepthStencilState::Description depthStateDesc;
depthStateDesc.stencilWriteMask = 0;
depthStateDesc.bStencilTestEnable = false;
//.........这里部分代码省略.........
示例13: Rename
/// Modify the name, owner, or instance index of this object.
///
/// @param[in] rParameters Object rename parameters.
///
/// @return True if this object was renamed successfully, false if not.
///
/// @see GetName(), GetOwner(), GetInstanceIndex()
bool Asset::Rename( const RenameParameters& rParameters )
{
Name name = rParameters.name;
Asset* pOwner = rParameters.spOwner;
uint32_t instanceIndex = rParameters.instanceIndex;
HELIUM_TRACE(
TraceLevels::Debug,
TXT("Asset::Rename(): Renaming object \"%s\" to \"%s\" (Old Owner: \"%s\". New Owner: \"%s\".)\n"),
*m_name,
*rParameters.name,
m_spOwner.ReferencesObject() ? *m_spOwner->GetPath().ToString() : TXT("[none]"),
rParameters.spOwner.ReferencesObject() ? *rParameters.spOwner->GetPath().ToString() : TXT("[none]"));
// Only allow setting an empty name if no owner or instance index are given and this object has no children.
if( name.IsEmpty() )
{
HELIUM_ASSERT( !pOwner );
HELIUM_ASSERT( IsInvalid( instanceIndex ) );
if( pOwner || IsValid( instanceIndex ) )
{
HELIUM_TRACE(
TraceLevels::Error,
( TXT( "Asset::Rename(): Objects cannot have name information cleared if being assigned an " )
TXT( "owner or instance index.\n" ) ) );
return false;
}
HELIUM_ASSERT( !m_wpFirstChild );
if( m_wpFirstChild )
{
HELIUM_TRACE(
TraceLevels::Error,
TXT( "Asset::Rename(): Cannot clear name information for objects with children.\n" ) );
return false;
}
}
// Don't allow setting the owner to ourself.
if( pOwner == this )
{
HELIUM_TRACE( TraceLevels::Error, TXT( "Asset::Rename(): Cannot set the owner of an object to itself.\n" ) );
return false;
}
// Don't allow setting the owner to an object with no name information.
if( pOwner && pOwner->m_name.IsEmpty() )
{
HELIUM_TRACE(
TraceLevels::Error,
TXT( "Asset::Rename(): Cannot set the owner of an object to an object with no path information.\n" ) );
return false;
}
if( IsPackage() )
{
// Don't allow package objects to be children of non-package objects.
if( pOwner && !pOwner->IsPackage() )
{
HELIUM_TRACE(
TraceLevels::Error,
TXT( "Asset::Rename(): Cannot set a non-package as the owner of a package.\n" ) );
return false;
}
// Don't allow instance indexing for packages.
if( IsValid( instanceIndex ) )
{
HELIUM_TRACE(
TraceLevels::Error,
TXT( "Asset::Rename(): Instance indexing not supported for packages.\n" ) );
return false;
}
}
// Don't need to do anything if the name, owner, and instance index are not changing.
if( name == m_name &&
pOwner == m_spOwner &&
( instanceIndex == m_instanceIndex || ( instanceIndex == INSTANCE_INDEX_AUTO && IsValid( m_instanceIndex ) ) ) )
{
return true;
}
// Hold onto a reference to the current owner until we return from this function. This is done in case this object
// has the last strong reference to it, in which case we would encounter a deadlock if clearing its reference while
// we still have a write lock on the object list (object destruction also requires acquiring a write lock).
AssetPtr spOldOwner = m_spOwner;
//.........这里部分代码省略.........