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); lovrShaderSetMatrices(shader, "lovrNormalMatrices", normalMatrices, 0, 18);
} }
float* pose = lovrMeshGetPose(mesh); if (draw->pose) {
if (pose) { lovrShaderSetMatrices(shader, "lovrPose", draw->pose, 0, MAX_BONES * 16);
lovrShaderSetMatrices(shader, "lovrPose", pose, 0, MAX_BONES * 16);
} else { } else {
lovrShaderSetMatrices(shader, "lovrPose", (float[16]) MAT4_IDENTITY, 0, 16); lovrShaderSetMatrices(shader, "lovrPose", (float[16]) MAT4_IDENTITY, 0, 16);
} }

View File

@ -134,6 +134,7 @@ typedef struct {
mat4 transform; mat4 transform;
bool forceMono; bool forceMono;
int instances; int instances;
float* pose;
} DrawCommand; } DrawCommand;
typedef struct { 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); void lovrMeshSetDrawRange(Mesh* mesh, uint32_t start, uint32_t count);
Material* lovrMeshGetMaterial(Mesh* mesh); Material* lovrMeshGetMaterial(Mesh* mesh);
void lovrMeshSetMaterial(Mesh* mesh, Material* material); 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); VertexPointer lovrMeshMapVertices(Mesh* mesh, uint32_t start, uint32_t count, bool read, bool write);
void lovrMeshUnmapVertices(Mesh* mesh); void lovrMeshUnmapVertices(Mesh* mesh);
IndexPointer lovrMeshReadIndices(Mesh* mesh, uint32_t* count, size_t* size); 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); lovrMeshSetDrawRange(model->mesh, primitive->drawStart, primitive->drawCount);
lovrMeshSetPose(model->mesh, (float*) model->pose);
lovrGraphicsDraw(&(DrawCommand) { lovrGraphicsDraw(&(DrawCommand) {
.transform = model->nodeTransforms[nodeIndex], .transform = model->nodeTransforms[nodeIndex],
.mesh = model->mesh, .mesh = model->mesh,
.material = lovrMeshGetMaterial(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); lovrGraphicsMatrixTransform(transform);
renderNode(model, 0, instances); renderNode(model, 0, instances);
lovrGraphicsPop(); lovrGraphicsPop();
lovrMeshSetPose(model->mesh, NULL);
} }
Animator* lovrModelGetAnimator(Model* model) { Animator* lovrModelGetAnimator(Model* model) {

View File

@ -168,7 +168,6 @@ struct Mesh {
GLuint vbo; GLuint vbo;
GLuint ibo; GLuint ibo;
Material* material; Material* material;
float* pose;
map_attachment_t attachments; map_attachment_t attachments;
MeshAttachment layout[MAX_ATTACHMENTS]; MeshAttachment layout[MAX_ATTACHMENTS];
bool isAttachment; 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) { VertexPointer lovrMeshMapVertices(Mesh* mesh, uint32_t start, uint32_t count, bool read, bool write) {
if (write) { if (write) {
mesh->dirtyStart = MIN(mesh->dirtyStart, start); mesh->dirtyStart = MIN(mesh->dirtyStart, start);