mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-03 21:13:42 +00:00
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;
|
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) {
|
int l_lovrModelGetAABB(lua_State* L) {
|
||||||
Model* model = luax_checktype(L, 1, Model);
|
Model* model = luax_checktype(L, 1, Model);
|
||||||
float aabb[6];
|
float aabb[6];
|
||||||
|
@ -42,6 +60,8 @@ const luaL_Reg lovrModel[] = {
|
||||||
{ "draw", l_lovrModelDraw },
|
{ "draw", l_lovrModelDraw },
|
||||||
{ "getAnimator", l_lovrModelGetAnimator },
|
{ "getAnimator", l_lovrModelGetAnimator },
|
||||||
{ "setAnimator", l_lovrModelSetAnimator },
|
{ "setAnimator", l_lovrModelSetAnimator },
|
||||||
|
{ "getMaterial", l_lovrModelGetMaterial },
|
||||||
|
{ "setMaterial", l_lovrModelSetMaterial },
|
||||||
{ "getAABB", l_lovrModelGetAABB },
|
{ "getAABB", l_lovrModelGetAABB },
|
||||||
{ NULL, NULL }
|
{ 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++) {
|
for (uint32_t i = 0; i < node->primitiveCount; i++) {
|
||||||
ModelPrimitive* primitive = &model->data->primitives[node->primitiveIndex + i];
|
ModelPrimitive* primitive = &model->data->primitives[node->primitiveIndex + i];
|
||||||
Mesh* mesh = model->meshes[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;
|
uint32_t rangeStart, rangeCount;
|
||||||
lovrMeshGetDrawRange(mesh, &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
|
.pose = node->skin >= 0 ? pose : NULL
|
||||||
},
|
},
|
||||||
.transform = globalTransform,
|
.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]) {
|
static void applyAABB(Model* model, int nodeIndex, float aabb[6]) {
|
||||||
ModelNode* node = &model->data->nodes[nodeIndex];
|
ModelNode* node = &model->data->nodes[nodeIndex];
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ typedef struct {
|
||||||
Mesh** meshes;
|
Mesh** meshes;
|
||||||
Texture** textures;
|
Texture** textures;
|
||||||
Material** materials;
|
Material** materials;
|
||||||
|
Material* userMaterial;
|
||||||
float* globalNodeTransforms;
|
float* globalNodeTransforms;
|
||||||
} Model;
|
} Model;
|
||||||
|
|
||||||
|
@ -23,4 +24,6 @@ void lovrModelDestroy(void* ref);
|
||||||
void lovrModelDraw(Model* model, mat4 transform, int instances);
|
void lovrModelDraw(Model* model, mat4 transform, int instances);
|
||||||
Animator* lovrModelGetAnimator(Model* model);
|
Animator* lovrModelGetAnimator(Model* model);
|
||||||
void lovrModelSetAnimator(Model* model, Animator* animator);
|
void lovrModelSetAnimator(Model* model, Animator* animator);
|
||||||
|
Material* lovrModelGetMaterial(Model* model);
|
||||||
|
void lovrModelSetMaterial(Model* model, Material* material);
|
||||||
void lovrModelGetAABB(Model* model, float aabb[6]);
|
void lovrModelGetAABB(Model* model, float aabb[6]);
|
||||||
|
|
Loading…
Reference in a new issue