Plasma Engine  2.0
Loading...
Searching...
No Matches
ImageConversion.h
1#pragma once
2
3#include <Foundation/Containers/StaticArray.h>
4#include <Foundation/Types/Bitflags.h>
5#include <Foundation/Utilities/EnumerableClass.h>
6
7#include <Texture/Image/Image.h>
8
9PL_DECLARE_FLAGS(plUInt8, plImageConversionFlags, InPlace);
10
13{
14 plImageConversionEntry(plImageFormat::Enum source, plImageFormat::Enum target, plImageConversionFlags::Enum flags, float additionalPenalty = 0)
15 : m_sourceFormat(source)
16 , m_targetFormat(target)
17 , m_flags(flags)
18 , m_additionalPenalty(additionalPenalty)
19 {
20 }
21
22 const plImageFormat::Enum m_sourceFormat;
23 const plImageFormat::Enum m_targetFormat;
25
29 float m_additionalPenalty = 0.0f;
30};
31
37class PL_TEXTURE_DLL plImageConversionStep : public plEnumerable<plImageConversionStep>
38{
39 PL_DECLARE_ENUMERABLE_CLASS(plImageConversionStep);
40
41protected:
43 virtual ~plImageConversionStep();
44
45public:
50};
51
54{
55public:
57 virtual plResult ConvertPixels(plConstByteBlobPtr source, plByteBlobPtr target, plUInt64 uiNumElements, plImageFormat::Enum sourceFormat,
58 plImageFormat::Enum targetFormat) const = 0;
59};
60
63{
64public:
66 virtual plResult DecompressBlocks(plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumBlocks, plImageFormat::Enum sourceFormat,
67 plImageFormat::Enum targetFormat) const = 0;
68};
69
72{
73public:
75 virtual plResult CompressBlocks(plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumBlocksX, plUInt32 uiNumBlocksY,
76 plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const = 0;
77};
78
81{
82public:
84 virtual plResult ConvertPixels(const plImageView& source, plArrayPtr<plImage> target, plUInt32 uiNumPixelsX, plUInt32 uiNumPixelsY, plImageFormat::Enum sourceFormat,
85 plImageFormat::Enum targetFormat) const = 0;
86};
87
90{
91public:
93 virtual plResult ConvertPixels(plArrayPtr<plImageView> source, plImage target, plUInt32 uiNumPixelsX, plUInt32 uiNumPixelsY, plImageFormat::Enum sourceFormat,
94 plImageFormat::Enum targetFormat) const = 0;
95};
96
97
99class PL_TEXTURE_DLL plImageConversion
100{
101public:
103 static bool IsConvertible(plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat);
104
106 static plImageFormat::Enum FindClosestCompatibleFormat(plImageFormat::Enum format, plArrayPtr<const plImageFormat::Enum> compatibleFormats);
107
110 {
111 PL_DECLARE_POD_TYPE();
112
113 const plImageConversionStep* m_step;
114 plImageFormat::Enum m_sourceFormat;
115 plImageFormat::Enum m_targetFormat;
116 plUInt32 m_sourceBufferIndex;
117 plUInt32 m_targetBufferIndex;
118 bool m_inPlace;
119 };
120
136 static plResult BuildPath(plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat, bool bSourceEqualsTarget,
137 plHybridArray<ConversionPathNode, 16>& ref_path_out, plUInt32& ref_uiNumScratchBuffers_out);
138
140 static plResult Convert(const plImageView& source, plImage& ref_target, plImageFormat::Enum targetFormat);
141
143 static plResult Convert(const plImageView& source, plImage& ref_target, plArrayPtr<ConversionPathNode> path, plUInt32 uiNumScratchBuffers);
144
146 static plResult ConvertRaw(
147 plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumElements, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat);
148
150 static plResult ConvertRaw(
151 plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumElements, plArrayPtr<ConversionPathNode> path, plUInt32 uiNumScratchBuffers);
152
153private:
156
157 static plResult ConvertSingleStep(const plImageConversionStep* pStep, const plImageView& source, plImage& target, plImageFormat::Enum targetFormat);
158
159 static plResult ConvertSingleStepDecompress(const plImageView& source, plImage& target, plImageFormat::Enum sourceFormat,
160 plImageFormat::Enum targetFormat, const plImageConversionStep* pStep);
161
162 static plResult ConvertSingleStepCompress(const plImageView& source, plImage& target, plImageFormat::Enum sourceFormat,
163 plImageFormat::Enum targetFormat, const plImageConversionStep* pStep);
164
165 static plResult ConvertSingleStepDeplanarize(const plImageView& source, plImage& target, plImageFormat::Enum sourceFormat,
166 plImageFormat::Enum targetFormat, const plImageConversionStep* pStep);
167
168 static plResult ConvertSingleStepPlanarize(const plImageView& source, plImage& target, plImageFormat::Enum sourceFormat,
169 plImageFormat::Enum targetFormat, const plImageConversionStep* pStep);
170
171 static void RebuildConversionTable();
172};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
This class encapsulates a blob's storage and it's size. It is recommended to use this class instead o...
Definition Blob.h:13
Base class to add the ability to another class to enumerate all active instance of it,...
Definition EnumerableClass.h:28
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Helper class containing utilities to convert between different image formats and layouts.
Definition ImageConversion.h:100
Interface for a single image conversion step where the source format is uncompressed and the target f...
Definition ImageConversion.h:72
virtual plResult CompressBlocks(plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumBlocksX, plUInt32 uiNumBlocksY, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const =0
Compresses the given number of blocks.
Interface for a single image conversion step where the source format is compressed and the target for...
Definition ImageConversion.h:63
virtual plResult DecompressBlocks(plConstByteBlobPtr source, plByteBlobPtr target, plUInt32 uiNumBlocks, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const =0
Decompresses the given number of blocks.
Interface for a single image conversion step from a planar to a linear format.
Definition ImageConversion.h:90
virtual plResult ConvertPixels(plArrayPtr< plImageView > source, plImage target, plUInt32 uiNumPixelsX, plUInt32 uiNumPixelsY, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const =0
Converts a batch of pixels from the given source planes.
Interface for a single image conversion step.
Definition ImageConversion.h:38
virtual plArrayPtr< const plImageConversionEntry > GetSupportedConversions() const =0
Returns an array pointer of supported conversions.
Interface for a single image conversion step where both the source and target format are uncompressed...
Definition ImageConversion.h:54
virtual plResult ConvertPixels(plConstByteBlobPtr source, plByteBlobPtr target, plUInt64 uiNumElements, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const =0
Converts a batch of pixels.
Interface for a single image conversion step from a linear to a planar format.
Definition ImageConversion.h:81
virtual plResult ConvertPixels(const plImageView &source, plArrayPtr< plImage > target, plUInt32 uiNumPixelsX, plUInt32 uiNumPixelsY, plImageFormat::Enum sourceFormat, plImageFormat::Enum targetFormat) const =0
Converts a batch of pixels into the given target planes.
A class containing image data and associated meta data.
Definition Image.h:103
A class referencing image data and holding metadata about the image.
Definition Image.h:13
The plBitflags class allows you to work with type-safe bitflags.
Definition Bitflags.h:82
A single node along a computed conversion path.
Definition ImageConversion.h:110
A structure describing the pairs of source/target format that may be converted using the conversion r...
Definition ImageConversion.h:13
float m_additionalPenalty
Definition ImageConversion.h:29
Enum
Enum describing the encoding format of the pixels of an image.
Definition ImageFormat.h:68
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54