mirror of https://github.com/bjornbytes/lovr.git
Re-add Model:getMaterial and Model:setMaterial;
This commit is contained in:
parent
7c6accf856
commit
69b6e599e9
|
@ -28,6 +28,24 @@ int l_lovrModelSetAnimator(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrModelGetMaterial(lua_State* L) {
|
||||
Model* model = luax_checktype(L, 1, Model);
|
||||
Material* material = lovrModelGetMaterial(model);
|
||||
luax_pushobject(L, material);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrModelSetMaterial(lua_State* L) {
|
||||
Model* model = luax_checktype(L, 1, Model);
|
||||
if (lua_isnoneornil(L, 2)) {
|
||||
lovrModelSetMaterial(model, NULL);
|
||||
} else {
|
||||
Material* material = luax_checktype(L, 2, Material);
|
||||
lovrModelSetMaterial(model, material);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrModelGetAABB(lua_State* L) {
|
||||
Model* model = luax_checktype(L, 1, Model);
|
||||
float aabb[6];
|
||||
|
@ -42,6 +60,8 @@ const luaL_Reg lovrModel[] = {
|
|||
{ "draw", l_lovrModelDraw },
|
||||
{ "getAnimator", l_lovrModelGetAnimator },
|
||||
{ "setAnimator", l_lovrModelSetAnimator },
|
||||
{ "getMaterial", l_lovrModelGetMaterial },
|
||||
{ "setMaterial", l_lovrModelSetMaterial },
|
||||
{ "getAABB", l_lovrModelGetAABB },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -42,6 +42,11 @@ static void renderNode(Model* model, uint32_t nodeIndex, int instances) {
|
|||
for (uint32_t i = 0; i < node->primitiveCount; i++) {
|
||||
ModelPrimitive* primitive = &model->data->primitives[node->primitiveIndex + i];
|
||||
Mesh* mesh = model->meshes[node->primitiveIndex + i];
|
||||
Material* material = primitive->material >= 0 ? model->materials[primitive->material] : NULL;
|
||||
|
||||
if (model->userMaterial) {
|
||||
material = model->userMaterial;
|
||||
}
|
||||
|
||||
uint32_t rangeStart, rangeCount;
|
||||
lovrMeshGetDrawRange(mesh, &rangeStart, &rangeCount);
|
||||
|
@ -57,7 +62,7 @@ static void renderNode(Model* model, uint32_t nodeIndex, int instances) {
|
|||
.pose = node->skin >= 0 ? pose : NULL
|
||||
},
|
||||
.transform = globalTransform,
|
||||
.material = primitive->material >= 0 ? model->materials[primitive->material] : NULL
|
||||
.material = material
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -206,6 +211,16 @@ void lovrModelSetAnimator(Model* model, Animator* animator) {
|
|||
}
|
||||
}
|
||||
|
||||
Material* lovrModelGetMaterial(Model* model) {
|
||||
return model->userMaterial;
|
||||
}
|
||||
|
||||
void lovrModelSetMaterial(Model* model, Material* material) {
|
||||
lovrRetain(material);
|
||||
lovrRelease(model->userMaterial);
|
||||
model->userMaterial = material;
|
||||
}
|
||||
|
||||
static void applyAABB(Model* model, int nodeIndex, float aabb[6]) {
|
||||
ModelNode* node = &model->data->nodes[nodeIndex];
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ typedef struct {
|
|||
Mesh** meshes;
|
||||
Texture** textures;
|
||||
Material** materials;
|
||||
Material* userMaterial;
|
||||
float* globalNodeTransforms;
|
||||
} Model;
|
||||
|
||||
|
@ -23,4 +24,6 @@ void lovrModelDestroy(void* ref);
|
|||
void lovrModelDraw(Model* model, mat4 transform, int instances);
|
||||
Animator* lovrModelGetAnimator(Model* model);
|
||||
void lovrModelSetAnimator(Model* model, Animator* animator);
|
||||
Material* lovrModelGetMaterial(Model* model);
|
||||
void lovrModelSetMaterial(Model* model, Material* material);
|
||||
void lovrModelGetAABB(Model* model, float aabb[6]);
|
||||
|
|
Loading…
Reference in New Issue