paint: minic fixes

This commit is contained in:
luboslenco
2026-06-29 19:27:44 +02:00
parent 08025b6750
commit fc178af042
+26 -9
View File
@@ -26,7 +26,9 @@
#include "types.h"
void console_log(char *s);
void console_log(char *s);
bool point_in_aabb(object_t *object, vec4_t point);
vec4_t raycast_aabb_mouse(object_t *object);
static const char *minic_read_str(minic_val_t v) {
if (v.type == MINIC_T_PTR && v.p != NULL) {
@@ -148,12 +150,28 @@ static void minic_unbox(float *dst, const minic_val_t *src, int n) {
}
}
// Normalize math-type representation into raw floats: arena pointers are script values
// stored as boxed minic_val_t, anything else is a native C struct field
static void minic_read_floats(float *dst, void *p, int n) {
if (p == NULL) {
for (int i = 0; i < n; ++i) {
dst[i] = 0.0f;
}
}
else if (minic_in_arena(p)) {
minic_unbox(dst, (minic_val_t *)p, n);
}
else {
memcpy(dst, p, n * sizeof(float));
}
}
// clang-format off
static vec2_t minic_get_vec2(void *p) { vec2_t v; minic_unbox(&v.x, (minic_val_t *)p, 2); return v; }
static vec4_t minic_get_vec4(void *p) { vec4_t v; minic_unbox(&v.x, (minic_val_t *)p, 4); return v; }
static quat_t minic_get_quat(void *p) { quat_t q; minic_unbox(&q.x, (minic_val_t *)p, 4); return q; }
static mat3_t minic_get_mat3(void *p) { mat3_t m; minic_unbox(m.m, (minic_val_t *)p, 9); return m; }
static mat4_t minic_get_mat4(void *p) { mat4_t m; minic_unbox(m.m, (minic_val_t *)p, 16); return m; }
static vec2_t minic_get_vec2(void *p) { vec2_t v; minic_read_floats(&v.x, p, 2); return v; }
static vec4_t minic_get_vec4(void *p) { vec4_t v; minic_read_floats(&v.x, p, 4); return v; }
static quat_t minic_get_quat(void *p) { quat_t q; minic_read_floats(&q.x, p, 4); return q; }
static mat3_t minic_get_mat3(void *p) { mat3_t m; minic_read_floats(m.m, p, 9); return m; }
static mat4_t minic_get_mat4(void *p) { mat4_t m; minic_read_floats(m.m, p, 16); return m; }
static void minic_set_vec2(minic_val_t *o, vec2_t v) { minic_box(o, &v.x, 2); }
static void minic_set_vec4(minic_val_t *o, vec4_t v) { minic_box(o, &v.x, 4); }
static void minic_set_quat(minic_val_t *o, quat_t q) { minic_box(o, &q.x, 4); }
@@ -170,8 +188,6 @@ static void minic_set_mat4(minic_val_t *o, mat4_t m) { minic_box(o, m.m, 16); }
#define AF(i) (_a[i].f)
#define AP(i) (_a[i].p)
vec4_t raycast_aabb(object_t *object, f32 mouse_x, f32 mouse_y);
// One X(return-kind, name, call) line per math function; expanded twice:
// once to define the mn_* wrappers, once to register them
#define MINIC_MATH_API \
@@ -257,7 +273,8 @@ vec4_t raycast_aabb(object_t *object, f32 mouse_x, f32 mouse_y);
X(V4, transform_look, transform_look(AP(0))) \
X(V4, transform_right, transform_right(AP(0))) \
X(V4, transform_up, transform_up(AP(0))) \
X(V4, raycast_aabb, raycast_aabb((object_t *)AP(0), AF(1), AF(2))) \
X(V4, raycast_aabb_mouse, raycast_aabb_mouse((object_t *)AP(0))) \
X(I, point_in_aabb, point_in_aabb((object_t *)AP(0), V4(1))) \
X(VOID, line_draw_render, line_draw_render(M4(0))) \
X(VOID, line_draw_bounds, line_draw_bounds(M4(0), V4(1))) \
X(VOID, shape_draw_sphere, shape_draw_sphere(M4(0))) \