1 #ifndef __CMESH_BUFFER_H_INCLUDED__
2 #define __CMESH_BUFFER_H_INCLUDED__
8 #include <unordered_map>
31 virtual std::uint64_t
getID()
const override {
return ID; }
39 std::size_t bufferSize = 0;
47 buffer.resize(bufferSize);
48 std::size_t position = 0;
51 std::size_t customAttributeCount = 0;
60 std::memcpy(buffer.data() + position, &
PositionBuffer.at(i).x, size);
62 std::memcpy(buffer.data() + position, &
PositionBuffer.at(i).y, size);
64 std::memcpy(buffer.data() + position, &
PositionBuffer.at(i).z, size);
71 std::memcpy(buffer.data() + position, &
NormalBuffer.at(i).x, size);
73 std::memcpy(buffer.data() + position, &
NormalBuffer.at(i).y, size);
75 std::memcpy(buffer.data() + position, &
NormalBuffer.at(i).z, size);
82 std::memcpy(buffer.data() + position, &
ColorBuffer.at(i).x, size);
84 std::memcpy(buffer.data() + position, &
ColorBuffer.at(i).y, size);
86 std::memcpy(buffer.data() + position, &
ColorBuffer.at(i).z, size);
93 std::memcpy(buffer.data() + position, &
TCoordBuffer.at(i).x, size);
95 std::memcpy(buffer.data() + position, &
TCoordBuffer.at(i).y, size);
102 std::memcpy(buffer.data() + position, &
TangentBuffer.at(i).x, size);
104 std::memcpy(buffer.data() + position, &
TangentBuffer.at(i).y, size);
106 std::memcpy(buffer.data() + position, &
TangentBuffer.at(i).z, size);
137 std::memcpy(buffer.data() + position, &
BoneIDBuffer.at(i).x, size);
139 std::memcpy(buffer.data() + position, &
BoneIDBuffer.at(i).y, size);
141 std::memcpy(buffer.data() + position, &
BoneIDBuffer.at(i).z, size);
143 std::memcpy(buffer.data() + position, &
BoneIDBuffer.at(i).w, size);
150 std::memcpy(buffer.data() + position,
AttributeBuffer.at(i).data() + customAttributeCount++ * size, size);
198 virtual std::uint32_t
getIndex(std::size_t offset)
const override
243 for (std::uint32_t i=1; i < vsize; ++i)
251 virtual const glm::vec3&
getPosition(std::uint32_t i)
const override
257 virtual const glm::vec3&
getNormal(std::uint32_t i)
const override
263 virtual const glm::vec2&
getTCoords(std::uint32_t i)
const override
269 virtual const glm::vec3&
getTangent(std::uint32_t i)
const override
286 std::vector<S3DVertex>&& vertices,
287 std::vector<uint32_t>&& indices)
override
292 for (i = 0; i < vertices.size(); ++i)
296 ColorBuffer.push_back(std::move(vertices[i].Color));
297 TCoordBuffer.push_back(std::move(vertices[i].TextureCoords));
302 if (vertices[i].Attributes.empty() ==
false)
307 for (i = 0; i < indices.size(); ++i)
309 Indices.push_back(indices[i]+vertexCount);
318 virtual void appendAttribute(
const char* buffer,
const size_t size,
const size_t stride)
override
320 for (
size_t i = 0; i < size / stride; ++i)
322 std::vector<unsigned char> buf(buffer + i * stride, buffer + (i+1) * stride);
357 const std::uint64_t
ID;
370 std::unordered_map<video::PipelineHandle, std::vector<unsigned char>>
GPUBuffers;