Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sample Project and plugins seems to crash when attempting render in UE 5.0.3 and 5.1.0 #23

Open
voxlz opened this issue Dec 20, 2022 · 8 comments

Comments

@voxlz
Copy link

voxlz commented Dec 20, 2022

As the title claims, I cannot get a image capture to compleate without crashing unreal. I've tried compilin the sample project in both UE 5.0.3 and 5.1.0, and also tried installing it as a plugin in a fresh project. Same result.

I'm triggering the capture in a utility widget like so.
image

Error message always throws at line 185 in "C:\Users\*****\Documents\Unreal Projects\ImageCapture\Plugins\CameraCaptureToDisk\Source\CameraCaptureToDisk\Private\CameraCaptureManager.cpp". Attempting to run a float-non-blocking results in similar crash at line 250.

Error:

LoginId:9b7e3dc9443559f5ff884dad673f1823
EpicAccountId:1ea2120a2eaa42989234477b1afde595

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x00000000000004b0

UnrealEditor_CameraCaptureToDisk!ACameraCaptureManager::CaptureNonBlocking() [C:\Users\******\Desktop\CaptureToDisk\Plugins\CameraCaptureToDisk\Source\CameraCaptureToDisk\Private\CameraCaptureManager.cpp:185]
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_UMG
UnrealEditor_UMG
UnrealEditor_UMG
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_Slate
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
UnrealEditor_ApplicationCore
user32
user32
UnrealEditor_ApplicationCore
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
kernel32
ntdll
@agaertner
Copy link

agaertner commented Jan 10, 2023

+1 Same here. It compiles nicely but trying to place a CaptureManager or inherit from it crashes my editor.

Here's a proper stacktrace with debug symbols enabled:

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x00007ffa2e8f9000

VCRUNTIME140
UnrealEditor_Engine!UE::Transaction::Internal::FSerializedObjectDataWriterCommon::Serialize() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\TransactionCommon.cpp:254]
UnrealEditor_Core!FStructuredArchiveSlot::operator<<() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Serialization\StructuredArchiveSlots.cpp:150]
UnrealEditor_CoreUObject!FByteProperty::SerializeItem() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\PropertyByte.cpp:59]
UnrealEditor_CoreUObject!FArrayProperty::SerializeItem() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\PropertyArray.cpp:367]
UnrealEditor_CoreUObject!FPropertyTag::SerializeTaggedProperty() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\PropertyTag.cpp:253]
UnrealEditor_CoreUObject!UStruct::SerializeVersionedTaggedProperties() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:1590]
UnrealEditor_CoreUObject!UStruct::SerializeTaggedProperties() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:1279]
UnrealEditor_CoreUObject!UObject::SerializeScriptProperties() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1633]
UnrealEditor_CoreUObject!UObject::Serialize() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1454]
UnrealEditor_CoreUObject!UObject::Serialize() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1338]
UnrealEditor_Engine!AActor::Serialize() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:837]
UnrealEditor_UnrealEd!FTransaction::FObjectRecord::SerializeObject() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorTransaction.cpp:183]
UnrealEditor_UnrealEd!FTransaction::FObjectRecord::FObjectRecord() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorTransaction.cpp:73]
UnrealEditor_UnrealEd!FTransaction::SaveObject() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorTransaction.cpp:627]
UnrealEditor_CoreUObject!SaveToTransactionBuffer() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:2977]
UnrealEditor_CoreUObject!StaticConstructObject_Internal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:4216]
UnrealEditor_Engine!UWorld::SpawnActor() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelActor.cpp:660]
UnrealEditor_Engine!UWorld::SpawnActor() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelActor.cpp:440]
UnrealEditor_UnrealEd!UEditorEngine::AddActor() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:6525]
UnrealEditor_UnrealEd!FLevelEditorViewportClient::TryPlacingActorFromObject() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\LevelEditorViewport.cpp:242]
UnrealEditor_UnrealEd!FLevelEditorViewportClient::DropObjectsOnActor() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\LevelEditorViewport.cpp:1123]
UnrealEditor_UnrealEd!FLevelEditorViewportClient::DropObjectsAtCoordinates() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\LevelEditorViewport.cpp:1566]
UnrealEditor_LevelEditor!SLevelViewport::HandlePlaceDraggedObjects() [D:\build\++UE5\Sync\Engine\Source\Editor\LevelEditor\Private\SLevelViewport.cpp:971]
UnrealEditor_LevelEditor!SLevelViewport::OnDrop() [D:\build\++UE5\Sync\Engine\Source\Editor\LevelEditor\Private\SLevelViewport.cpp:1049]
UnrealEditor_Slate!<lambda_471858b7e70a8b68bd65bc435c2a047c>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5088]
UnrealEditor_Slate!FEventRouter::Route<FReply,FEventRouter::FBubblePolicy,FPointerEvent,<lambda_471858b7e70a8b68bd65bc435c2a047c> >() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:412]
UnrealEditor_Slate!FSlateApplication::RoutePointerUpEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5083]
UnrealEditor_Slate!FSlateApplication::ProcessMouseButtonUpEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5601]
UnrealEditor_Slate!FSlateApplication::OnMouseUp() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:5566]
UnrealEditor_ApplicationCore!FWindowsApplication::ProcessDeferredMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2219]
UnrealEditor_ApplicationCore!FWindowsApplication::DeferMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2726]
UnrealEditor_ApplicationCore!FWindowsApplication::ProcessMessage() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:1895]
UnrealEditor_ApplicationCore!FWindowsApplication::AppWndProc() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:925]
user32
user32
InkObj
atlthunk
user32
user32
UnrealEditor_ApplicationCore!FWindowsPlatformApplicationMisc::PumpMessages() [D:\build\++UE5\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsPlatformApplicationMisc.cpp:142]
UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5291]
UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:202]
UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107]
UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244]
UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282]
UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

