mirror of https://github.com/bjornbytes/lovr.git
lovrGraphicsDrawMesh;
This commit is contained in:
parent
b3080ae5d9
commit
fe21de403b
|
@ -79,24 +79,7 @@ static int l_lovrMeshDraw(lua_State* L) {
|
|||
float transform[16];
|
||||
int index = luax_readmat4(L, 2, transform, 1);
|
||||
int instances = luaL_optinteger(L, index, 1);
|
||||
uint32_t vertexCount = lovrMeshGetVertexCount(mesh);
|
||||
uint32_t indexCount = lovrMeshGetIndexCount(mesh);
|
||||
uint32_t defaultCount = indexCount > 0 ? indexCount : vertexCount;
|
||||
uint32_t rangeStart, rangeCount;
|
||||
lovrMeshGetDrawRange(mesh, &rangeStart, &rangeCount);
|
||||
lovrGraphicsBatch(&(BatchRequest) {
|
||||
.type = BATCH_MESH,
|
||||
.params.mesh = {
|
||||
.object = mesh,
|
||||
.mode = lovrMeshGetDrawMode(mesh),
|
||||
.rangeStart = rangeStart,
|
||||
.rangeCount = rangeCount ? rangeCount : defaultCount,
|
||||
.instances = instances
|
||||
},
|
||||
.drawMode = lovrMeshGetDrawMode(mesh),
|
||||
.transform = transform,
|
||||
.material = lovrMeshGetMaterial(mesh)
|
||||
});
|
||||
lovrGraphicsDrawMesh(mesh, transform, instances, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1195,3 +1195,29 @@ void lovrGraphicsFill(Texture* texture, float u, float v, float w, float h) {
|
|||
}, 32 * sizeof(float));
|
||||
}
|
||||
}
|
||||
|
||||
void lovrGraphicsDrawMesh(Mesh* mesh, mat4 transform, uint32_t instances, float* pose) {
|
||||
uint32_t vertexCount = lovrMeshGetVertexCount(mesh);
|
||||
uint32_t indexCount = lovrMeshGetIndexCount(mesh);
|
||||
uint32_t defaultCount = indexCount > 0 ? indexCount : vertexCount;
|
||||
uint32_t rangeStart, rangeCount;
|
||||
lovrMeshGetDrawRange(mesh, &rangeStart, &rangeCount);
|
||||
rangeCount = rangeCount > 0 ? rangeCount : defaultCount;
|
||||
DrawMode mode = lovrMeshGetDrawMode(mesh);
|
||||
Material* material = lovrMeshGetMaterial(mesh);
|
||||
|
||||
lovrGraphicsBatch(&(BatchRequest) {
|
||||
.type = BATCH_MESH,
|
||||
.params.mesh = {
|
||||
.object = mesh,
|
||||
.mode = mode,
|
||||
.rangeStart = rangeStart,
|
||||
.rangeCount = rangeCount,
|
||||
.instances = instances,
|
||||
.pose = pose
|
||||
},
|
||||
.drawMode = mode,
|
||||
.transform = transform,
|
||||
.material = material
|
||||
});
|
||||
}
|
||||
|
|
|
@ -224,6 +224,7 @@ void lovrGraphicsSphere(struct Material* material, mat4 transform, int segments)
|
|||
void lovrGraphicsSkybox(struct Texture* texture, float angle, float ax, float ay, float az);
|
||||
void lovrGraphicsPrint(const char* str, size_t length, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
|
||||
void lovrGraphicsFill(struct Texture* texture, float u, float v, float w, float h);
|
||||
void lovrGraphicsDrawMesh(struct Mesh* mesh, mat4 transform, uint32_t instances, float* pose);
|
||||
#define lovrGraphicsStencil lovrGpuStencil
|
||||
#define lovrGraphicsCompute lovrGpuCompute
|
||||
|
||||
|
|
|
@ -53,28 +53,9 @@ static void renderNode(Model* model, uint32_t nodeIndex, uint32_t instances) {
|
|||
ModelPrimitive* primitive = &model->data->primitives[node->primitiveIndex + i];
|
||||
Mesh* mesh = model->meshes[node->primitiveIndex + i];
|
||||
Material* material = primitive->material == ~0u ? NULL : model->materials[primitive->material];
|
||||
|
||||
if (model->userMaterial) {
|
||||
material = model->userMaterial;
|
||||
}
|
||||
|
||||
uint32_t rangeStart, rangeCount;
|
||||
lovrMeshGetDrawRange(mesh, &rangeStart, &rangeCount);
|
||||
|
||||
lovrGraphicsBatch(&(BatchRequest) {
|
||||
.type = BATCH_MESH,
|
||||
.params.mesh = {
|
||||
.object = mesh,
|
||||
.mode = primitive->mode,
|
||||
.rangeStart = rangeStart,
|
||||
.rangeCount = rangeCount,
|
||||
.instances = instances,
|
||||
.pose = animated ? pose : NULL
|
||||
},
|
||||
.drawMode = primitive->mode,
|
||||
.transform = globalTransform,
|
||||
.material = material
|
||||
});
|
||||
lovrMeshSetMaterial(mesh, model->userMaterial ? model->userMaterial : material);
|
||||
lovrMeshSetDrawMode(mesh, primitive->mode);
|
||||
lovrGraphicsDrawMesh(mesh, globalTransform, instances, animated ? pose : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue