mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 06:24:43 +02:00
working on getting the Model payload to use model::Mesh
This commit is contained in:
parent
b8ea83099a
commit
edb485cb0f
4 changed files with 40 additions and 17 deletions
|
@ -415,29 +415,34 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
|
|||
|
||||
if (normalsSize) {
|
||||
mesh->addAttribute(gpu::Stream::NORMAL,
|
||||
model::BufferView(attribBuffer, normalsOffset, normalsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
|
||||
model::BufferView(attribBuffer, normalsOffset, normalsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
|
||||
}
|
||||
if (tangentsSize) {
|
||||
mesh->addAttribute(gpu::Stream::TANGENT,
|
||||
model::BufferView(attribBuffer, tangentsOffset, tangentsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
|
||||
model::BufferView(attribBuffer, tangentsOffset, tangentsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
|
||||
}
|
||||
if (colorsSize) {
|
||||
mesh->addAttribute(gpu::Stream::COLOR,
|
||||
model::BufferView(attribBuffer, colorsOffset, colorsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB)));
|
||||
model::BufferView(attribBuffer, colorsOffset, colorsSize,
|
||||
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB)));
|
||||
}
|
||||
if (texCoordsSize) {
|
||||
mesh->addAttribute(gpu::Stream::TEXCOORD,
|
||||
model::BufferView( attribBuffer, texCoordsOffset, texCoordsSize,
|
||||
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
|
||||
model::BufferView( attribBuffer, texCoordsOffset, texCoordsSize,
|
||||
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
|
||||
}
|
||||
if (texCoords1Size) {
|
||||
mesh->addAttribute( gpu::Stream::TEXCOORD1,
|
||||
model::BufferView(attribBuffer, texCoords1Offset, texCoords1Size,
|
||||
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
|
||||
} else if (texCoordsSize) {
|
||||
mesh->addAttribute(gpu::Stream::TEXCOORD1,
|
||||
model::BufferView(attribBuffer, texCoords1Offset, texCoords1Size,
|
||||
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
|
||||
model::BufferView(attribBuffer, texCoordsOffset, texCoordsSize,
|
||||
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
|
||||
}
|
||||
|
||||
if (clusterIndicesSize) {
|
||||
mesh->addAttribute(gpu::Stream::SKIN_CLUSTER_INDEX,
|
||||
model::BufferView(attribBuffer, clusterIndicesOffset, clusterIndicesSize,
|
||||
|
|
|
@ -92,3 +92,16 @@ void BufferStream::addBuffer(const BufferPointer& buffer, Offset offset, Offset
|
|||
_offsets.push_back(offset);
|
||||
_strides.push_back(stride);
|
||||
}
|
||||
|
||||
BufferStream BufferStream::makeRangedStream(uint32 offset, uint32 count) const {
|
||||
if ((offset < _buffers.size())) {
|
||||
auto rangeSize = std::min(count, (uint32)(_buffers.size() - offset));
|
||||
BufferStream newStream;
|
||||
newStream._buffers.insert(newStream._buffers.begin(), _buffers.begin() + offset, _buffers.begin() + offset + rangeSize);
|
||||
newStream._offsets.insert(newStream._offsets.begin(), _offsets.begin() + offset, _offsets.begin() + offset + rangeSize);
|
||||
newStream._strides.insert(newStream._strides.begin(), _strides.begin() + offset, _strides.begin() + offset + rangeSize);
|
||||
return newStream;
|
||||
}
|
||||
|
||||
return BufferStream();
|
||||
}
|
||||
|
|
|
@ -139,7 +139,9 @@ public:
|
|||
const Buffers& getBuffers() const { return _buffers; }
|
||||
const Offsets& getOffsets() const { return _offsets; }
|
||||
const Strides& getStrides() const { return _strides; }
|
||||
uint8 getNumBuffers() const { return _buffers.size(); }
|
||||
uint32 getNumBuffers() const { return _buffers.size(); }
|
||||
|
||||
BufferStream makeRangedStream(uint32 offset, uint32 count = -1) const;
|
||||
|
||||
protected:
|
||||
Buffers _buffers;
|
||||
|
|
|
@ -1573,14 +1573,17 @@ void Model::renderPart(RenderArgs* args, int meshIndex, int partIndex, int shape
|
|||
// batch.setInputFormat(networkMesh._vertexFormat);
|
||||
// batch.setInputStream(0, *networkMesh._vertexStream);
|
||||
} else {
|
||||
return;
|
||||
batch.setIndexBuffer(gpu::UINT32, (networkMesh._indexBuffer), 0);
|
||||
batch.setInputFormat((drawMesh->getVertexFormat()));
|
||||
auto inputStream = drawMesh->makeBufferStream();
|
||||
batch.setIndexBuffer(gpu::UINT32, (networkMesh._indexBuffer), 0);
|
||||
batch.setInputFormat((drawMesh->getVertexFormat()));
|
||||
|
||||
batch.setInputStream(0, inputStream);
|
||||
batch.setInputBuffer(0, _blendedVertexBuffers[meshIndex], 0, sizeof(glm::vec3));
|
||||
batch.setInputBuffer(1, _blendedVertexBuffers[meshIndex], vertexCount * sizeof(glm::vec3), sizeof(glm::vec3));
|
||||
|
||||
auto inputStream = drawMesh->makeBufferStream().makeRangedStream(2);
|
||||
|
||||
/* batch.setInputFormat(networkMesh._vertexFormat);
|
||||
batch.setInputStream(2, inputStream);
|
||||
|
||||
/* batch.setInputFormat(networkMesh._vertexFormat);
|
||||
|
||||
batch.setInputBuffer(0, _blendedVertexBuffers[meshIndex], 0, sizeof(glm::vec3));
|
||||
batch.setInputBuffer(1, _blendedVertexBuffers[meshIndex], vertexCount * sizeof(glm::vec3), sizeof(glm::vec3));
|
||||
|
|
Loading…
Reference in a new issue