本文整理汇总了C++中IsInGameThread函数的典型用法代码示例。如果您正苦于以下问题:C++ IsInGameThread函数的具体用法?C++ IsInGameThread怎么用?C++ IsInGameThread使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsInGameThread函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: check
void FUObjectArray::AllocateUObjectIndex(UObjectBase* Object, bool bMergingThreads /*= false*/)
{
int32 Index = INDEX_NONE;
check(Object->InternalIndex == INDEX_NONE || bMergingThreads);
// Special non- garbage collectable range.
if (OpenForDisregardForGC && DisregardForGCEnabled())
{
// Disregard from GC pool is only available from the game thread, at least for now
check(IsInGameThread());
Index = ++ObjLastNonGCIndex;
// Check if we're not out of bounds, unless there hasn't been any gc objects yet
UE_CLOG(ObjLastNonGCIndex >= MaxObjectsNotConsideredByGC && ObjFirstGCIndex >= 0, LogUObjectArray, Fatal, TEXT("Unable to add more objects to disregard for GC pool (Max: %d)"), MaxObjectsNotConsideredByGC);
// If we haven't added any GC objects yet, it's fine to keep growing the disregard pool past its initial size.
if (ObjLastNonGCIndex >= MaxObjectsNotConsideredByGC)
{
Index = ObjObjects.AddSingle();
check(Index == ObjLastNonGCIndex);
}
MaxObjectsNotConsideredByGC = FMath::Max(MaxObjectsNotConsideredByGC, ObjLastNonGCIndex + 1);
}
// Regular pool/ range.
else
{
int32* AvailableIndex = ObjAvailableList.Pop();
if (AvailableIndex)
{
#if UE_GC_TRACK_OBJ_AVAILABLE
const int32 AvailableCount = ObjAvailableCount.Decrement();
checkSlow(AvailableCount >= 0);
#endif
Index = (int32)(uintptr_t)AvailableIndex;
check(ObjObjects[Index].Object==nullptr);
}
else
{
// Make sure ObjFirstGCIndex is valid, otherwise we didn't close the disregard for GC set
check(ObjFirstGCIndex >= 0);
#if THREADSAFE_UOBJECTS
FScopeLock ObjObjectsLock(&ObjObjectsCritical);
#else
check(IsInGameThread());
#endif
Index = ObjObjects.AddSingle();
}
check(Index >= ObjFirstGCIndex && Index > ObjLastNonGCIndex);
}
// Add to global table.
if (FPlatformAtomics::InterlockedCompareExchangePointer((void**)&ObjObjects[Index].Object, Object, NULL) != NULL) // we use an atomic operation to check for unexpected concurrency, verify alignment, etc
{
UE_LOG(LogUObjectArray, Fatal, TEXT("Unexpected concurency while adding new object"));
}
IndexToObject(Index)->ResetSerialNumberAndFlags();
Object->InternalIndex = Index;
// @todo: threading: lock UObjectCreateListeners
for (int32 ListenerIndex = 0; ListenerIndex < UObjectCreateListeners.Num(); ListenerIndex++)
{
UObjectCreateListeners[ListenerIndex]->NotifyUObjectCreated(Object,Index);
}
}
示例2: check
void FSlateTextureAtlas::InitAtlasData()
{
check(RootNode == nullptr && AtlasData.Num() == 0);
RootNode = new FAtlasedTextureSlot(0, 0, AtlasWidth, AtlasHeight, GetPaddingAmount());
AtlasData.Reserve(AtlasWidth * AtlasHeight * BytesPerPixel);
AtlasData.AddZeroed(AtlasWidth * AtlasHeight * BytesPerPixel);
check(IsInGameThread() || IsInRenderingThread());
AtlasOwnerThread = (IsInGameThread()) ? ESlateTextureAtlasOwnerThread::Game : ESlateTextureAtlasOwnerThread::Render;
INC_MEMORY_STAT_BY(STAT_SlateTextureAtlasMemory, AtlasData.GetAllocatedSize());
}
示例3: check
void FUObjectArray::AllocateUObjectIndex(UObjectBase* Object, bool bMergingThreads /*= false*/)
{
int32 Index = INDEX_NONE;
check(Object->InternalIndex == INDEX_NONE || bMergingThreads);
// Special non- garbage collectable range.
if (OpenForDisregardForGC && DisregardForGCEnabled())
{
// Disregard from GC pool is only available from the game thread, at least for now
check(IsInGameThread());
Index = ObjObjects.AddZeroed(1);
ObjLastNonGCIndex = Index;
ObjFirstGCIndex = FMath::Max(ObjFirstGCIndex, Index + 1);
}
// Regular pool/ range.
else
{
int32* AvailableIndex = ObjAvailableList.Pop();
if (AvailableIndex)
{
#if WITH_EDITOR
ObjAvailableCount.Decrement();
checkSlow(ObjAvailableCount.GetValue() >= 0);
#endif
Index = (int32)(uintptr_t)AvailableIndex;
check(ObjObjects[Index]==nullptr);
}
else
{
#if THREADSAFE_UOBJECTS
FScopeLock ObjObjectsLock(&ObjObjectsCritical);
#else
check(IsInGameThread());
#endif
Index = ObjObjects.AddZeroed(1);
}
check(Index >= ObjFirstGCIndex);
}
// Add to global table.
if (FPlatformAtomics::InterlockedCompareExchangePointer((void**)&ObjObjects[Index], Object, NULL) != NULL) // we use an atomic operation to check for unexpected concurrency, verify alignment, etc
{
UE_LOG(LogUObjectArray, Fatal, TEXT("Unexpected concurency while adding new object"));
}
Object->InternalIndex = Index;
// @todo: threading: lock UObjectCreateListeners
for (int32 ListenerIndex = 0; ListenerIndex < UObjectCreateListeners.Num(); ListenerIndex++)
{
UObjectCreateListeners[ListenerIndex]->NotifyUObjectCreated(Object,Index);
}
}
示例4: check
void AndroidEGL::SetSharedContext()
{
check(IsInGameThread());
PImplData->CurrentContextType = CONTEXT_Shared;
SetCurrentContext(PImplData->SharedContext.eglContext, PImplData->SharedContext.eglSurface);
}
示例5: OpenGLRHI
FOpenGLViewport::FOpenGLViewport(FOpenGLDynamicRHI* InOpenGLRHI,void* InWindowHandle,uint32 InSizeX,uint32 InSizeY,bool bInIsFullscreen,EPixelFormat PreferredPixelFormat)
: OpenGLRHI(InOpenGLRHI)
, OpenGLContext(NULL)
, SizeX(0)
, SizeY(0)
, bIsFullscreen(false)
, PixelFormat(PreferredPixelFormat)
, bIsValid(true)
, FrameSyncEvent(InOpenGLRHI)
{
check(OpenGLRHI);
//@to-do spurious check for HTML5, will need to go away.
#if !PLATFORM_HTML5
check(InWindowHandle);
#endif
check(IsInGameThread());
PlatformGlGetError(); // flush out old errors.
OpenGLRHI->Viewports.Add(this);
check(PlatformOpenGLCurrentContext(OpenGLRHI->PlatformDevice) == CONTEXT_Shared);
OpenGLContext = PlatformCreateOpenGLContext(OpenGLRHI->PlatformDevice, InWindowHandle);
Resize(InSizeX, InSizeY, bInIsFullscreen);
check(PlatformOpenGLCurrentContext(OpenGLRHI->PlatformDevice) == CONTEXT_Shared);
BeginInitResource(&FrameSyncEvent);
}
示例6: ensure
FModuleManager& FModuleManager::Get()
{
// NOTE: The reason we initialize to NULL here is due to an issue with static initialization of variables with
// constructors/destructors across DLL boundaries, where a function called from a statically constructed object
// calls a function in another module (such as this function) that creates a static variable. A crash can occur
// because the static initialization of this DLL has not yet happened, and the CRT's list of static destructors
// cannot be written to because it has not yet been initialized fully. (@todo UE4 DLL)
static FModuleManager* ModuleManager = NULL;
if( ModuleManager == NULL )
{
// FModuleManager is not thread-safe
ensure(IsInGameThread());
ModuleManager = new FModuleManager();
//temp workaround for IPlatformFile being used for FPaths::DirectoryExists before main() sets up the commandline.
#if PLATFORM_DESKTOP
// Ensure that dependency dlls can be found in restricted sub directories
const TCHAR* RestrictedFolderNames[] = { TEXT("NoRedist"), TEXT("NotForLicensees"), TEXT("CarefullyRedist") };
FString ModuleDir = FPlatformProcess::GetModulesDirectory();
for (const TCHAR* RestrictedFolderName : RestrictedFolderNames)
{
FString RestrictedFolder = ModuleDir / RestrictedFolderName;
if (FPaths::DirectoryExists(RestrictedFolder))
{
ModuleManager->AddBinariesDirectory(*RestrictedFolder, false);
}
}
#endif
}
return *ModuleManager;
}
示例7: check
uint32 FRunnableThread::GetTlsSlot()
{
check( IsInGameThread() );
uint32 TlsSlot = FPlatformTLS::AllocTlsSlot();
check( FPlatformTLS::IsValidTlsSlot( TlsSlot ) );
return TlsSlot;
}
示例8: check
struct FStreamable* FStreamableManager::StreamInternal(FStringAssetReference const& InTargetName)
{
check(IsInGameThread());
UE_LOG(LogStreamableManager, Verbose, TEXT("Asynchronous load %s"), *InTargetName.AssetLongPathname);
if (FPackageName::IsShortPackageName(InTargetName.AssetLongPathname))
{
UE_LOG(LogStreamableManager, Error, TEXT(" Can't load invalid package name %s"), *InTargetName.AssetLongPathname);
return NULL;
}
FStringAssetReference TargetName = ResolveRedirects(InTargetName);
FStreamable* Existing = StreamableItems.FindRef(TargetName);
if (Existing)
{
if (Existing->bAsyncUnloadRequestOutstanding)
{
// It's valid to have a live pointer if an async loaded object was hard referenced later
check(!Existing->bAsyncLoadRequestOutstanding); // we should not be both loading and unloading
UE_LOG(LogStreamableManager, Verbose, TEXT(" Aborted unload for %s"), *TargetName.AssetLongPathname);
Existing->bAsyncUnloadRequestOutstanding = false;
check(Existing->Target || Existing->bLoadFailed); // should not be an unload request unless the target is valid
return Existing;
}
if (Existing->bAsyncLoadRequestOutstanding)
{
UE_LOG(LogStreamableManager, Verbose, TEXT(" Already in progress %s"), *TargetName.AssetLongPathname);
check(!Existing->bAsyncUnloadRequestOutstanding); // we should not be both loading and unloading
check(!Existing->Target); // should not be an load request unless the target is invalid
return Existing; // already have one in process
}
if (Existing->Target)
{
UE_LOG(LogStreamableManager, Verbose, TEXT(" Already Loaded %s"), *TargetName.AssetLongPathname);
return Existing;
}
}
else
{
Existing = StreamableItems.Add(TargetName, new FStreamable());
}
FindInMemory(TargetName, Existing);
if (!Existing->Target)
{
FString Package = TargetName.AssetLongPathname;
int32 FirstDot = Package.Find(TEXT("."));
if (FirstDot != INDEX_NONE)
{
Package = Package.Left(FirstDot);
}
Existing->bAsyncLoadRequestOutstanding = true;
LoadPackageAsync(Package,
FLoadPackageAsyncDelegate::CreateStatic(&AsyncLoadCallbackWrapper, new FCallback(TargetName, this))
);
}
return Existing;
}
示例9: check
void FGearVR::GetCurrentOrientationAndPosition(FQuat& CurrentOrientation, FVector& CurrentPosition)
{
// only supposed to be used from the game thread
check(IsInGameThread());
auto frame = GetFrame();
if (!frame)
{
CurrentOrientation = FQuat::Identity;
CurrentPosition = FVector::ZeroVector;
return;
}
//if (PositionScale != FVector::ZeroVector)
//{
// frame->CameraScale3D = PositionScale;
// frame->Flags.bCameraScale3DAlreadySet = true;
//}
const bool bUseOrienationForPlayerCamera = false, bUsePositionForPlayerCamera = false;
GetCurrentPose(CurrentOrientation, CurrentPosition, bUseOrienationForPlayerCamera, bUsePositionForPlayerCamera);
if (bUseOrienationForPlayerCamera)
{
frame->LastHmdOrientation = CurrentOrientation;
frame->Flags.bOrientationChanged = bUseOrienationForPlayerCamera;
}
if (bUsePositionForPlayerCamera)
{
frame->LastHmdPosition = CurrentPosition;
frame->Flags.bPositionChanged = bUsePositionForPlayerCamera;
}
}
示例10: check
FOneSkyConnectionInfo FOneSkyLocalizationServiceSettings::GetConnectionInfo() const
{
check(IsInGameThread());
FOneSkyConnectionInfo OutConnectionInfo = ConnectionInfo;
return OutConnectionInfo;
}
示例11: DYNAMIC_CAST_D3D11RESOURCE
void FD3D11DynamicRHI::RHIResizeViewport(FViewportRHIParamRef ViewportRHI,uint32 SizeX,uint32 SizeY,bool bIsFullscreen)
{
DYNAMIC_CAST_D3D11RESOURCE(Viewport,Viewport);
check( IsInGameThread() );
Viewport->Resize(SizeX,SizeY,bIsFullscreen);
}
示例12: IsInGameThread
bool FBuildPatchServicesModule::Tick( float Delta )
{
// Using a local bool for this check will improve the assert message that gets displayed
// This one is unlikely to assert unless the FTicker's core tick is not ticked on the main thread for some reason
const bool bIsCalledFromMainThread = IsInGameThread();
check( bIsCalledFromMainThread );
// Call complete delegate on each finished installer
for(auto InstallerIt = BuildPatchInstallers.CreateIterator(); InstallerIt; ++InstallerIt)
{
if( (*InstallerIt).IsValid() && (*InstallerIt)->IsComplete() )
{
(*InstallerIt)->ExecuteCompleteDelegate();
(*InstallerIt).Reset();
}
}
// Remove completed (invalids) from the list
for(int32 BuildPatchInstallersIdx = 0; BuildPatchInstallersIdx < BuildPatchInstallers.Num(); ++BuildPatchInstallersIdx )
{
const FBuildPatchInstallerPtr* Installer = &BuildPatchInstallers[ BuildPatchInstallersIdx ];
if( !Installer->IsValid() )
{
BuildPatchInstallers.RemoveAt( BuildPatchInstallersIdx-- );
}
}
// More ticks
return true;
}
示例13: check
void UParticleModuleTrailSource::AutoPopulateInstanceProperties(UParticleSystemComponent* PSysComp)
{
check(IsInGameThread());
switch (SourceMethod)
{
case PET2SRCM_Actor:
{
bool bFound = false;
for (int32 i = 0; i < PSysComp->InstanceParameters.Num(); i++)
{
FParticleSysParam* Param = &(PSysComp->InstanceParameters[i]);
if (Param->Name == SourceName)
{
bFound = true;
break;
}
}
if (!bFound)
{
int32 NewParamIndex = PSysComp->InstanceParameters.AddZeroed();
PSysComp->InstanceParameters[NewParamIndex].Name = SourceName;
PSysComp->InstanceParameters[NewParamIndex].ParamType = PSPT_Actor;
PSysComp->InstanceParameters[NewParamIndex].Actor = NULL;
}
}
break;
}
}
示例14: check
void FTimerManager::InternalSetTimer(FTimerUnifiedDelegate const& InDelegate, float InRate, bool InbLoop)
{
// not currently threadsafe
check(IsInGameThread());
// if the timer is already set, just clear it and we'll re-add it, since
// there's no data to maintain.
InternalClearTimer(InDelegate);
if (InRate > 0.f)
{
// set up the new timer
FTimerData NewTimerData;
NewTimerData.Rate = InRate;
NewTimerData.bLoop = InbLoop;
NewTimerData.TimerDelegate = InDelegate;
if( HasBeenTickedThisFrame() )
{
NewTimerData.ExpireTime = InternalTime + InRate;
NewTimerData.Status = ETimerStatus::Active;
ActiveTimerHeap.HeapPush(NewTimerData);
}
else
{
// Store time remaining in ExpireTime while pending
NewTimerData.ExpireTime = InRate;
NewTimerData.Status = ETimerStatus::Pending;
PendingTimerList.Add(NewTimerData);
}
}
}
示例15: check
void FOnlineAsyncTaskManager::GameTick()
{
// assert if not game thread
check(IsInGameThread());
FOnlineAsyncItem* Item = NULL;
int32 CurrentQueueSize = 0;
do
{
Item = NULL;
// Grab a completed task from the queue
{
FScopeLock LockOutQueue(&OutQueueLock);
CurrentQueueSize = OutQueue.Num();
if (CurrentQueueSize > 0)
{
Item = OutQueue[0];
OutQueue.RemoveAt(0);
}
}
if (Item)
{
// Finish work and trigger delegates
Item->Finalize();
Item->TriggerDelegates();
delete Item;
}
}
while (Item != NULL);
}