EDIT: Getting this error during runtime now when trying to call CaptureNonBlocking

@TimmHess
Copy link
Owner

Hey,
thanks for the bump and sorry for not getting back to you earlier - you got lost in the Christmas holiday 🙈

I just clone the repo as is and updated my engine to UE 5.1.0. However, I cannot reproduce your crashes... I was able to get grab images in all data-types.

@agaertner Do you happen to make the call automatically, immediately in the very first tick of your game? Because I see the Tick() call in the trace... I once had that issue - for some reason you need to wait for some frames before the components are all ready.

@voxlz Can you check line 185 (where the color capture crashes) for me? Because strangely that is where Gamma is set and not an image grabbing section- maybe the SceneCapture is not connected correctly? :/

@agaertner
Copy link

agaertner commented Jan 10, 2023

UnrealEditor_unreal_minirov_patch_0!ACaptureManager::CaptureNonBlocking() [I:\Repositories\MARUM\unreal-minirov\Source\unreal_minirov\Private\CaptureManager.cpp:61]
UnrealEditor_CoreUObject!UFunction::Invoke() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:6455]
UnrealEditor_CoreUObject!UObject::CallFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1118]
UnrealEditor_CoreUObject!UObject::ProcessContextOpcode() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:3084]
UnrealEditor_CoreUObject!ProcessLocalScriptFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1188]
UnrealEditor_CoreUObject!ProcessScriptFunction<void (__cdecl*)(UObject *,FFrame &,void *)>() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1018]
UnrealEditor_CoreUObject!ProcessLocalFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1258]
UnrealEditor_CoreUObject!ProcessLocalScriptFunction() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1188]
UnrealEditor_CoreUObject!UObject::ProcessInternal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1285]
UnrealEditor_CoreUObject!UFunction::Invoke() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:6455]
UnrealEditor_CoreUObject!UObject::ProcessEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:2116]
UnrealEditor_Engine!AActor::ProcessEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:1055]
UnrealEditor_Engine!AActor::ReceiveTick() [D:\build\++UE5\Sync\Engine\Intermediate\Build\Win64\UnrealEditor\Inc\Engine\UHT\Actor.gen.cpp:2161]
UnrealEditor_Engine!AActor::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:1430]
UnrealEditor_Engine!AActor::TickActor() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:1410]
UnrealEditor_Engine!FActorTickFunction::ExecuteTick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:222]
UnrealEditor_Engine!FTickFunctionTask::DoTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:284]
UnrealEditor_Engine!TGraphTask<FTickFunctionTask>::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:1348]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:760]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:649]
UnrealEditor_Core!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:2203]
UnrealEditor_Engine!FTickTaskSequencer::ReleaseTickGroup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:565]
UnrealEditor_Engine!FTickTaskManager::RunTickGroup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:1592]
UnrealEditor_Engine!UWorld::RunTickGroup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp:794]
UnrealEditor_Engine!UWorld::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp:1537]
UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1890]
UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:517]
UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5367]
UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:202]
UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:107]
UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:244]
UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:282]
UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

This is the line its referencing at the top:

