mirror of https://github.com/bjornbytes/lovr.git
Move pose from Mesh to DrawCommand;
This commit is contained in:
parent
0a6de472ae
commit
a8361677f5
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue