Files
UnrealEngineUWP/Engine/Source/Programs/UnrealLightmass/Private/Lighting/LightmapData.h
Uriel Doyon b9444f338f Added support for UVolumeTexture and UTexture2DArray streaming.
Texture 2D array streaming is implemented through FTexture2DArrayMipAllocator_Reallocate
Volume texture streaming is implemented through FVolumeTextureMipAllocator_Reallocate.
New generic stream out implementation in FTextureStreamOut.

Fixed different issues in FTexture2DMipDataProvider_IO relatively to optional bulks and IO errors.

Added UTexture::GetSurfaceDepth() for 3d textures.
Added UTexture::GetSurfaceArraySize() for array textures (where cubemaps return 6).

Moved UTexture2D::CancelPendingTextureStreaming() and UTexture2D::LevelIndex to UTexture.

Renamed UTexture2DArray::GetNumSlices() to UTexture2DArray::GetArraySize().

Fixed missing "virtual" keyword in base class UTextureMipDataProviderFactory.

Updated the texture editor UI so that it shows Texture2DArray array sizes and Texture3D depth.
Unified the UI for cubemaps so that it shows as an array with size 6.

Reimplemented "LODGroups" command to make it coherent with latest changes.

#rb jian.ru, danny.couture, matt.peters
#fyi mihnea.balta
#jira 	UE-97975, UE-81395, UE-102061, UE-84427

[CL 14832616 by Uriel Doyon in ue5-main branch]
2020-12-01 20:32:18 -04:00

196 lines
5.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ImportExport.h"
#include "LightmassScene.h"
namespace Lightmass
{
/**
* The raw data which is used to construct a 2D light-map.
*/
class FLightMapData2D : public FLightMapData2DData
{
public:
/** The lights which this light-map stores. */
TArray<const FLight*> Lights;
FLightMapData2D(uint32 InSizeX,uint32 InSizeY)
: FLightMapData2DData(InSizeX, InSizeY)
, CompressedData(NULL)
{
Data.Empty(SizeX * SizeY);
Data.AddZeroed(SizeX * SizeY);
}
~FLightMapData2D()
{
delete CompressedData;
}
// Accessors.
const FLightSample& operator()(uint32 X,uint32 Y) const { return Data[SizeX * Y + X]; }
FLightSample& operator()(uint32 X,uint32 Y) { return Data[SizeX * Y + X]; }
uint32 GetSizeX() const { return SizeX; }
uint32 GetSizeY() const { return SizeY; }
void AddLight(const FLight* NewLight)
{
Lights.AddUnique(NewLight);
}
/**
* Quantize the full-res FLightSamples into FQuantizedLightSampleDatas
*/
void Quantize(int32 DebugSampleIndex);
const FLightSample* GetData() { return Data.GetData(); }
const FQuantizedLightSampleData* GetQuantizedData() { return QuantizedData.GetData(); }
/**
* Compresses the raw lightmap data to a buffer for writing over Swarm
*/
void Compress(int32 DebugSampleIndex);
/**
* @return the compressed data, or NULL if not compressed
*/
uint8* GetCompressedData()
{
return CompressedData;
}
private:
TArray<FLightSample> Data;
TArray<FQuantizedLightSampleData> QuantizedData;
/** zlib compressed lightmap data */
uint8* CompressedData;
};
/**
* A sample of the visibility factor between a light and a single point.
*/
class FShadowSample : public FShadowSampleData
{
public:
FShadowSample operator-(const FShadowSample& SampleB) const
{
FShadowSample Result;
Result.bIsMapped = bIsMapped;
Result.Visibility = Visibility - SampleB.Visibility;
return Result;
}
FShadowSample operator*(const float& Scalar) const
{
FShadowSample Result;
Result.bIsMapped = bIsMapped;
Result.Visibility = Visibility * Scalar;
return Result;
}
};
/**
* The raw data which is used to construct a 2D light-map.
*/
class FShadowMapData2D : public FShadowMapData2DData
{
public:
FShadowMapData2D(uint32 InSizeX,uint32 InSizeY)
: FShadowMapData2DData(InSizeX, InSizeY)
, CompressedData(NULL)
{
Data.Empty(InSizeX * InSizeY);
Data.AddZeroed(InSizeX * InSizeY);
}
virtual ~FShadowMapData2D(){ }
// Accessors.
const FShadowSample& operator()(uint32 X,uint32 Y) const { return Data[SizeX * Y + X]; }
FShadowSample& operator()(uint32 X,uint32 Y) { return Data[SizeX * Y + X]; }
uint32 GetSizeX() const { return SizeX; }
uint32 GetSizeY() const { return SizeY; }
void Quantize(int32 DebugSampleIndex);
const FShadowSample* GetData() { return Data.GetData(); }
const FQuantizedShadowSampleData* GetQuantizedData() { return QuantizedData.GetData(); }
void Compress(int32 DebugSampleIndex);
uint8* GetCompressedData()
{
return CompressedData;
}
private:
TArray<FShadowSample> Data;
TArray<FQuantizedShadowSampleData> QuantizedData;
uint8* CompressedData;
};
class FSignedDistanceFieldShadowSample : public FSignedDistanceFieldShadowSampleData
{
public:
FSignedDistanceFieldShadowSample operator-(const FSignedDistanceFieldShadowSample& SampleB) const
{
FSignedDistanceFieldShadowSample Result;
Result.bIsMapped = bIsMapped;
Result.Distance = Distance - SampleB.Distance;
Result.PenumbraSize = PenumbraSize - SampleB.PenumbraSize;
return Result;
}
FSignedDistanceFieldShadowSample operator*(const float& Scalar) const
{
FSignedDistanceFieldShadowSample Result;
Result.bIsMapped = bIsMapped;
Result.Distance = Distance * Scalar;
Result.PenumbraSize = PenumbraSize * Scalar;
return Result;
}
};
/**
* The raw data which is used to construct a 2D signed distance field shadow map.
*/
class FSignedDistanceFieldShadowMapData2D : public FSignedDistanceFieldShadowMapData2DData
{
public:
FSignedDistanceFieldShadowMapData2D(uint32 InSizeX,uint32 InSizeY)
: FSignedDistanceFieldShadowMapData2DData(InSizeX, InSizeY)
, CompressedData(NULL)
{
Data.Empty(InSizeX * InSizeY);
Data.AddZeroed(InSizeX * InSizeY);
}
virtual ~FSignedDistanceFieldShadowMapData2D(){ }
// Accessors.
const FSignedDistanceFieldShadowSample& operator()(uint32 X,uint32 Y) const { return Data[SizeX * Y + X]; }
FSignedDistanceFieldShadowSample& operator()(uint32 X,uint32 Y) { return Data[SizeX * Y + X]; }
uint32 GetSizeX() const { return SizeX; }
uint32 GetSizeY() const { return SizeY; }
void Quantize(int32 DebugSampleIndex);
const FSignedDistanceFieldShadowSample* GetData() { return Data.GetData(); }
const FQuantizedSignedDistanceFieldShadowSampleData* GetQuantizedData() { return QuantizedData.GetData(); }
void Compress(int32 DebugSampleIndex);
uint8* GetCompressedData()
{
return CompressedData;
}
private:
TArray<FSignedDistanceFieldShadowSample> Data;
TArray<FQuantizedSignedDistanceFieldShadowSampleData> QuantizedData;
uint8* CompressedData;
};
} //namespace Lightmass