Hey,
I’ve been trying to update a dynamic texture from C++ using the UTexture2D::UpdateTextureRegions function. I’ve created the texture by
if (!Texture) {
Texture = UTexture2D::CreateTransient(512, 512, PF_B8G8R8A8);
Texture->UpdateResource();
}
and try to update it using the UpdateTextureRegions function
The signature of UpdateTextureRegions is
UpdateTextureRegions(int32 MipIndex, uint32 NumRegions, const FUpdateTextureRegion2D* Regions, uint32 SrcPitch, uint32 SrcBpp, uint8* SrcData, TFunction<void(uint8* SrcData, const FUpdateTextureRegion2D* Regions)> DataCleanupFunc)
And I use it like this:
if (!Texture && Texture->Resource)
return;
uint8* Data = new uint8[512 * 512 * 4];
for (uint32 i = 0; i < 512 * 512; i++) {
uint32 u = i % 512;
uint32 v = i / 512;
Data[i * 4 + 0] = uint8(0);
Data[i * 4 + 1] = uint8(v);
Data[i * 4 + 2] = uint8(u);
Data[i * 4 + 3] = uint8(255);
}
FUpdateTextureRegion2D* Region = new FUpdateTextureRegion2D;
Region->DestX = 0;
Region->DestY = 0;
Region->SrcX = 0;
Region->SrcY = 0;
Region->Width = 512;
Region->Height = 512;
TFunction<void(uint8* SrcData, const FUpdateTextureRegion2D* Regions)> DataCleanupFunc =
[](uint8* SrcData, const FUpdateTextureRegion2D* Regions) {
delete[] SrcData;
delete[] Regions;
};
Texture->UpdateTextureRegions(0, 1, Region, 512, 4, Data, DataCleanupFunc);
But I haven’t gotten the texture to align properly and I think the issue is the pitch parameter. The result looks like this:
Does anyone have a good explanation of what the pitch is, and what value it should be? Or maybe if the issue is caused by something else?
Non of the results I get when i search tell me what the pitch really is, and in the DX11 documentation it seems to be the total width of the data.