| 1329 | } |
| 1330 | |
| 1331 | void PBR_Renderer::GetVSInputStructAndLayout(PSO_FLAGS PSOFlags, |
| 1332 | std::string& VSInputStruct, |
| 1333 | InputLayoutDescX& InputLayout) const |
| 1334 | { |
| 1335 | //struct VSInput |
| 1336 | //{ |
| 1337 | // float3 Pos : ATTRIB0; |
| 1338 | // float3 Normal : ATTRIB1; |
| 1339 | // float2 UV0 : ATTRIB2; |
| 1340 | // float2 UV1 : ATTRIB3; |
| 1341 | // float4 Joint0 : ATTRIB4; |
| 1342 | // float4 Weight0 : ATTRIB5; |
| 1343 | // float4 Color : ATTRIB6; // May be float3 |
| 1344 | // float3 Tangent : ATTRIB7; |
| 1345 | //}; |
| 1346 | struct VSAttribInfo |
| 1347 | { |
| 1348 | const Uint32 Index; |
| 1349 | const char* const Name; |
| 1350 | const VALUE_TYPE Type; |
| 1351 | const Uint32 NumComponents; |
| 1352 | const PSO_FLAGS Flag; |
| 1353 | }; |
| 1354 | |
| 1355 | InputLayout = m_Settings.InputLayout; |
| 1356 | InputLayout.ResolveAutoOffsetsAndStrides(); |
| 1357 | |
| 1358 | Uint32 NumColorComp = 4; |
| 1359 | if (PSOFlags & PSO_FLAG_USE_VERTEX_COLORS) |
| 1360 | { |
| 1361 | for (Uint32 i = 0; i < InputLayout.GetNumElements(); ++i) |
| 1362 | { |
| 1363 | const auto& Elem = InputLayout[i]; |
| 1364 | if (Elem.InputIndex == VERTEX_ATTRIB_ID_COLOR) |
| 1365 | { |
| 1366 | NumColorComp = Elem.NumComponents; |
| 1367 | DEV_CHECK_ERR(NumColorComp == 3 || NumColorComp == 4, "Color attribute must have 3 or 4 components"); |
| 1368 | break; |
| 1369 | } |
| 1370 | } |
| 1371 | } |
| 1372 | |
| 1373 | const std::array<VSAttribInfo, 8> VSAttribs = // |
| 1374 | { |
| 1375 | // clang-format off |
| 1376 | VSAttribInfo{VERTEX_ATTRIB_ID_POSITION, "Pos", VT_FLOAT32, 3, PSO_FLAG_NONE}, |
| 1377 | VSAttribInfo{VERTEX_ATTRIB_ID_NORMAL, "Normal", VT_FLOAT32, 3, PSO_FLAG_USE_VERTEX_NORMALS}, |
| 1378 | VSAttribInfo{VERTEX_ATTRIB_ID_TEXCOORD0, "UV0", VT_FLOAT32, 2, PSO_FLAG_USE_TEXCOORD0}, |
| 1379 | VSAttribInfo{VERTEX_ATTRIB_ID_TEXCOORD1, "UV1", VT_FLOAT32, 2, PSO_FLAG_USE_TEXCOORD1}, |
| 1380 | VSAttribInfo{VERTEX_ATTRIB_ID_JOINTS, "Joint0", VT_FLOAT32, 4, PSO_FLAG_USE_JOINTS}, |
| 1381 | VSAttribInfo{VERTEX_ATTRIB_ID_WEIGHTS, "Weight0", VT_FLOAT32, 4, PSO_FLAG_USE_JOINTS}, |
| 1382 | VSAttribInfo{VERTEX_ATTRIB_ID_COLOR, "Color", VT_FLOAT32, NumColorComp, PSO_FLAG_USE_VERTEX_COLORS}, |
| 1383 | VSAttribInfo{VERTEX_ATTRIB_ID_TANGENT, "Tangent", VT_FLOAT32, 3, PSO_FLAG_USE_VERTEX_TANGENTS} |
| 1384 | // clang-format on |
| 1385 | }; |
| 1386 | |
| 1387 | std::stringstream ss; |
| 1388 | ss << "struct VSInput" << std::endl |
nothing calls this directly
no test coverage detected