mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-02 20:43:35 +00:00
ModelBuffer tracks more blob info;
This commit is contained in:
parent
ff680f7882
commit
bfa155a103
|
@ -103,9 +103,11 @@ typedef union {
|
||||||
} AttributeData;
|
} AttributeData;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char* data;
|
uint32_t blob;
|
||||||
|
size_t offset;
|
||||||
size_t size;
|
size_t size;
|
||||||
size_t stride;
|
size_t stride;
|
||||||
|
char* data;
|
||||||
} ModelBuffer;
|
} ModelBuffer;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -507,8 +507,8 @@ ModelData* lovrModelDataInitGltf(ModelData* model, Blob* source, ModelDataIO* io
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
for (int k = (token++)->size; k > 0; k--) {
|
for (int k = (token++)->size; k > 0; k--) {
|
||||||
gltfString key = NOM_STR(json, token);
|
gltfString key = NOM_STR(json, token);
|
||||||
if (STR_EQ(key, "buffer")) { buffer->data = model->blobs[NOM_INT(json, token)]->data; }
|
if (STR_EQ(key, "buffer")) { buffer->blob = NOM_INT(json, token); }
|
||||||
else if (STR_EQ(key, "byteOffset")) { offset = NOM_INT(json, token); }
|
else if (STR_EQ(key, "byteOffset")) { buffer->offset = NOM_INT(json, token); }
|
||||||
else if (STR_EQ(key, "byteLength")) { buffer->size = NOM_INT(json, token); }
|
else if (STR_EQ(key, "byteLength")) { buffer->size = NOM_INT(json, token); }
|
||||||
else if (STR_EQ(key, "byteStride")) { buffer->stride = NOM_INT(json, token); }
|
else if (STR_EQ(key, "byteStride")) { buffer->stride = NOM_INT(json, token); }
|
||||||
else { token += NOM_VALUE(json, token); }
|
else { token += NOM_VALUE(json, token); }
|
||||||
|
@ -516,10 +516,10 @@ ModelData* lovrModelDataInitGltf(ModelData* model, Blob* source, ModelDataIO* io
|
||||||
|
|
||||||
// If this is the glb binary data, increment the offset to account for the file header
|
// If this is the glb binary data, increment the offset to account for the file header
|
||||||
if (buffer->data && buffer->data == source->data && glb) {
|
if (buffer->data && buffer->data == source->data && glb) {
|
||||||
offset += binOffset;
|
buffer->offset += binOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->data = (char*) buffer->data + offset;
|
buffer->data = (char*) model->blobs[buffer->blob]->data + buffer->offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,12 +256,14 @@ ModelData* lovrModelDataInitObj(ModelData* model, Blob* source, ModelDataIO* io)
|
||||||
model->blobs[1] = lovrBlobCreate(indexBlob.data, indexBlob.length * sizeof(int), "obj index data");
|
model->blobs[1] = lovrBlobCreate(indexBlob.data, indexBlob.length * sizeof(int), "obj index data");
|
||||||
|
|
||||||
model->buffers[0] = (ModelBuffer) {
|
model->buffers[0] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
.data = model->blobs[0]->data,
|
.data = model->blobs[0]->data,
|
||||||
.size = model->blobs[0]->size,
|
.size = model->blobs[0]->size,
|
||||||
.stride = 8 * sizeof(float)
|
.stride = 8 * sizeof(float)
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[1] = (ModelBuffer) {
|
model->buffers[1] = (ModelBuffer) {
|
||||||
|
.blob = 1,
|
||||||
.data = model->blobs[1]->data,
|
.data = model->blobs[1]->data,
|
||||||
.size = model->blobs[1]->size,
|
.size = model->blobs[1]->size,
|
||||||
.stride = sizeof(int)
|
.stride = sizeof(int)
|
||||||
|
|
|
@ -675,8 +675,19 @@ static ModelData* openvr_newModelData(Device device, bool animated) {
|
||||||
memcpy(vertices, renderModels[i]->rVertexData, vertexCount * vertexSize);
|
memcpy(vertices, renderModels[i]->rVertexData, vertexCount * vertexSize);
|
||||||
memcpy(indices, renderModels[i]->rIndexData, indexCount * sizeof(uint16_t));
|
memcpy(indices, renderModels[i]->rIndexData, indexCount * sizeof(uint16_t));
|
||||||
|
|
||||||
model->buffers[2 * i + 0] = (ModelBuffer) { .data = (char*) vertices, .size = vertexCount * vertexSize, .stride = vertexSize };
|
model->buffers[2 * i + 0] = (ModelBuffer) {
|
||||||
model->buffers[2 * i + 1] = (ModelBuffer) { .data = (char*) indices, .size = indexCount * sizeof(uint16_t), .stride = sizeof(uint16_t) };
|
.blob = 0,
|
||||||
|
.size = vertexCount * vertexSize,
|
||||||
|
.stride = vertexSize
|
||||||
|
.data = (char*) vertices
|
||||||
|
};
|
||||||
|
|
||||||
|
model->buffers[2 * i + 1] = (ModelBuffer) {
|
||||||
|
.blob = 1,
|
||||||
|
.size = indexCount * sizeof(uint16_t),
|
||||||
|
.stride = sizeof(uint16_t),
|
||||||
|
.data = (char*) indices
|
||||||
|
};
|
||||||
|
|
||||||
vertices += vertexCount * vertexSize / sizeof(float);
|
vertices += vertexCount * vertexSize / sizeof(float);
|
||||||
indices += indexCount;
|
indices += indexCount;
|
||||||
|
|
|
@ -480,36 +480,48 @@ static struct ModelData* vrapi_newModelData(Device device, bool animated) {
|
||||||
model->blobs[1] = lovrBlobCreate(inverseBindMatrices, model->jointCount * 16 * sizeof(float), "Hand Mesh Inverse Bind Matrices");
|
model->blobs[1] = lovrBlobCreate(inverseBindMatrices, model->jointCount * 16 * sizeof(float), "Hand Mesh Inverse Bind Matrices");
|
||||||
|
|
||||||
model->buffers[0] = (ModelBuffer) {
|
model->buffers[0] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->vertexPositions - (char*) mesh,
|
||||||
.data = (char*) mesh->VertexPositions,
|
.data = (char*) mesh->VertexPositions,
|
||||||
.size = sizeof(mesh->VertexPositions),
|
.size = sizeof(mesh->VertexPositions),
|
||||||
.stride = sizeof(mesh->VertexPositions[0])
|
.stride = sizeof(mesh->VertexPositions[0])
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[1] = (ModelBuffer) {
|
model->buffers[1] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->vertexNormals - (char*) mesh,
|
||||||
.data = (char*) mesh->VertexNormals,
|
.data = (char*) mesh->VertexNormals,
|
||||||
.size = sizeof(mesh->VertexNormals),
|
.size = sizeof(mesh->VertexNormals),
|
||||||
.stride = sizeof(mesh->VertexNormals[0]),
|
.stride = sizeof(mesh->VertexNormals[0]),
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[2] = (ModelBuffer) {
|
model->buffers[2] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->vertexUV0 - (char*) mesh,
|
||||||
.data = (char*) mesh->VertexUV0,
|
.data = (char*) mesh->VertexUV0,
|
||||||
.size = sizeof(mesh->VertexUV0),
|
.size = sizeof(mesh->VertexUV0),
|
||||||
.stride = sizeof(mesh->VertexUV0[0]),
|
.stride = sizeof(mesh->VertexUV0[0]),
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[3] = (ModelBuffer) {
|
model->buffers[3] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->BlendIndices - (char*) mesh,
|
||||||
.data = (char*) mesh->BlendIndices,
|
.data = (char*) mesh->BlendIndices,
|
||||||
.size = sizeof(mesh->BlendIndices),
|
.size = sizeof(mesh->BlendIndices),
|
||||||
.stride = sizeof(mesh->BlendIndices[0]),
|
.stride = sizeof(mesh->BlendIndices[0]),
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[4] = (ModelBuffer) {
|
model->buffers[4] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->BlendWeights - (char*) mesh,
|
||||||
.data = (char*) mesh->BlendWeights,
|
.data = (char*) mesh->BlendWeights,
|
||||||
.size = sizeof(mesh->BlendWeights),
|
.size = sizeof(mesh->BlendWeights),
|
||||||
.stride = sizeof(mesh->BlendWeights[0]),
|
.stride = sizeof(mesh->BlendWeights[0]),
|
||||||
};
|
};
|
||||||
|
|
||||||
model->buffers[5] = (ModelBuffer) {
|
model->buffers[5] = (ModelBuffer) {
|
||||||
|
.blob = 0,
|
||||||
|
.offset = (char*) mesh->Indices - (char*) mesh,
|
||||||
.data = (char*) mesh->Indices,
|
.data = (char*) mesh->Indices,
|
||||||
.size = sizeof(mesh->Indices),
|
.size = sizeof(mesh->Indices),
|
||||||
.stride = sizeof(mesh->Indices[0])
|
.stride = sizeof(mesh->Indices[0])
|
||||||
|
|
Loading…
Reference in a new issue