paint: minic fixes
This commit is contained in:
@@ -26,7 +26,9 @@
|
|||||||
|
|
||||||
#include "types.h"
|
#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) {
|
static const char *minic_read_str(minic_val_t v) {
|
||||||
if (v.type == MINIC_T_PTR && v.p != NULL) {
|
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
|
// 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 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_unbox(&v.x, (minic_val_t *)p, 4); 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_unbox(&q.x, (minic_val_t *)p, 4); return q; }
|
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_unbox(m.m, (minic_val_t *)p, 9); return m; }
|
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_unbox(m.m, (minic_val_t *)p, 16); 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_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_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); }
|
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 AF(i) (_a[i].f)
|
||||||
#define AP(i) (_a[i].p)
|
#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:
|
// One X(return-kind, name, call) line per math function; expanded twice:
|
||||||
// once to define the mn_* wrappers, once to register them
|
// once to define the mn_* wrappers, once to register them
|
||||||
#define MINIC_MATH_API \
|
#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_look, transform_look(AP(0))) \
|
||||||
X(V4, transform_right, transform_right(AP(0))) \
|
X(V4, transform_right, transform_right(AP(0))) \
|
||||||
X(V4, transform_up, transform_up(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_render, line_draw_render(M4(0))) \
|
||||||
X(VOID, line_draw_bounds, line_draw_bounds(M4(0), V4(1))) \
|
X(VOID, line_draw_bounds, line_draw_bounds(M4(0), V4(1))) \
|
||||||
X(VOID, shape_draw_sphere, shape_draw_sphere(M4(0))) \
|
X(VOID, shape_draw_sphere, shape_draw_sphere(M4(0))) \
|
||||||
|
|||||||
Reference in New Issue
Block a user