From 23ab6de6dd80e3418cb5909081a73b261df52278 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Fri, 5 Jun 2026 14:48:18 +0200 Subject: [PATCH] base: cleanup --- base/project.js | 2 +- base/sources/iron_array.c | 28 ++++++++++++++++++++++++++++ base/sources/iron_array.h | 3 +++ base/sources/iron_math.c | 8 ++++++++ base/sources/iron_math.h | 2 ++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/base/project.js b/base/project.js index 1edc8d1f..701dd77d 100644 --- a/base/project.js +++ b/base/project.js @@ -161,7 +161,7 @@ else { } if (flags.with_physics) { - project.add_define("arm_physics"); + project.add_define("WITH_PHYSICS"); project.add_cfiles("sources/libs/asim.c"); } diff --git a/base/sources/iron_array.c b/base/sources/iron_array.c index 0ac5831b..f26ed2d6 100644 --- a/base/sources/iron_array.c +++ b/base/sources/iron_array.c @@ -671,3 +671,31 @@ uint8_t half_to_u8_fast(uint16_t h) { uint32_t res = (val * 255) >> shift; return (uint8_t)res; } + +buffer_t *buffer_half_to_u8(buffer_t *buffer) { + for (int32_t i = 0; i < buffer->length / 2.0; ++i) { + buffer->buffer[i] = half_to_u8_fast(buffer_get_u16(buffer, i * 2)); + } + return buffer; +} + +buffer_t *buffer_bgra_swap(buffer_t *buffer) { + for (uint32_t i = 0; i < buffer->length / 4; ++i) { + uint8_t r = buffer->buffer[i * 4]; + buffer->buffer[i * 4] = buffer->buffer[i * 4 + 2]; + buffer->buffer[i * 4 + 2] = r; + } + return buffer; +} + +buffer_t *buffer_bgra64_swap(buffer_t *buffer) { + for (uint32_t i = 0; i < buffer->length / 8; ++i) { + uint8_t r_low = buffer->buffer[i * 8 + 4]; + uint8_t r_high = buffer->buffer[i * 8 + 5]; + buffer->buffer[i * 8 + 4] = buffer->buffer[i * 8 + 0]; + buffer->buffer[i * 8 + 5] = buffer->buffer[i * 8 + 1]; + buffer->buffer[i * 8] = r_low; + buffer->buffer[i * 8 + 1] = r_high; + } + return buffer; +} diff --git a/base/sources/iron_array.h b/base/sources/iron_array.h index 6ac75f2e..96973fc9 100644 --- a/base/sources/iron_array.h +++ b/base/sources/iron_array.h @@ -151,3 +151,6 @@ any_array_t *any_array_create_from_raw(void **raw, uint32_t length); string_array_t *string_array_create(uint32_t length); uint16_t float_to_half_fast(float value); uint8_t half_to_u8_fast(uint16_t h); +buffer_t *buffer_half_to_u8(buffer_t *buffer); +buffer_t *buffer_bgra_swap(buffer_t *buffer); +buffer_t *buffer_bgra64_swap(buffer_t *buffer); diff --git a/base/sources/iron_math.c b/base/sources/iron_math.c index a6ef4fe2..09f3870f 100644 --- a/base/sources/iron_math.c +++ b/base/sources/iron_math.c @@ -135,6 +135,14 @@ bool vec2_isnan(vec2_t v) { // ╚████╔╝ ███████╗╚██████╗ ██║ // ╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ +f32_array_t *vec3_to_f32_array(vec4_t v) { + f32_array_t *res = f32_array_create(3); + res->buffer[0] = v.x; + res->buffer[1] = v.y; + res->buffer[2] = v.z; + return res; +} + vec4_t vec4_cross(vec4_t a, vec4_t b) { vec4_t v; v.x = a.y * b.z - a.z * b.y; diff --git a/base/sources/iron_math.h b/base/sources/iron_math.h index c5a1729c..b614550d 100644 --- a/base/sources/iron_math.h +++ b/base/sources/iron_math.h @@ -86,6 +86,8 @@ float vec2_dot(vec2_t a, vec2_t b); vec2_t vec2_nan(); bool vec2_isnan(vec2_t v); +f32_array_t *vec3_to_f32_array(vec4_t v); + vec4_t vec4_cross(vec4_t a, vec4_t b); vec4_t vec4_add(vec4_t a, vec4_t b); vec4_t vec4_fadd(vec4_t a, float x, float y, float z, float w);