fix mat4 optional fields

This commit is contained in:
Isaac0-dev 2025-01-05 08:48:38 +10:00
parent 25166483a6
commit dd27099b32
5 changed files with 56 additions and 57 deletions

View file

@ -767,14 +767,20 @@ def build_vec_types():
# Get
s += "static void smlua_get_%s(%s dest, int index) {\n" % (type_name.lower(), type_name)
for lua_field, c_field in vec_type["fields_mapping"].items():
s += " dest%s = smlua_get_%s_field(index, \"%s\");\n" % (c_field, vec_type["field_lua_type"], lua_field)
optional_fields_list = list(vec_type.get("optional_fields_mapping", {}).keys())
for index, (lua_field, c_field) in enumerate(vec_type["fields_mapping"].items()):
s += " dest%s = smlua_get_%s_field(index, \"%s\")" % (c_field, vec_type["field_lua_type"], lua_field)
if 'optional_fields_mapping' in vec_type:
s += " || smlua_get_%s_field(index, \"%s\")" % (vec_type["field_lua_type"], optional_fields_list[index])
s += ";\n"
s += "}\n\n"
# Push
s += "static void smlua_push_%s(%s src, int index) {\n" % (type_name.lower(), type_name)
for lua_field, c_field in vec_type["fields_mapping"].items():
s += " smlua_push_%s_field(index, \"%s\", src%s);\n" % (vec_type["field_lua_type"], lua_field, c_field)
for lua_field, c_field in vec_type.get('optional_fields_mapping', {}).items():
s += " smlua_push_%s_field(index, \"%s\", src%s);\n" % (vec_type["field_lua_type"], lua_field, c_field)
s += "}\n\n"
return s

View file

@ -392,12 +392,19 @@ def build_vec_types():
s = gen_comment_header("vec types")
for type_name, vec_type in VEC_TYPES.items():
s += '#define LUA_%s_FIELD_COUNT %d\n' % (type_name.upper(), len(vec_type['fields_mapping']))
optional_fields = vec_type.get('optional_fields_mapping', {})
s += '#define LUA_%s_FIELD_COUNT %d\n' % (type_name.upper(), len(vec_type['fields_mapping']) + len(optional_fields))
s += 'static struct LuaObjectField s%sFields[LUA_%s_FIELD_COUNT] = {\n' % (type_name, type_name.upper())
field_c_type = vec_type['field_c_type']
for i, lua_field in enumerate(vec_type['fields_mapping'].keys()):
s += ' { "%s", LVT_%s, sizeof(%s) * %d, false, LOT_NONE },\n' % (lua_field, field_c_type.upper(), field_c_type, i)
combined_fields = [
(index, field_name)
for mapping in [vec_type['fields_mapping'], optional_fields]
for index, field_name in enumerate(mapping.keys())
]
sorted_fields_with_order = sorted(combined_fields, key=lambda x: x[1]) # sort alphabetically
for original_index, lua_field in sorted_fields_with_order:
s += ' { "%s", LVT_%s, sizeof(%s) * %d, false, LOT_NONE },\n' % (lua_field, field_c_type.upper(), field_c_type, original_index)
s += '};\n\n'

View file

