【发布时间】:2019-09-01 18:34:47
【问题描述】:
我正在尝试用 Unreal Engine C++ 编写一个 Actor,它从渲染目标获取纹理数据。
所以,我有一个包含两个自定义方法的类:
#include "RenderActor.h"
#include "Engine.h"
#include <stdio.h>
// Sets default values
ARenderActor::ARenderActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
UE_LOG(LogTemp, Warning, TEXT("Init RenderActor\n"));
}
// Called when the game starts or when spawned
void ARenderActor::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTemp, Warning, TEXT("BeginPlay RenderActor\n"));
UTextureRenderTarget2D* target = GetTextureByName("MyCanvas");
}
// Called every frame
void ARenderActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
UTextureRenderTarget2D* GetTextureByName(wchar_t* name)
{
return LoadObject<UTextureRenderTarget2D>(NULL, name, NULL, LOAD_None, NULL);
}
int ARenderActor::GetTextureData(UTextureRenderTarget2D* TextureRenderTarget ,void* out_ptr,int length)
{
int sx=TextureRenderTarget->SizeX,sy=TextureRenderTarget->SizeY;
TArray<FColor> SurfData;
FRenderTarget *renderTarget = TextureRenderTarget->GameThread_GetRenderTargetResource();
check((sx*sy*4)<=length);
renderTarget->ReadPixels(SurfData);
memcpy(out_ptr,reinterpret_cast<void*>(SurfData.GetData()),sx*sy*4);
return sx*sy*4;
}
但是我得到一个编译错误:
[1/3] Compile RenderActor.cpp
[1m/home/starrabb1t/Documents/Unreal Projects/MemRender/Source/MemRender/RenderActor.cpp:30:9: [0m[0;1;31merror: [0m[1mno matching function for call to 'LoadObject'[0m
return LoadObject<UTextureRenderTarget2D>(NULL, name, NULL, LOAD_None, NULL);
[0;1;32m ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[0m[1m/home/starrabb1t/UnrealEngine/Engine/Source/Runtime/CoreUObject/Public/UObject/UObjectGlobals.h:1345:11: [0m[0;1;30mnote: [0mcandidate function template not viable: no known conversion from 'wchar_t *' to 'const TCHAR *' (aka 'const char16_t *') for 2nd argument[0m
inline T* LoadObject( UObject* Outer, const TCHAR* Name, const TCHAR* Filename=nullptr, uint32 LoadFlags=LOAD_None, UPackageMap* Sandbox=nullptr )
[0;1;32m ^
[0m1 error generated.
我不明白,怎么了。这里有一个函数LoadObject():
"Runtime/CoreUObject/Public/UObject/UObjectGlobals.h"
我在 RenderActor.h 类文件中包含了这个头文件,但没有结果。
【问题讨论】:
-
我会尝试回答这个问题,但如果 1)您在问题中包含 RenderActor.h 以及 2)如果您修复了编译器输出,这似乎会更容易一些控制字符,使其难以阅读。
标签: c++ unreal-engine4