Plasma Engine  2.0
Loading...
Searching...
No Matches
TexConvProcessor.h
1#pragma once
2
3#include <Foundation/IO/MemoryStream.h>
4#include <Foundation/Math/Rect.h>
5#include <Texture/TexConv/TexConvDesc.h>
6
8
9class PL_TEXTURE_DLL plTexConvProcessor
10{
11 PL_DISALLOW_COPY_AND_ASSIGN(plTexConvProcessor);
12
13public:
15
16 plTexConvDesc m_Descriptor;
17
18 plResult Process();
19
20 plImage m_OutputImage;
21 plImage m_LowResOutputImage;
22 plImage m_ThumbnailOutputImage;
23 plDefaultMemoryStreamStorage m_TextureAtlas;
24
25private:
27 // Modifying the Descriptor
28
29 plResult LoadInputImages();
30 plResult ForceSRGBFormats();
31 plResult ConvertAndScaleInputImages(plUInt32 uiResolutionX, plUInt32 uiResolutionY, plEnum<plTexConvUsage> usage);
32 plResult ConvertToNormalMap(plImage& bumpMap) const;
33 plResult ConvertToNormalMap(plArrayPtr<plImage> bumpMap) const;
34 plResult ClampInputValues(plArrayPtr<plImage> images, float maxValue) const;
35 plResult ClampInputValues(plImage& image, float maxValue) const;
36 plResult DetectNumChannels(plArrayPtr<const plTexConvSliceChannelMapping> channelMapping, plUInt32& uiNumChannels);
37 plResult InvertNormalMap(plImage& img);
38
40 // Reading from the descriptor
41
42 enum class MipmapChannelMode
43 {
44 AllChannels,
45 SingleChannel
46 };
47
48 plResult ChooseOutputFormat(plEnum<plImageFormat>& out_Format, plEnum<plTexConvUsage> usage, plUInt32 uiNumChannels) const;
49 plResult DetermineTargetResolution(
50 const plImage& image, plEnum<plImageFormat> OutputImageFormat, plUInt32& out_uiTargetResolutionX, plUInt32& out_uiTargetResolutionY) const;
51 plResult Assemble2DTexture(const plImageHeader& refImg, plImage& dst) const;
52 plResult AssembleCubemap(plImage& dst) const;
53 plResult Assemble3DTexture(plImage& dst) const;
54 plResult AdjustHdrExposure(plImage& img) const;
55 plResult PremultiplyAlpha(plImage& image) const;
56 plResult DilateColor2D(plImage& img) const;
57 plResult Assemble2DSlice(const plTexConvSliceChannelMapping& mapping, plUInt32 uiResolutionX, plUInt32 uiResolutionY, plColor* pPixelOut) const;
58 plResult GenerateMipmaps(plImage& img, plUInt32 uiNumMips /* =0 */, MipmapChannelMode channelMode = MipmapChannelMode::AllChannels) const;
59
61 // Purely functional
62 static plResult AdjustUsage(plStringView sFilename, const plImage& srcImg, plEnum<plTexConvUsage>& inout_Usage);
63 static plResult ConvertAndScaleImage(plStringView sImageName, plImage& inout_Image, plUInt32 uiResolutionX, plUInt32 uiResolutionY, plEnum<plTexConvUsage> usage);
64
66 // Output Generation
67
68 static plResult GenerateOutput(plImage&& src, plImage& dst, plEnum<plImageFormat> format);
69 static plResult GenerateThumbnailOutput(const plImage& srcImg, plImage& dstImg, plUInt32 uiTargetRes);
70 static plResult GenerateLowResOutput(const plImage& srcImg, plImage& dstImg, plUInt32 uiLowResMip);
71
73 // Texture Atlas
74
75 struct TextureAtlasItem
76 {
77 plUInt32 m_uiUniqueID = 0;
78 plUInt32 m_uiFlags = 0;
79 plImage m_InputImage[4];
80 plRectU32 m_AtlasRect[4];
81 };
82
83 plResult LoadAtlasInputs(const plTextureAtlasCreationDesc& atlasDesc, plDynamicArray<TextureAtlasItem>& items) const;
84 plResult CreateAtlasLayerTexture(
85 const plTextureAtlasCreationDesc& atlasDesc, plDynamicArray<TextureAtlasItem>& atlasItems, plInt32 layer, plImage& dstImg);
86
87 static plResult WriteTextureAtlasInfo(const plDynamicArray<TextureAtlasItem>& atlasItems, plUInt32 uiNumLayers, plStreamWriter& stream);
88 static plResult TrySortItemsIntoAtlas(plDynamicArray<TextureAtlasItem>& items, plUInt32 uiWidth, plUInt32 uiHeight, plInt32 layer);
89 static plResult SortItemsIntoAtlas(plDynamicArray<TextureAtlasItem>& items, plUInt32& out_ResX, plUInt32& out_ResY, plInt32 layer);
90 static plResult CreateAtlasTexture(plDynamicArray<TextureAtlasItem>& items, plUInt32 uiResX, plUInt32 uiResY, plImage& atlas, plInt32 layer);
91 static plResult FillAtlasBorders(plDynamicArray<TextureAtlasItem>& items, plImage& atlas, plInt32 layer);
92
94 // Texture Atlas
95
96 plResult GenerateTextureAtlas(plMemoryStreamWriter& stream);
97};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
plColor represents an RGBA color in linear color space. Values are stored as float,...
Definition Color.h:44
The default implementation for memory stream storage.
Definition MemoryStream.h:161
Definition DynamicArray.h:81
A class containing image meta data, such as format and dimensions.
Definition ImageHeader.h:15
A class containing image data and associated meta data.
Definition Image.h:103
A writer which can access a memory stream.
Definition MemoryStream.h:313
Interface for binary out (write) streams.
Definition Stream.h:107
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
Definition TexConvDesc.h:31
Definition TexConvProcessor.h:10
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
Definition TexConvDesc.h:21
Definition TextureAtlasDesc.h:10