@ -65,6 +65,8 @@ VEC_TYPES = {
"m31": "[3][1]",
"m32": "[3][2]",
"m33": "[3][3]",
},
"optional_fields_mapping": {
"a": "[0][0]",
"b": "[0][1]",
"c": "[0][2]",

View file

@ -48,10 +48,10 @@ static struct LuaObjectField sVec3fFields[LUA_VEC3F_FIELD_COUNT] = {
#define LUA_VEC4F_FIELD_COUNT 4
static struct LuaObjectField sVec4fFields[LUA_VEC4F_FIELD_COUNT] = {
{ "w", LVT_F32, sizeof(f32) * 3, false, LOT_NONE },
{ "x", LVT_F32, sizeof(f32) * 0, false, LOT_NONE },
{ "y", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
{ "z", LVT_F32, sizeof(f32) * 2, false, LOT_NONE },
{ "w", LVT_F32, sizeof(f32) * 3, false, LOT_NONE },
};
#define LUA_VEC3S_FIELD_COUNT 3
@ -63,14 +63,27 @@ static struct LuaObjectField sVec3sFields[LUA_VEC3S_FIELD_COUNT] = {
#define LUA_VEC4S_FIELD_COUNT 4
static struct LuaObjectField sVec4sFields[LUA_VEC4S_FIELD_COUNT] = {
{ "w", LVT_S16, sizeof(s16) * 3, false, LOT_NONE },
{ "x", LVT_S16, sizeof(s16) * 0, false, LOT_NONE },
{ "y", LVT_S16, sizeof(s16) * 1, false, LOT_NONE },
{ "z", LVT_S16, sizeof(s16) * 2, false, LOT_NONE },
{ "w", LVT_S16, sizeof(s16) * 3, false, LOT_NONE },
};
#define LUA_MAT4_FIELD_COUNT 32
static struct LuaObjectField sMat4Fields[LUA_MAT4_FIELD_COUNT] = {
{ "a", LVT_F32, sizeof(f32) * 0, false, LOT_NONE },
{ "b", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
{ "c", LVT_F32, sizeof(f32) * 2, false, LOT_NONE },
{ "d", LVT_F32, sizeof(f32) * 3, false, LOT_NONE },
{ "e", LVT_F32, sizeof(f32) * 4, false, LOT_NONE },
{ "f", LVT_F32, sizeof(f32) * 5, false, LOT_NONE },
{ "g", LVT_F32, sizeof(f32) * 6, false, LOT_NONE },
{ "h", LVT_F32, sizeof(f32) * 7, false, LOT_NONE },
{ "i", LVT_F32, sizeof(f32) * 8, false, LOT_NONE },
{ "j", LVT_F32, sizeof(f32) * 9, false, LOT_NONE },
{ "k", LVT_F32, sizeof(f32) * 10, false, LOT_NONE },
{ "l", LVT_F32, sizeof(f32) * 11, false, LOT_NONE },
{ "m", LVT_F32, sizeof(f32) * 12, false, LOT_NONE },
{ "m00", LVT_F32, sizeof(f32) * 0, false, LOT_NONE },
{ "m01", LVT_F32, sizeof(f32) * 1, false, LOT_NONE },
{ "m02", LVT_F32, sizeof(f32) * 2, false, LOT_NONE },
@ -87,29 +100,16 @@ static struct LuaObjectField sMat4Fields[LUA_MAT4_FIELD_COUNT] = {
{ "m31", LVT_F32, sizeof(f32) * 13, false, LOT_NONE },
{ "m32", LVT_F32, sizeof(f32) * 14, false, LOT_NONE },
{ "m33", LVT_F32, sizeof(f32) * 15, false, LOT_NONE },
{ "a", LVT_F32, sizeof(f32) * 16, false, LOT_NONE },
{ "b", LVT_F32, sizeof(f32) * 17, false, LOT_NONE },
{ "c", LVT_F32, sizeof(f32) * 18, false, LOT_NONE },
{ "d", LVT_F32, sizeof(f32) * 19, false, LOT_NONE },
{ "e", LVT_F32, sizeof(f32) * 20, false, LOT_NONE },
{ "f", LVT_F32, sizeof(f32) * 21, false, LOT_NONE },
{ "g", LVT_F32, sizeof(f32) * 22, false, LOT_NONE },
{ "h", LVT_F32, sizeof(f32) * 23, false, LOT_NONE },
{ "i", LVT_F32, sizeof(f32) * 24, false, LOT_NONE },
{ "j", LVT_F32, sizeof(f32) * 25, false, LOT_NONE },
{ "k", LVT_F32, sizeof(f32) * 26, false, LOT_NONE },
{ "l", LVT_F32, sizeof(f32) * 27, false, LOT_NONE },
{ "m", LVT_F32, sizeof(f32) * 28, false, LOT_NONE },
{ "n", LVT_F32, sizeof(f32) * 29, false, LOT_NONE },
{ "o", LVT_F32, sizeof(f32) * 30, false, LOT_NONE },
{ "p", LVT_F32, sizeof(f32) * 31, false, LOT_NONE },
{ "n", LVT_F32, sizeof(f32) * 13, false, LOT_NONE },
{ "o", LVT_F32, sizeof(f32) * 14, false, LOT_NONE },
{ "p", LVT_F32, sizeof(f32) * 15, false, LOT_NONE },
};
#define LUA_COLOR_FIELD_COUNT 3
static struct LuaObjectField sColorFields[LUA_COLOR_FIELD_COUNT] = {
{ "r", LVT_U8, sizeof(u8) * 0, false, LOT_NONE },
{ "g", LVT_U8, sizeof(u8) * 1, false, LOT_NONE },
{ "b", LVT_U8, sizeof(u8) * 2, false, LOT_NONE },
{ "g", LVT_U8, sizeof(u8) * 1, false, LOT_NONE },
{ "r", LVT_U8, sizeof(u8) * 0, false, LOT_NONE },
};
struct LuaObjectTable sLuaObjectTable[LOT_MAX] = {

View file

@ -120,38 +120,22 @@ static void smlua_push_vec4s(Vec4s src, int index) {
}
static void smlua_get_mat4(Mat4 dest, int index) {
dest[0][0] = smlua_get_number_field(index, "m00");
dest[0][1] = smlua_get_number_field(index, "m01");
dest[0][2] = smlua_get_number_field(index, "m02");
dest[0][3] = smlua_get_number_field(index, "m03");
dest[1][0] = smlua_get_number_field(index, "m10");
dest[1][1] = smlua_get_number_field(index, "m11");
dest[1][2] = smlua_get_number_field(index, "m12");
dest[1][3] = smlua_get_number_field(index, "m13");
dest[2][0] = smlua_get_number_field(index, "m20");
dest[2][1] = smlua_get_number_field(index, "m21");
dest[2][2] = smlua_get_number_field(index, "m22");
dest[2][3] = smlua_get_number_field(index, "m23");
dest[3][0] = smlua_get_number_field(index, "m30");
dest[3][1] = smlua_get_number_field(index, "m31");
dest[3][2] = smlua_get_number_field(index, "m32");
dest[3][3] = smlua_get_number_field(index, "m33");
dest[0][0] = smlua_get_number_field(index, "a");
dest[0][1] = smlua_get_number_field(index, "b");
dest[0][2] = smlua_get_number_field(index, "c");
dest[0][3] = smlua_get_number_field(index, "d");
dest[1][0] = smlua_get_number_field(index, "e");
dest[1][1] = smlua_get_number_field(index, "f");
dest[1][2] = smlua_get_number_field(index, "g");
dest[1][3] = smlua_get_number_field(index, "h");
dest[2][0] = smlua_get_number_field(index, "i");
dest[2][1] = smlua_get_number_field(index, "j");
dest[2][2] = smlua_get_number_field(index, "k");
dest[2][3] = smlua_get_number_field(index, "l");
dest[3][0] = smlua_get_number_field(index, "m");
dest[3][1] = smlua_get_number_field(index, "n");
dest[3][2] = smlua_get_number_field(index, "o");
dest[3][3] = smlua_get_number_field(index, "p");
dest[0][0] = smlua_get_number_field(index, "m00") || smlua_get_number_field(index, "a");
dest[0][1] = smlua_get_number_field(index, "m01") || smlua_get_number_field(index, "b");
dest[0][2] = smlua_get_number_field(index, "m02") || smlua_get_number_field(index, "c");
dest[0][3] = smlua_get_number_field(index, "m03") || smlua_get_number_field(index, "d");
dest[1][0] = smlua_get_number_field(index, "m10") || smlua_get_number_field(index, "e");
dest[1][1] = smlua_get_number_field(index, "m11") || smlua_get_number_field(index, "f");
dest[1][2] = smlua_get_number_field(index, "m12") || smlua_get_number_field(index, "g");
dest[1][3] = smlua_get_number_field(index, "m13") || smlua_get_number_field(index, "h");
dest[2][0] = smlua_get_number_field(index, "m20") || smlua_get_number_field(index, "i");
dest[2][1] = smlua_get_number_field(index, "m21") || smlua_get_number_field(index, "j");
dest[2][2] = smlua_get_number_field(index, "m22") || smlua_get_number_field(index, "k");
dest[2][3] = smlua_get_number_field(index, "m23") || smlua_get_number_field(index, "l");
dest[3][0] = smlua_get_number_field(index, "m30") || smlua_get_number_field(index, "m");
dest[3][1] = smlua_get_number_field(index, "m31") || smlua_get_number_field(index, "n");
dest[3][2] = smlua_get_number_field(index, "m32") || smlua_get_number_field(index, "o");
dest[3][3] = smlua_get_number_field(index, "m33") || smlua_get_number_field(index, "p");
}
static void smlua_push_mat4(Mat4 src, int index) {