Cogs.Core
MeshStreamsLayout.cpp
1#include <array>
2#include <cassert>
3
4#include "Rendering/VertexFormat.h"
5#include "Rendering/DataFormat.h"
6
7#include "MeshStreamsLayout.h"
8
9#include "Foundation/HashSequence.h"
10#include "Foundation/Logging/Logger.h"
11
13{
14 assert(numStreams <= maxStreams);
15
16 size_t result = Cogs::hash(numStreams);
17 for (size_t i = 0; i < numStreams; i++) {
18 const VertexFormat *format = VertexFormats::getVertexFormat(vertexFormats[i]);
19 result = Cogs::hash(getHash(*format), result);
20 }
21 hash = result;
22}
23
25{
26 LOG_DEBUG(logger, "+- MeshStreamsLayout numStreams=%u hash=%zu:", numStreams, hash);
27
28 for (size_t i = 0; i < numStreams; i++) {
29 if (vertexFormats[i]) {
30 const Cogs::VertexFormat* format = Cogs::VertexFormats::getVertexFormat(vertexFormats[i]);
31 if (!format->elements.empty()) {
32 for (size_t k = 0; k < format->elements.size(); k++) {
33 const Cogs::VertexElement& element = format->elements[k];
34 const Cogs::FormatInfo* formatInfo = Cogs::getFormatInfo(element.format);
35 LOG_DEBUG(logger, " +- strm=%zu:elmt=%zu: off=%2u step=%u %c %s %.*s:%u", i, k,
36 unsigned(element.offset),
37 unsigned(element.instanceStep),
38 element.inputType == Cogs::InputType::VertexData ? 'V' : 'I',
39 formatInfo->vName,
40 StringViewFormat(Cogs::getElementSemanticName(element.semantic)),
41 unsigned(element.semanticIndex));
42 }
43 }
44 else {
45 LOG_DEBUG(logger, " +- strm=%zu: <no elements>", i);
46 }
47 }
48 else {
49 LOG_DEBUG(logger, " +- strm=%zu: <no format>", i);
50 }
51 }
52}
Log implementation class.
Definition: LogManager.h:139
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.
Definition: HashFunctions.h:62
@ VertexData
Per vertex data.
VertexFormatHandle vertexFormats[maxStreams]
COGSCORE_DLL_API void updateHash()
void logLayout(Cogs::Logging::Log &logger) const
static constexpr size_t maxStreams
const char * vName
Name as a vertex format (using XYZW as channels).
Definition: DataFormat.h:261
Vertex element structure used to describe a single data element in a vertex for the input assembler.
Definition: VertexFormat.h:38
InputType inputType
Input type of the element, vertex or instance data.
Definition: VertexFormat.h:43
DataFormat format
Format of the element.
Definition: VertexFormat.h:40
uint16_t offset
Offset in bytes from the vertex position in memory.
Definition: VertexFormat.h:39
uint16_t semanticIndex
Index for the semantic mapping.
Definition: VertexFormat.h:42
ElementSemantic semantic
Semantic mapping of the element (position, normal, etc...).
Definition: VertexFormat.h:41
uint16_t instanceStep
Instance step factor.
Definition: VertexFormat.h:44
Vertex format structure used to describe a single vertex for the input assembler.
Definition: VertexFormat.h:60
std::vector< VertexElement > elements
Vector containing all vertex elements of this format.
Definition: VertexFormat.h:62