Move pose from Mesh to DrawCommand;

This commit is contained in:
bjorn 2018-12-05 10:22:12 -08:00
parent 0a6de472ae
commit a8361677f5
5 changed files with 5 additions and 17 deletions

View File

@ -424,9 +424,8 @@ void lovrGraphicsDraw(DrawCommand* draw) {
lovrShaderSetMatrices(shader, "lovrNormalMatrices", normalMatrices, 0, 18);
}
float* pose = lovrMeshGetPose(mesh);
if (pose) {
lovrShaderSetMatrices(shader, "lovrPose", pose, 0, MAX_BONES * 16);
if (draw->pose) {
lovrShaderSetMatrices(shader, "lovrPose", draw->pose, 0, MAX_BONES * 16);
} else {
lovrShaderSetMatrices(shader, "lovrPose", (float[16]) MAT4_IDENTITY, 0, 16);
}

View File

@ -134,6 +134,7 @@ typedef struct {
mat4 transform;
bool forceMono;
int instances;
float* pose;
} DrawCommand;
typedef struct {

View File

@ -35,8 +35,6 @@ void lovrMeshGetDrawRange(Mesh* mesh, uint32_t* start, uint32_t* count);
void lovrMeshSetDrawRange(Mesh* mesh, uint32_t start, uint32_t count);
Material* lovrMeshGetMaterial(Mesh* mesh);
void lovrMeshSetMaterial(Mesh* mesh, Material* material);
float* lovrMeshGetPose(Mesh* mesh);
void lovrMeshSetPose(Mesh* mesh, float* pose);
VertexPointer lovrMeshMapVertices(Mesh* mesh, uint32_t start, uint32_t count, bool read, bool write);
void lovrMeshUnmapVertices(Mesh* mesh);
IndexPointer lovrMeshReadIndices(Mesh* mesh, uint32_t* count, size_t* size);

View File

@ -39,12 +39,12 @@ static void renderNode(Model* model, int nodeIndex, int instances) {
}
lovrMeshSetDrawRange(model->mesh, primitive->drawStart, primitive->drawCount);
lovrMeshSetPose(model->mesh, (float*) model->pose);
lovrGraphicsDraw(&(DrawCommand) {
.transform = model->nodeTransforms[nodeIndex],
.mesh = model->mesh,
.material = lovrMeshGetMaterial(model->mesh),
.instances = instances
.instances = instances,
.pose = (float*) model->pose
});
}
}
@ -180,7 +180,6 @@ void lovrModelDraw(Model* model, mat4 transform, int instances) {
lovrGraphicsMatrixTransform(transform);
renderNode(model, 0, instances);
lovrGraphicsPop();
lovrMeshSetPose(model->mesh, NULL);
}
Animator* lovrModelGetAnimator(Model* model) {

View File

@ -168,7 +168,6 @@ struct Mesh {
GLuint vbo;
GLuint ibo;
Material* material;
float* pose;
map_attachment_t attachments;
MeshAttachment layout[MAX_ATTACHMENTS];
bool isAttachment;
@ -2404,14 +2403,6 @@ void lovrMeshSetMaterial(Mesh* mesh, Material* material) {
}
}
float* lovrMeshGetPose(Mesh* mesh) {
return mesh->pose;
}
void lovrMeshSetPose(Mesh* mesh, float* pose) {
mesh->pose = pose;
}
VertexPointer lovrMeshMapVertices(Mesh* mesh, uint32_t start, uint32_t count, bool read, bool write) {
if (write) {
mesh->dirtyStart = MIN(mesh->dirtyStart, start);