Plasma Engine  2.0
Loading...
Searching...
No Matches
MeshBufferUtils.h
1
2#pragma once
3
4#include <RendererCore/RendererCoreDLL.h>
5#include <RendererFoundation/Resources/ResourceFormats.h>
6
8
10{
11 using StorageType = plUInt8;
12
13 enum Enum
14 {
15 _10Bit,
16 _16Bit,
17 _32Bit,
18
19 Default = _10Bit
20 };
21
23 static plGALResourceFormat::Enum ToResourceFormatNormal(Enum value);
24
26 static plGALResourceFormat::Enum ToResourceFormatTangent(Enum value);
27};
28
29PL_DECLARE_REFLECTABLE_TYPE(PL_RENDERERCORE_DLL, plMeshNormalPrecision);
30
32{
33 using StorageType = plUInt8;
34
35 enum Enum
36 {
37 _16Bit,
38 _32Bit,
39
40 Default = _16Bit
41 };
42
44 static plGALResourceFormat::Enum ToResourceFormat(Enum value);
45};
46
47PL_DECLARE_REFLECTABLE_TYPE(PL_RENDERERCORE_DLL, plMeshTexCoordPrecision);
48
50{
51 using StorageType = plUInt8;
52
53 enum Enum
54 {
55 _8Bit,
56 _10Bit,
57 _16Bit,
58 _32Bit,
59
60 Default = _8Bit
61 };
62
64 static plGALResourceFormat::Enum ToResourceFormat(Enum value);
65};
66
67PL_DECLARE_REFLECTABLE_TYPE(PL_RENDERERCORE_DLL, plMeshBoneWeigthPrecision);
68
70{
71 using StorageType = plUInt8;
72
73 enum Enum
74 {
75 None,
76 LinearToSrgb,
77 SrgbToLinear,
78
79 Default = None
80 };
81};
82
83PL_DECLARE_REFLECTABLE_TYPE(PL_RENDERERCORE_DLL, plMeshVertexColorConversion);
84
85struct PL_RENDERERCORE_DLL plMeshBufferUtils
86{
87 static plResult EncodeNormal(const plVec3& vNormal, plArrayPtr<plUInt8> dest, plMeshNormalPrecision::Enum normalPrecision);
88 static plResult EncodeTangent(const plVec3& vTangent, float fTangentSign, plArrayPtr<plUInt8> dest, plMeshNormalPrecision::Enum tangentPrecision);
89 static plResult EncodeTexCoord(const plVec2& vTexCoord, plArrayPtr<plUInt8> dest, plMeshTexCoordPrecision::Enum texCoordPrecision);
90 static plResult EncodeBoneWeights(const plVec4& vWeights, plArrayPtr<plUInt8> dest, plMeshBoneWeigthPrecision::Enum precision);
91
92 static plResult EncodeNormal(const plVec3& vNormal, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
93 static plResult EncodeTangent(const plVec3& vTangent, float fTangentSign, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
94 static plResult EncodeTexCoord(const plVec2& vTexCoord, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
95 static plResult EncodeBoneWeights(const plVec4& vWeights, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
96 static plResult EncodeColor(const plVec4& vColor, plArrayPtr<plUInt8> dest, plMeshVertexColorConversion::Enum conversion);
97
98 static plResult DecodeNormal(plArrayPtr<const plUInt8> source, plVec3& ref_vDestNormal, plMeshNormalPrecision::Enum normalPrecision);
99 static plResult DecodeTangent(
100 plArrayPtr<const plUInt8> source, plVec3& ref_vDestTangent, float& ref_fDestBiTangentSign, plMeshNormalPrecision::Enum tangentPrecision);
101 static plResult DecodeTexCoord(plArrayPtr<const plUInt8> source, plVec2& ref_vDestTexCoord, plMeshTexCoordPrecision::Enum texCoordPrecision);
102
103 static plResult DecodeNormal(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec3& ref_vDestNormal);
104 static plResult DecodeTangent(
105 plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec3& ref_vDestTangent, float& ref_fDestBiTangentSign);
106 static plResult DecodeTexCoord(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec2& ref_vDestTexCoord);
107
108 // low level conversion functions
109 static plResult EncodeFromFloat(const float fSource, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
110 static plResult EncodeFromVec2(const plVec2& vSource, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
111 static plResult EncodeFromVec3(const plVec3& vSource, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
112 static plResult EncodeFromVec4(const plVec4& vSource, plArrayPtr<plUInt8> dest, plGALResourceFormat::Enum destFormat);
113
114 static plResult DecodeToFloat(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, float& ref_fDest);
115 static plResult DecodeToVec2(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec2& ref_vDest);
116 static plResult DecodeToVec3(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec3& ref_vDest);
117 static plResult DecodeToVec4(plArrayPtr<const plUInt8> source, plGALResourceFormat::Enum sourceFormat, plVec4& ref_vDest);
118
120 static plResult GetPositionStream(const plMeshBufferResourceDescriptor& meshBufferDesc, const plVec3*& out_pPositions, plUInt32& out_uiElementStride);
121
123 static plResult GetPositionAndNormalStream(const plMeshBufferResourceDescriptor& meshBufferDesc, const plVec3*& out_pPositions, const plUInt8*& out_pNormals, plGALResourceFormat::Enum& out_normalFormat, plUInt32& out_uiElementStride);
124};
125
126#include <RendererCore/Meshes/Implementation/MeshBufferUtils_inl.h>
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition MeshBufferUtils.h:50
static plGALResourceFormat::Enum ToResourceFormat(Enum value)
Convert mesh texcoord precision to actual resource format.
Definition MeshBufferUtils_inl.h:27
Definition MeshBufferResource.h:33
Definition MeshBufferUtils.h:86
Definition MeshBufferUtils.h:10
static plGALResourceFormat::Enum ToResourceFormatNormal(Enum value)
Convert mesh normal precision to actual resource format used for normals.
Definition MeshBufferUtils_inl.h:3
static plGALResourceFormat::Enum ToResourceFormatTangent(Enum value)
Convert mesh normal precision to actual resource format used for tangents.
Definition MeshBufferUtils_inl.h:10
Definition MeshBufferUtils.h:32
static plGALResourceFormat::Enum ToResourceFormat(Enum value)
Convert mesh texcoord precision to actual resource format.
Definition MeshBufferUtils_inl.h:19
Definition MeshBufferUtils.h:70
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54