void ACaptureManager::CaptureNonBlocking() {
    if (!IsValid(CaptureComponent)) {
        UE_LOG(LogTemp, Error, TEXT("CaptureColorNonBlocking: CaptureComponent was not valid!"));
        return;
    }

    // reference in stacktrace
    CaptureComponent->GetCaptureComponent2D()->TextureTarget->TargetGamma = GEngine->GetDisplayGamma();
    
    [...]

My BP setup:
image

ObserverEnabled is set to true after SceneCapture2D has been created and assigned to the CaptureManager.

@TimmHess
Copy link
Owner

Okay, I can think of two things of the top of my head:

  1. as mentioned above - if this is executed very early in the game/simulation - you can try to either delay it or for testing's sake add a button event to trigger the capture manually from the keyboard. This is just to make sure it's not because of some random hiccups in the engine setting up components in the world.
  2. Do try a nullptr / Valid check on every part of the component chain here: CamptureComponent2D* TextureTarget*. If the code crashes here it really looks like a nullptr or otherwise invalid component sneaked into the setup..

I hope this does something for you 👍

@agaertner
Copy link

Okay, I can think of two things of the top of my head:

  1. as mentioned above - if this is executed very early in the game/simulation - you can try to either delay it or for testing's sake add a button event to trigger the capture manually from the keyboard. This is just to make sure it's not because of some random hiccups in the engine setting up components in the world.
  2. Do try a nullptr / Valid check on every part of the component chain here: CamptureComponent2D* TextureTarget*. If the code crashes here it really looks like a nullptr or otherwise invalid component sneaked into the setup..

I hope this does something for you 👍

It actually spawns the manager on startup and spawns the scenecapture on keyboard press.

I will try adding other checks then.

@agaertner
Copy link

agaertner commented Jan 11, 2023

The issue was that the SceneCapture2D had no TextureTarget by default. I fixed that by creating a child BP with a default render target. (Edit: Scratched. I forgot about SetupCaptureComponent which creates a target texture on runtime.)

Now I have another crash further down with the following stacktrace (fixed, see below):

Assertion failed: RawSize < Height* InBytesPerRow [File:./Runtime/ImageWrapper/Private/ImageWrapperBase.cpp] [Line: 139]

libUnrealEditor-ImageWrapper.so!FImageWrapperBase::SetRaw(void const*, long long, int, int, ERGBFormat, int, int) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/ImageWrapper/Private/ImageWrapperBase.cpp:139]
libUnrealEditor-unreal_minirov.so!ACaptureManager::Tick(float) [/home/agaertner/repos/unreal-minirov/Source/unreal_minirov/Private/CaptureManager.cpp:246]
libUnrealEditor-Engine.so!FActorTickFunction::ExecuteTick(float, ELevelTick, ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/Actor.cpp:222]
libUnrealEditor-Engine.so!FTickFunctionTask::DoTask(ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:284]
libUnrealEditor-Engine.so!TGraphTask<FTickFunctionTask>::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type, bool) [/mnt/horde/++UE5/Sync/Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:1348]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:760]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksUntilQuit(int) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:648]
libUnrealEditor-Core.so!FTaskGraphCompatibilityImplementation::ProcessThreadUntilRequestReturn(ENamedThreads::Type) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:2149]
libUnrealEditor-Core.so!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(TArray<TRefCountPtr<FGraphEvent>, TSizedInlineAllocator<4u, 32, TSizedDefaultAllocator<32> > > const&, ENamedThreads::Type) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:2203]
libUnrealEditor-Engine.so!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:564]
libUnrealEditor-Engine.so!FTickTaskManager::RunTickGroup(ETickingGroup, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:1591]
libUnrealEditor-Engine.so!UWorld::Tick(ELevelTick, float) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Engine/Private/LevelTick.cpp:1537]
libUnrealEditor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/EditorEngine.cpp:1888]
libUnrealEditor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/mnt/horde/++UE5/Sync/Engine/Source/./Editor/UnrealEd/Private/UnrealEdEngine.cpp:514]
UnrealEditor!FEngineLoop::Tick() [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Launch/Private/LaunchEngineLoop.cpp:5361]
UnrealEditor!GuardedMain(char16_t const*) [/mnt/horde/++UE5/Sync/Engine/Source/./Runtime/Launch/Private/Launch.cpp:204]
libUnrealEditor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*), void (*)()) [/mnt/horde/++UE5/Sync/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:269]
libc.so.6!UnknownFunction(0x29d8f)
libc.so.6!__libc_start_main(+0x7f)
UnrealEditor!_start()

FIXED
My setup is that I create a CaptureManager before I have a SceneCapture2D but SetupCaptureComponent is only called once after creation during BeginPlay. My SceneCapture2D can be created on runtime (after an arbitrary amount of time passed with the press of a key).
So what I had to do is make the scope of theSetupCaptureComponent method public and annotate it as BlueprintCallable so I can use it whenever I assign a new SceneCapture2D from within my BP. This gives the CaptureManager more flexibility anyway and I don't have to recreate it for the SetupCaptureComponent to be called.

Now it works perfectly. I will have to change the save directory to point to some other partition because FPaths::ProjectSavedDir()points to the home/ saved dir of UnrealEngine on my linux machine (ie. /home/user/.config/Epic/UnrealEngine/5.1/Saved/observer/)

Hopefully this little documentation will help some people with above problem.

@TimmHess
Copy link
Owner

Ah, nice!
Indeed, there are still many quirks that I am unaware of - thanks for sharing!

@agaertner
Copy link

agaertner commented Jan 12, 2023

I might create a fork someday and do some PRs if I can get to it (pretty busy right now). Though, what I can say is a feature that I needed was access to the TArray from within a BP (ie. access to the current frame) to use it with another plugin of mine that takes that byte array as param. I did that by simply creating a TArray<uint8> CurrentFrame field and assigning it with the raw data before the Saving To Disk part. I also added a boolean SaveToDisk because the saving to disk is more like a debug helper for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants