| 685 | #if !COMPILE_WITHOUT_CSHARP |
| 686 | |
| 687 | bool TextureBase::InitCSharp(void* ptr) |
| 688 | { |
| 689 | PROFILE_CPU_NAMED("Texture.Init"); |
| 690 | struct InternalInitData |
| 691 | { |
| 692 | PixelFormat Format; |
| 693 | int32 Width; |
| 694 | int32 Height; |
| 695 | int32 ArraySize; |
| 696 | int32 MipLevels; |
| 697 | int32 GenerateMips; |
| 698 | int32 DataRowPitch[14]; |
| 699 | int32 DataSlicePitch[14]; |
| 700 | byte* Data[14]; |
| 701 | }; |
| 702 | auto initDataObj = (InternalInitData*)ptr; |
| 703 | auto initData = New<InitData>(); |
| 704 | |
| 705 | initData->Format = initDataObj->Format; |
| 706 | initData->Width = initDataObj->Width; |
| 707 | initData->Height = initDataObj->Height; |
| 708 | initData->ArraySize = initDataObj->ArraySize; |
| 709 | initData->Mips.Resize(initDataObj->GenerateMips ? MipLevelsCount(initDataObj->Width, initDataObj->Height) : initDataObj->MipLevels); |
| 710 | |
| 711 | // Copy source mips data |
| 712 | for (int32 mipIndex = 0; mipIndex < initDataObj->MipLevels; mipIndex++) |
| 713 | { |
| 714 | auto& mip = initData->Mips[mipIndex]; |
| 715 | mip.RowPitch = initDataObj->DataRowPitch[mipIndex]; |
| 716 | mip.SlicePitch = initDataObj->DataSlicePitch[mipIndex]; |
| 717 | mip.Data.Copy(initDataObj->Data[mipIndex], mip.SlicePitch * initData->ArraySize); |
| 718 | } |
| 719 | |
| 720 | // Generate mips |
| 721 | for (int32 mipIndex = initDataObj->MipLevels; mipIndex < initData->Mips.Count(); mipIndex++) |
| 722 | { |
| 723 | initData->GenerateMip(mipIndex, initDataObj->GenerateMips & 2); |
| 724 | } |
| 725 | |
| 726 | return Init(initData); |
| 727 | } |
| 728 | |
| 729 | #endif |
| 730 |
nothing calls this directly
no test coverage detected