作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试,但是没有用这段代码来做
UTextureRenderTarget2D *renderTarget; // In header
void UMyActorComponent::BeginPlay()
{
Super::BeginPlay();
texture = UTexture2D::CreateTransient(1, 1);
FTexture2DMipMap& Mip = texture->PlatformData->Mips[0];
void* Data = Mip.BulkData.Lock(LOCK_READ_WRITE);
uint8 red[4] = { 255, 255, 255, 255 };
FMemory::Memcpy(Data, &red, sizeof(red));
Mip.BulkData.Unlock();
texture->UpdateResource();
renderTarget->UpdateTexture2D(texture, TSF_BGRA8);
}
最佳答案
我找到了解决方案,看来这是正确的方法。
免责声明
使用纹理渲染目标可能不是最好的方法,因为通常渲染目标会将您的渲染从gpu传达到gpu。在这种情况下,我将数据从cpu写入gpu。因此,如果采用这种方法,您可能会遇到一些无法预料的问题。可能创建 transient 纹理是执行此操作的正确方法。
解
动态初始化渲染目标的资源
因此,首先需要使用此函数将UTextureRenderTarget2D初始化为所需的分辨率。将此放在有意义的位置。
RenderTarget->InitCustomFormat(2, 2, PF_B8G8R8A8, true);
在此示例中,我使用的是具有BGRA8像素格式和线性色彩空间的2x2图像
void UpdateTextureRegion(FTexture2DRHIRef TextureRHI, int32 MipIndex, uint32 NumRegions, FUpdateTextureRegion2D Region, uint32 SrcPitch, uint32 SrcBpp, uint8* SrcData, TFunction<void(uint8* SrcData)> DataCleanupFunc = [](uint8*) {})
{
ENQUEUE_RENDER_COMMAND(UpdateTextureRegionsData)(
[=](FRHICommandListImmediate& RHICmdList)
{
check(TextureRHI.IsValid());
RHIUpdateTexture2D(
TextureRHI,
MipIndex,
Region,
SrcPitch,
SrcData
+ Region.SrcY * SrcPitch
+ Region.SrcX * SrcBpp
);
DataCleanupFunc(SrcData);
});
}
更新渲染目标
static uint8 rgbw[4 * 4] = {
0, 0, 255, 255,
0, 255, 0, 255,
255, 0, 0, 255,
255, 255, 255, 255
};
auto region = FUpdateTextureRegion2D(0, 0, 0, 0, 2, 2);
UpdateTextureRegion(RenderTarget, 0, 1, region, 2*4, 4, rgbw);
将“渲染目标”附加到编辑器中的平面上,完成所有步骤后,它应该看起来像这样
关于c++ - 如何在C++中动态更新UTextureRenderTarget2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638346/
我是一名优秀的程序员,十分优秀!