working on getting the Model payload to use model::Mesh

This commit is contained in:
samcake 2015-10-02 12:24:41 -07:00
parent b8ea83099a
commit edb485cb0f
4 changed files with 40 additions and 17 deletions

View file

@ -415,29 +415,34 @@ void FBXReader::buildModelMesh(ExtractedMesh& extracted, const QString& url) {
if (normalsSize) { if (normalsSize) {
mesh->addAttribute(gpu::Stream::NORMAL, mesh->addAttribute(gpu::Stream::NORMAL,
model::BufferView(attribBuffer, normalsOffset, normalsSize, model::BufferView(attribBuffer, normalsOffset, normalsSize,
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ))); gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
} }
if (tangentsSize) { if (tangentsSize) {
mesh->addAttribute(gpu::Stream::TANGENT, mesh->addAttribute(gpu::Stream::TANGENT,
model::BufferView(attribBuffer, tangentsOffset, tangentsSize, model::BufferView(attribBuffer, tangentsOffset, tangentsSize,
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ))); gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)));
} }
if (colorsSize) { if (colorsSize) {
mesh->addAttribute(gpu::Stream::COLOR, mesh->addAttribute(gpu::Stream::COLOR,
model::BufferView(attribBuffer, colorsOffset, colorsSize, model::BufferView(attribBuffer, colorsOffset, colorsSize,
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB))); gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RGB)));
} }
if (texCoordsSize) { if (texCoordsSize) {
mesh->addAttribute(gpu::Stream::TEXCOORD, mesh->addAttribute(gpu::Stream::TEXCOORD,
model::BufferView( attribBuffer, texCoordsOffset, texCoordsSize, model::BufferView( attribBuffer, texCoordsOffset, texCoordsSize,
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV))); gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
} }
if (texCoords1Size) { 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, mesh->addAttribute(gpu::Stream::TEXCOORD1,
model::BufferView(attribBuffer, texCoords1Offset, texCoords1Size, model::BufferView(attribBuffer, texCoordsOffset, texCoordsSize,
gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV))); gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV)));
} }
if (clusterIndicesSize) { if (clusterIndicesSize) {
mesh->addAttribute(gpu::Stream::SKIN_CLUSTER_INDEX, mesh->addAttribute(gpu::Stream::SKIN_CLUSTER_INDEX,
model::BufferView(attribBuffer, clusterIndicesOffset, clusterIndicesSize, model::BufferView(attribBuffer, clusterIndicesOffset, clusterIndicesSize,

View file

@ -92,3 +92,16 @@ void BufferStream::addBuffer(const BufferPointer& buffer, Offset offset, Offset
_offsets.push_back(offset); _offsets.push_back(offset);
_strides.push_back(stride); _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();
}

View file

@ -139,7 +139,9 @@ public:
const Buffers& getBuffers() const { return _buffers; } const Buffers& getBuffers() const { return _buffers; }
const Offsets& getOffsets() const { return _offsets; } const Offsets& getOffsets() const { return _offsets; }
const Strides& getStrides() const { return _strides; } 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: protected:
Buffers _buffers; Buffers _buffers;

View file

@ -1573,14 +1573,17 @@ void Model::renderPart(RenderArgs* args, int meshIndex, int partIndex, int shape
// batch.setInputFormat(networkMesh._vertexFormat); // batch.setInputFormat(networkMesh._vertexFormat);
// batch.setInputStream(0, *networkMesh._vertexStream); // batch.setInputStream(0, *networkMesh._vertexStream);
} else { } else {
return; batch.setIndexBuffer(gpu::UINT32, (networkMesh._indexBuffer), 0);
batch.setIndexBuffer(gpu::UINT32, (networkMesh._indexBuffer), 0); batch.setInputFormat((drawMesh->getVertexFormat()));
batch.setInputFormat((drawMesh->getVertexFormat()));
auto inputStream = drawMesh->makeBufferStream();
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(0, _blendedVertexBuffers[meshIndex], 0, sizeof(glm::vec3));
batch.setInputBuffer(1, _blendedVertexBuffers[meshIndex], vertexCount * sizeof(glm::vec3), sizeof(glm::vec3)); batch.setInputBuffer(1, _blendedVertexBuffers[meshIndex], vertexCount * sizeof(glm::vec3), sizeof(glm::vec3));