From cccf7d0d4ccab67e92181d7be15c7bb347c5a125 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Sun, 5 Apr 2026 23:00:38 +0200 Subject: [PATCH] base: cleanup --- base/shaders/raytrace/src/build_dxr.bat | 16 +-- base/sources/backends/direct3d12_gpu.c | 2 +- base/sources/engine.c | 57 ++++----- base/sources/iron.h | 2 +- base/sources/iron_draw.c | 4 +- base/sources/iron_math.c | 150 +++++++----------------- base/sources/iron_math.h | 8 -- base/sources/iron_obj.c | 18 +-- base/sources/iron_raycast.c | 12 +- base/sources/iron_shape.c | 14 +-- base/sources/libs/minic_api.c | 20 ---- base/tests/cube/sources/main.c | 6 +- base/tests/fall/sources/camera.c | 2 +- base/tests/fall/sources/main.c | 6 +- base/tools/amake/ashader.c | 3 +- 15 files changed, 112 insertions(+), 208 deletions(-) diff --git a/base/shaders/raytrace/src/build_dxr.bat b/base/shaders/raytrace/src/build_dxr.bat index 8b130347..615f329c 100644 --- a/base/shaders/raytrace/src/build_dxr.bat +++ b/base/shaders/raytrace/src/build_dxr.bat @@ -1,8 +1,8 @@ -.\dxc.exe -Zpr -Fo ..\raytrace_brute_core.cso -T cs_6_5 .\raytrace_brute.hlsl -.\dxc.exe -Zpr -Fo ..\raytrace_brute_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FULL -.\dxc.exe -Zpr -Fo ..\raytrace_brute_forge_core.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -.\dxc.exe -Zpr -Fo ..\raytrace_brute_forge_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -D _FULL -.\dxc.exe -Zpr -Fo ..\raytrace_bake_ao.cso -T cs_6_5 .\raytrace_bake_ao.hlsl -.\dxc.exe -Zpr -Fo ..\raytrace_bake_light.cso -T cs_6_5 .\raytrace_bake_light.hlsl -.\dxc.exe -Zpr -Fo ..\raytrace_bake_bent.cso -T cs_6_5 .\raytrace_bake_bent.hlsl -.\dxc.exe -Zpr -Fo ..\raytrace_bake_thick.cso -T cs_6_5 .\raytrace_bake_thick.hlsl +.\dxc.exe -Zpc -Fo ..\raytrace_brute_core.cso -T cs_6_5 .\raytrace_brute.hlsl +.\dxc.exe -Zpc -Fo ..\raytrace_brute_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FULL +.\dxc.exe -Zpc -Fo ..\raytrace_brute_forge_core.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE +.\dxc.exe -Zpc -Fo ..\raytrace_brute_forge_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -D _FULL +.\dxc.exe -Zpc -Fo ..\raytrace_bake_ao.cso -T cs_6_5 .\raytrace_bake_ao.hlsl +.\dxc.exe -Zpc -Fo ..\raytrace_bake_light.cso -T cs_6_5 .\raytrace_bake_light.hlsl +.\dxc.exe -Zpc -Fo ..\raytrace_bake_bent.cso -T cs_6_5 .\raytrace_bake_bent.hlsl +.\dxc.exe -Zpc -Fo ..\raytrace_bake_thick.cso -T cs_6_5 .\raytrace_bake_thick.hlsl diff --git a/base/sources/backends/direct3d12_gpu.c b/base/sources/backends/direct3d12_gpu.c index ad0d86ae..b2715409 100644 --- a/base/sources/backends/direct3d12_gpu.c +++ b/base/sources/backends/direct3d12_gpu.c @@ -12,7 +12,7 @@ #include #include -bool gpu_transpose_mat = false; +bool gpu_transpose_mat = true; static ID3D12Device *device = NULL; static ID3D12CommandQueue *queue; static IDXGISwapChain *window_swapchain; diff --git a/base/sources/engine.c b/base/sources/engine.c index 634bffa6..7a6cdf52 100644 --- a/base/sources/engine.c +++ b/base/sources/engine.c @@ -125,10 +125,10 @@ void transform_reset(transform_t *raw) { raw->world = mat4_identity(); raw->world_unpack = mat4_identity(); raw->local = mat4_identity(); - raw->loc = vec4_create(0.0, 0.0, 0.0, 0.0); - raw->rot = quat_create(0.0, 0.0, 0.0, 1.0); - raw->scale = vec4_create(1.0, 1.0, 1.0, 0.0); - raw->dim = vec4_create(2.0, 2.0, 2.0, 0.0); + raw->loc = (vec4_t){0.0, 0.0, 0.0, 0.0}; + raw->rot = (quat_t){0.0, 0.0, 0.0, 1.0}; + raw->scale = (vec4_t){1.0, 1.0, 1.0, 0.0}; + raw->dim = (vec4_t){2.0, 2.0, 2.0, 0.0}; raw->radius = 1.0; raw->dirty = true; } @@ -215,11 +215,11 @@ void transform_compute_dim(transform_t *raw) { } if (raw->object->raw == NULL || raw->object->raw->dimensions == NULL) { - raw->dim = vec4_create(2.0 * raw->scale.x, 2.0 * raw->scale.y, 2.0 * raw->scale.z, 0.0); + raw->dim = (vec4_t){2.0 * raw->scale.x, 2.0 * raw->scale.y, 2.0 * raw->scale.z, 0.0}; } else { f32_array_t *d = raw->object->raw->dimensions; - raw->dim = vec4_create(d->buffer[0] * raw->scale.x, d->buffer[1] * raw->scale.y, d->buffer[2] * raw->scale.z, 0.0); + raw->dim = (vec4_t){d->buffer[0] * raw->scale.x, d->buffer[1] * raw->scale.y, d->buffer[2] * raw->scale.z, 0.0}; } transform_compute_radius(raw); } @@ -885,9 +885,9 @@ void mesh_data_build(mesh_data_t *raw) { } vec4_t mesh_data_calculate_aabb(mesh_data_t *raw) { - vec4_t aabb_min = vec4_create(-0.01, -0.01, -0.01, 0.0); - vec4_t aabb_max = vec4_create(0.01, 0.01, 0.01, 0.0); - vec4_t aabb = vec4_create(0.0, 0.0, 0.0, 0.0); + vec4_t aabb_min = (vec4_t){-0.01, -0.01, -0.01, 0.0}; + vec4_t aabb_max = (vec4_t){0.01, 0.01, 0.01, 0.0}; + vec4_t aabb = (vec4_t){0.0, 0.0, 0.0, 0.0}; i32 i = 0; vertex_array_t *positions = mesh_data_get_vertex_array(raw, "pos"); while (i < positions->values->length) { @@ -1138,27 +1138,27 @@ void camera_object_build_mat(camera_object_t *raw) { } vec4_t camera_object_right(camera_object_t *raw) { - return vec4_norm(vec4_create(raw->base->transform->local.m00, raw->base->transform->local.m01, raw->base->transform->local.m02, 0.0)); + return vec4_norm((vec4_t){raw->base->transform->local.m00, raw->base->transform->local.m01, raw->base->transform->local.m02, 0.0}); } vec4_t camera_object_up(camera_object_t *raw) { - return vec4_norm(vec4_create(raw->base->transform->local.m10, raw->base->transform->local.m11, raw->base->transform->local.m12, 0.0)); + return vec4_norm((vec4_t){raw->base->transform->local.m10, raw->base->transform->local.m11, raw->base->transform->local.m12, 0.0}); } vec4_t camera_object_look(camera_object_t *raw) { - return vec4_norm(vec4_create(-raw->base->transform->local.m20, -raw->base->transform->local.m21, -raw->base->transform->local.m22, 0.0)); + return vec4_norm((vec4_t){-raw->base->transform->local.m20, -raw->base->transform->local.m21, -raw->base->transform->local.m22, 0.0}); } vec4_t camera_object_right_world(camera_object_t *raw) { - return vec4_norm(vec4_create(raw->base->transform->world.m00, raw->base->transform->world.m01, raw->base->transform->world.m02, 0.0)); + return vec4_norm((vec4_t){raw->base->transform->world.m00, raw->base->transform->world.m01, raw->base->transform->world.m02, 0.0}); } vec4_t camera_object_up_world(camera_object_t *raw) { - return vec4_norm(vec4_create(raw->base->transform->world.m10, raw->base->transform->world.m11, raw->base->transform->world.m12, 0.0)); + return vec4_norm((vec4_t){raw->base->transform->world.m10, raw->base->transform->world.m11, raw->base->transform->world.m12, 0.0}); } vec4_t camera_object_look_world(camera_object_t *raw) { - return vec4_norm(vec4_create(-raw->base->transform->world.m20, -raw->base->transform->world.m21, -raw->base->transform->world.m22, 0.0)); + return vec4_norm((vec4_t){-raw->base->transform->world.m20, -raw->base->transform->world.m21, -raw->base->transform->world.m22, 0.0}); } void camera_object_build_view_frustum(mat4_t vp, frustum_plane_array_t *frustum_planes) { @@ -1185,7 +1185,7 @@ bool camera_object_sphere_in_frustum(frustum_plane_array_t *frustum_planes, tran f32 radius = t->radius * radius_scale; for (i32 i = 0; i < frustum_planes->length; ++i) { frustum_plane_t *plane = frustum_planes->buffer[i]; - _camera_object_sphere_center = vec4_create(transform_world_x(t) + offset_x, transform_world_y(t) + offset_y, transform_world_z(t) + offset_z, 0.0); + _camera_object_sphere_center = (vec4_t){transform_world_x(t) + offset_x, transform_world_y(t) + offset_y, transform_world_z(t) + offset_z, 0.0}; // Outside the frustum if (frustum_plane_dist_to_sphere(plane, _camera_object_sphere_center, radius) + radius * 2 < 0) { return false; @@ -1203,7 +1203,7 @@ bool camera_object_sphere_in_frustum(frustum_plane_array_t *frustum_planes, tran frustum_plane_t *frustum_plane_create() { frustum_plane_t *raw = gc_alloc(sizeof(frustum_plane_t)); - raw->normal = vec4_create(1.0, 0.0, 0.0, 0.0); + raw->normal = (vec4_t){1.0, 0.0, 0.0, 0.0}; raw->constant = 0.0; return raw; } @@ -1219,7 +1219,7 @@ f32 frustum_plane_dist_to_sphere(frustum_plane_t *raw, vec4_t sphere_center, f32 } void frustum_plane_set_components(frustum_plane_t *raw, f32 x, f32 y, f32 z, f32 w) { - raw->normal = vec4_create(x, y, z, 0.0); + raw->normal = (vec4_t){x, y, z, 0.0}; raw->constant = w; } @@ -1230,13 +1230,6 @@ void frustum_plane_set_components(frustum_plane_t *raw, f32 x, f32 y, f32 z, f32 // ╚██████╔╝██║ ╚████║██║██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║███████║ // ╚═════╝ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ -mat4_t _uniforms_mat = {0}; -mat4_t _uniforms_mat2 = {0}; -mat3_t _uniforms_mat3 = {0}; -vec4_t _uniforms_vec = {0}; -vec4_t _uniforms_vec2 = {0}; -quat_t _uniforms_quat = {0.0, 0.0, 0.0, 1.0}; - f32 uniforms_pos_unpack = 1.0; f32 uniforms_tex_unpack = 1.0; @@ -1392,10 +1385,10 @@ bool uniforms_set_context_const(i32 location, shader_const_t *c) { } else if (string_equals(c->link, "_skydome_matrix")) { transform_t *tr = camera->base->transform; - vec4_t v = vec4_create(transform_world_x(tr), transform_world_y(tr), transform_world_z(tr), 0.0); + vec4_t v = (vec4_t){transform_world_x(tr), transform_world_y(tr), transform_world_z(tr), 0.0}; f32 bounds = camera->data->far_plane * 0.9f; - vec4_t v2 = vec4_create(bounds, bounds, bounds, 0.0); - m = mat4_compose(v, _uniforms_quat, v2); + vec4_t v2 = (vec4_t){bounds, bounds, bounds, 0.0}; + m = mat4_compose(v, (quat_t){0.0, 0.0, 0.0, 1.0}, v2); m = mat4_mult_mat(m, camera->v); m = mat4_mult_mat(m, camera->p); } @@ -1473,8 +1466,8 @@ bool uniforms_set_context_const(i32 location, shader_const_t *c) { vec4_t v = vec4_nan(); if (string_equals(c->link, "_camera_pos")) { - v = vec4_create(transform_world_x(camera->base->transform), transform_world_y(camera->base->transform), transform_world_z(camera->base->transform), - 0.0); + v = (vec4_t){transform_world_x(camera->base->transform), transform_world_y(camera->base->transform), transform_world_z(camera->base->transform), + 0.0}; } else if (string_equals(c->link, "_camera_look")) { v = vec4_norm(camera_object_look_world(camera)); @@ -1700,14 +1693,14 @@ void uniforms_set_obj_const(object_t *obj, i32 loc, shader_const_t *c) { vec4_t s = obj->transform->scale; d = uniforms_vec4_zero_to_one(d); s = uniforms_vec4_zero_to_one(s); - v = vec4_create((d.x / s.x), (d.y / s.y), (d.z / s.z), 0.0); + v = (vec4_t){(d.x / s.x), (d.y / s.y), (d.z / s.z), 0.0}; } else if (string_equals(c->link, "_half_dim")) { // Model space vec4_t d = obj->transform->dim; vec4_t s = obj->transform->scale; d = uniforms_vec4_zero_to_one(d); s = uniforms_vec4_zero_to_one(s); - v = vec4_create((d.x / s.x) / 2, (d.y / s.y) / 2, (d.z / s.z) / 2, 0.0); + v = (vec4_t){(d.x / s.x) / 2, (d.y / s.y) / 2, (d.z / s.z) / 2, 0.0}; } else if (uniforms_vec3_links != NULL) { v = uniforms_vec3_links(obj, current_material(obj), c->link); diff --git a/base/sources/iron.h b/base/sources/iron.h index 02ff8264..6f0580cf 100644 --- a/base/sources/iron.h +++ b/base/sources/iron.h @@ -760,7 +760,7 @@ gpu_shader_t *gpu_create_shader_from_source(char *source, int source_size, gpu_s ID3DBlob *error_message; ID3DBlob *shader_buffer; - UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION; + UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION | D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR; HRESULT hr = D3DCompile(temp_string_s, strlen(source) + 1, NULL, NULL, NULL, "main", shader_type == GPU_SHADER_TYPE_VERTEX ? "vs_5_0" : "ps_5_0", flags, 0, &shader_buffer, &error_message); if (hr != S_OK) { diff --git a/base/sources/iron_draw.c b/base/sources/iron_draw.c index 34df67d0..9838d9cb 100644 --- a/base/sources/iron_draw.c +++ b/base/sources/iron_draw.c @@ -740,10 +740,10 @@ void draw_inner_line(float x1, float y1, float x2, float y2, float strength) { } vec2_t vec; if (y2 == y1) { - vec = vec2_create(0, -1); + vec = (vec2_t){0, -1}; } else { - vec = vec2_create(1, -(x2 - x1) / (y2 - y1)); + vec = (vec2_t){1, -(x2 - x1) / (y2 - y1)}; } vec = vec2_set_len(vec, strength); vec2_t p1 = {x1 + side * vec.x, y1 + side * vec.y}; diff --git a/base/sources/iron_math.c b/base/sources/iron_math.c index a698772f..c7691225 100644 --- a/base/sources/iron_math.c +++ b/base/sources/iron_math.c @@ -76,13 +76,6 @@ uint32_t iron_hash_djb2(unsigned char *str) { // ╚████╔╝ ███████╗╚██████╗███████╗ // ╚═══╝ ╚══════╝ ╚═════╝╚══════╝ -vec2_t vec2_create(float x, float y) { - vec2_t v; - v.x = x; - v.y = y; - return v; -} - float vec2_len(vec2_t v) { return sqrtf(v.x * v.x + v.y * v.y); } @@ -151,15 +144,6 @@ bool vec2_isnan(vec2_t v) { // ╚████╔╝ ███████╗╚██████╗ ██║ // ╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ -vec4_t vec4_create(float x, float y, float z, float w) { - vec4_t v; - v.x = x; - v.y = y; - v.z = z; - v.w = w; - return v; -} - vec4_t vec4_cross(vec4_t a, vec4_t b) { vec4_t v; v.x = a.y * b.z - a.z * b.y; @@ -319,15 +303,15 @@ vec4_t vec4_clamp(vec4_t a, float min, float max) { } vec4_t vec4_x_axis() { - return vec4_create(1.0, 0.0, 0.0, 1.0); + return (vec4_t){1.0, 0.0, 0.0, 1.0}; } vec4_t vec4_y_axis() { - return vec4_create(0.0, 1.0, 0.0, 1.0); + return (vec4_t){0.0, 1.0, 0.0, 1.0}; } vec4_t vec4_z_axis() { - return vec4_create(0.0, 0.0, 1.0, 1.0); + return (vec4_t){0.0, 0.0, 1.0, 1.0}; } vec4_t vec4_nan() { @@ -347,15 +331,6 @@ bool vec4_isnan(vec4_t v) { // ╚██████╔╝╚██████╔╝██║ ██║ ██║ // ╚══▀▀═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ -quat_t quat_create(float x, float y, float z, float w) { - quat_t q; - q.x = x; - q.y = y; - q.z = z; - q.w = w; - return q; -} - quat_t quat_from_axis_angle(vec4_t axis, float angle) { float s = sinf(angle * 0.5); quat_t q; @@ -454,7 +429,7 @@ vec4_t quat_get_euler(quat_t q) { float c = 2 * (q.x * q.y + q.w * q.z); float d = -2 * (q.y * q.z - q.w * q.x); float e = q.w * q.w - q.x * q.x + q.y * q.y - q.z * q.z; - return vec4_create(atan2f(d, e), atan2f(a, b), asinf(c), 1.0); + return (vec4_t){atan2f(d, e), atan2f(a, b), asinf(c), 1.0}; } quat_t quat_from_euler(float x, float y, float z) { @@ -508,11 +483,11 @@ quat_t quat_from_to(vec4_t v0, vec4_t v1) { return quat_from_axis_angle(a, IRON_PI); } else if (dot > 0.999999) { - return quat_create(0, 0, 0, 1); + return (quat_t){0, 0, 0, 1}; } else { vec4_t a = vec4_cross(v0, v1); - quat_t q = quat_create(a.x, a.y, a.z, 1.0 + dot); + quat_t q = (quat_t){a.x, a.y, a.z, 1.0 + dot}; return quat_norm(q); } } @@ -534,30 +509,16 @@ quat_t quat_inv(quat_t q) { // ██║ ╚═╝ ██║██║ ██║ ██║ ██████╔╝ // ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ -mat3_t mat3_create(float _00, float _10, float _20, float _01, float _11, float _21, float _02, float _12, float _22) { - mat3_t m; - m.m[0] = _00; - m.m[1] = _01; - m.m[2] = _02; - m.m[3] = _10; - m.m[4] = _11; - m.m[5] = _12; - m.m[6] = _20; - m.m[7] = _21; - m.m[8] = _22; - return m; -} - mat3_t mat3_identity() { - return mat3_create(1, 0, 0, 0, 1, 0, 0, 0, 1); + return (mat3_t){1, 0, 0, 0, 1, 0, 0, 0, 1}; } mat3_t mat3_translation(float x, float y) { - return mat3_create(1, 0, x, 0, 1, y, 0, 0, 1); + return (mat3_t){1, 0, 0, 0, 1, 0, x, y, 1}; } mat3_t mat3_rotation(float alpha) { - return mat3_create(cosf(alpha), -sinf(alpha), 0, sinf(alpha), cosf(alpha), 0, 0, 0, 1); + return (mat3_t){cosf(alpha), sinf(alpha), 0, -sinf(alpha), cosf(alpha), 0, 0, 0, 1}; } mat3_t mat3_scale(mat3_t m, vec4_t v) { @@ -588,27 +549,27 @@ mat3_t mat3_set_from4(mat4_t m4) { } mat3_t mat3_multmat(mat3_t a, mat3_t b) { - return mat3_create(a.m[0] * b.m[0] + a.m[3] * b.m[1] + a.m[6] * b.m[2], a.m[0] * b.m[3] + a.m[3] * b.m[4] + a.m[6] * b.m[5], - a.m[0] * b.m[6] + a.m[3] * b.m[7] + a.m[6] * b.m[8], a.m[1] * b.m[0] + a.m[4] * b.m[1] + a.m[7] * b.m[2], - a.m[1] * b.m[3] + a.m[4] * b.m[4] + a.m[7] * b.m[5], a.m[1] * b.m[6] + a.m[4] * b.m[7] + a.m[7] * b.m[8], - a.m[2] * b.m[0] + a.m[5] * b.m[1] + a.m[8] * b.m[2], a.m[2] * b.m[3] + a.m[5] * b.m[4] + a.m[8] * b.m[5], - a.m[2] * b.m[6] + a.m[5] * b.m[7] + a.m[8] * b.m[8]); + return (mat3_t){a.m[0] * b.m[0] + a.m[3] * b.m[1] + a.m[6] * b.m[2], a.m[1] * b.m[0] + a.m[4] * b.m[1] + a.m[7] * b.m[2], + a.m[2] * b.m[0] + a.m[5] * b.m[1] + a.m[8] * b.m[2], a.m[0] * b.m[3] + a.m[3] * b.m[4] + a.m[6] * b.m[5], + a.m[1] * b.m[3] + a.m[4] * b.m[4] + a.m[7] * b.m[5], a.m[2] * b.m[3] + a.m[5] * b.m[4] + a.m[8] * b.m[5], + a.m[0] * b.m[6] + a.m[3] * b.m[7] + a.m[6] * b.m[8], a.m[1] * b.m[6] + a.m[4] * b.m[7] + a.m[7] * b.m[8], + a.m[2] * b.m[6] + a.m[5] * b.m[7] + a.m[8] * b.m[8]}; } mat3_t mat3_transpose(mat3_t m) { - float f = m.m[1]; - m.m[1] = m.m[3]; - m.m[3] = f; + float f = m.m[1]; + m.m[1] = m.m[3]; + m.m[3] = f; - f = m.m[2]; - m.m[2] = m.m[6]; - m.m[6] = f; + f = m.m[2]; + m.m[2] = m.m[6]; + m.m[6] = f; - f = m.m[5]; - m.m[5] = m.m[7]; - m.m[7] = f; + f = m.m[5]; + m.m[5] = m.m[7]; + m.m[7] = f; - return m; + return m; } mat3_t mat3_nan() { @@ -628,42 +589,21 @@ bool mat3_isnan(mat3_t m) { // ██║ ╚═╝ ██║██║ ██║ ██║ ██║ // ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ -mat4_t mat4_create(float _00, float _10, float _20, float _30, float _01, float _11, float _21, float _31, float _02, float _12, float _22, float _32, - float _03, float _13, float _23, float _33) { - mat4_t m; - m.m[0] = _00; - m.m[1] = _01; - m.m[2] = _02; - m.m[3] = _03; - m.m[4] = _10; - m.m[5] = _11; - m.m[6] = _12; - m.m[7] = _13; - m.m[8] = _20; - m.m[9] = _21; - m.m[10] = _22; - m.m[11] = _23; - m.m[12] = _30; - m.m[13] = _31; - m.m[14] = _32; - m.m[15] = _33; - return m; -} - mat4_t mat4_identity() { - return mat4_create(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0); + return (mat4_t){1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0}; } mat4_t mat4_from_f32_array(f32_array_t *a, int offset) { - return mat4_create(a->buffer[0 + offset], a->buffer[1 + offset], a->buffer[2 + offset], a->buffer[3 + offset], a->buffer[4 + offset], a->buffer[5 + offset], - a->buffer[6 + offset], a->buffer[7 + offset], a->buffer[8 + offset], a->buffer[9 + offset], a->buffer[10 + offset], - a->buffer[11 + offset], a->buffer[12 + offset], a->buffer[13 + offset], a->buffer[14 + offset], a->buffer[15 + offset]); + return (mat4_t){a->buffer[0 + offset], a->buffer[4 + offset], a->buffer[8 + offset], a->buffer[12 + offset], + a->buffer[1 + offset], a->buffer[5 + offset], a->buffer[9 + offset], a->buffer[13 + offset], + a->buffer[2 + offset], a->buffer[6 + offset], a->buffer[10 + offset], a->buffer[14 + offset], + a->buffer[3 + offset], a->buffer[7 + offset], a->buffer[11 + offset], a->buffer[15 + offset]}; } mat4_t mat4_persp(float fov_y, float aspect, float zn, float zf) { float uh = 1.0 / tanf(fov_y / 2); float uw = uh / aspect; - return mat4_create(uw, 0, 0, 0, 0, uh, 0, 0, 0, 0, (zf + zn) / (zn - zf), 2 * zf * zn / (zn - zf), 0, 0, -1, 0); + return (mat4_t){uw, 0, 0, 0, 0, uh, 0, 0, 0, 0, (zf + zn) / (zn - zf), -1, 0, 0, 2 * zf * zn / (zn - zf), 0}; } mat4_t mat4_ortho(float left, float right, float bottom, float top, float znear, float zfar) { @@ -673,13 +613,13 @@ mat4_t mat4_ortho(float left, float right, float bottom, float top, float znear, float tx = -(right + left) / (rl); float ty = -(top + bottom) / (tb); float tz = -(zfar + znear) / (fn); - return mat4_create(2 / rl, 0, 0, tx, 0, 2 / tb, 0, ty, 0, 0, -2 / fn, tz, 0, 0, 0, 1); + return (mat4_t){2 / rl, 0, 0, 0, 0, 2 / tb, 0, 0, 0, 0, -2 / fn, 0, tx, ty, tz, 1}; } mat4_t mat4_rot_z(float alpha) { float ca = cosf(alpha); float sa = sinf(alpha); - return mat4_create(ca, -sa, 0, 0, sa, ca, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + return (mat4_t){ca, sa, 0, 0, -sa, ca, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; } mat4_t mat4_compose(vec4_t loc, quat_t rot, vec4_t scl) { @@ -696,9 +636,9 @@ mat4_decomposed_t *mat4_decompose(mat4_t m) { loc.x = m.m[12]; loc.y = m.m[13]; loc.z = m.m[14]; - scl.x = vec4_len(vec4_create(m.m[0], m.m[1], m.m[2], 1.0)); - scl.y = vec4_len(vec4_create(m.m[4], m.m[5], m.m[6], 1.0)); - scl.z = vec4_len(vec4_create(m.m[8], m.m[9], m.m[10], 1.0)); + scl.x = vec4_len((vec4_t){m.m[0], m.m[1], m.m[2], 1.0}); + scl.y = vec4_len((vec4_t){m.m[4], m.m[5], m.m[6], 1.0}); + scl.z = vec4_len((vec4_t){m.m[8], m.m[9], m.m[10], 1.0}); if (mat4_determinant(m) < 0.0) { scl.x = -scl.x; } @@ -1034,16 +974,16 @@ mat4_t mat4_transpose3(mat4_t m) { } mat4_t mat4_clone(mat4_t m) { - return mat4_create(m.m[0], m.m[4], m.m[8], m.m[12], m.m[1], m.m[5], m.m[9], m.m[13], m.m[2], m.m[6], m.m[10], m.m[14], m.m[3], m.m[7], m.m[11], m.m[15]); + return (mat4_t){m.m[0], m.m[4], m.m[8], m.m[12], m.m[1], m.m[5], m.m[9], m.m[13], m.m[2], m.m[6], m.m[10], m.m[14], m.m[3], m.m[7], m.m[11], m.m[15]}; } vec4_t mat4_get_loc(mat4_t m) { - return vec4_create(m.m[12], m.m[13], m.m[14], m.m[15]); + return (vec4_t){m.m[12], m.m[13], m.m[14], m.m[15]}; } vec4_t mat4_get_scale(mat4_t m) { - return vec4_create(sqrtf(m.m[0] * m.m[0] + m.m[4] * m.m[4] + m.m[8] * m.m[8]), sqrtf(m.m[1] * m.m[1] + m.m[5] * m.m[5] + m.m[9] * m.m[9]), - sqrtf(m.m[2] * m.m[2] + m.m[6] * m.m[6] + m.m[10] * m.m[10]), 1.0); + return (vec4_t){sqrtf(m.m[0] * m.m[0] + m.m[4] * m.m[4] + m.m[8] * m.m[8]), sqrtf(m.m[1] * m.m[1] + m.m[5] * m.m[5] + m.m[9] * m.m[9]), + sqrtf(m.m[2] * m.m[2] + m.m[6] * m.m[6] + m.m[10] * m.m[10]), 1.0}; } mat4_t mat4_mult(mat4_t m, float s) { @@ -1067,15 +1007,15 @@ mat4_t mat4_mult(mat4_t m, float s) { } mat4_t mat4_to_rot(mat4_t m) { - float scale = 1.0 / vec4_len(vec4_create(m.m[0], m.m[1], m.m[2], 1.0)); + float scale = 1.0 / vec4_len((vec4_t){m.m[0], m.m[1], m.m[2], 1.0}); m.m[0] = m.m[0] * scale; m.m[1] = m.m[1] * scale; m.m[2] = m.m[2] * scale; - scale = 1.0 / vec4_len(vec4_create(m.m[4], m.m[5], m.m[6], 1.0)); + scale = 1.0 / vec4_len((vec4_t){m.m[4], m.m[5], m.m[6], 1.0}); m.m[4] = m.m[4] * scale; m.m[5] = m.m[5] * scale; m.m[6] = m.m[6] * scale; - scale = 1.0 / vec4_len(vec4_create(m.m[8], m.m[9], m.m[10], 1.0)); + scale = 1.0 / vec4_len((vec4_t){m.m[8], m.m[9], m.m[10], 1.0}); m.m[8] = m.m[8] * scale; m.m[9] = m.m[9] * scale; m.m[10] = m.m[10] * scale; @@ -1090,15 +1030,15 @@ mat4_t mat4_to_rot(mat4_t m) { } vec4_t mat4_right(mat4_t m) { - return vec4_norm(vec4_create(m.m[0], m.m[1], m.m[2], 1.0)); + return vec4_norm((vec4_t){m.m[0], m.m[1], m.m[2], 1.0}); } vec4_t mat4_look(mat4_t m) { - return vec4_norm(vec4_create(m.m[4], m.m[5], m.m[6], 1.0)); + return vec4_norm((vec4_t){m.m[4], m.m[5], m.m[6], 1.0}); } vec4_t mat4_up(mat4_t m) { - return vec4_norm(vec4_create(m.m[8], m.m[9], m.m[10], 1.0)); + return vec4_norm((vec4_t){m.m[8], m.m[9], m.m[10], 1.0}); } f32_array_t *mat4_to_f32_array(mat4_t m) { diff --git a/base/sources/iron_math.h b/base/sources/iron_math.h index fdf74f36..8b0e3395 100644 --- a/base/sources/iron_math.h +++ b/base/sources/iron_math.h @@ -76,7 +76,6 @@ int64_t iron_random_get_max(int64_t max); int64_t iron_random_get_in(int64_t min, int64_t max); uint32_t iron_hash_djb2(unsigned char *str); -vec2_t vec2_create(float x, float y); float vec2_len(vec2_t v); vec2_t vec2_set_len(vec2_t v, float length); vec2_t vec2_mult(vec2_t a, float f); @@ -88,7 +87,6 @@ float vec2_dot(vec2_t a, vec2_t b); vec2_t vec2_nan(); bool vec2_isnan(vec2_t v); -vec4_t vec4_create(float x, float y, float z, float w); 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); @@ -117,7 +115,6 @@ vec4_t vec4_z_axis(); vec4_t vec4_nan(); bool vec4_isnan(vec4_t v); -quat_t quat_create(float x, float y, float z, float w); quat_t quat_from_axis_angle(vec4_t axis, float angle); quat_t quat_from_mat(mat4_t m); quat_t quat_from_rot_mat(mat4_t m); @@ -131,7 +128,6 @@ float quat_dot(quat_t a, quat_t b); quat_t quat_from_to(vec4_t v0, vec4_t v1); quat_t quat_inv(quat_t q); -mat3_t mat3_create(float _00, float _10, float _20, float _01, float _11, float _21, float _02, float _12, float _22); mat3_t mat3_identity(); mat3_t mat3_translation(float x, float y); mat3_t mat3_rotation(float alpha); @@ -148,8 +144,6 @@ typedef struct mat4_decomposed { vec4_t scl; } mat4_decomposed_t; -mat4_t mat4_create(float _00, float _10, float _20, float _30, float _01, float _11, float _21, float _31, float _02, float _12, float _22, float _32, - float _03, float _13, float _23, float _33); mat4_t mat4_identity(); mat4_t mat4_from_f32_array(f32_array_t *a, int offset); mat4_t mat4_persp(float fov_y, float aspect, float zn, float zf); @@ -180,5 +174,3 @@ float mat4_cofactor(float m0, float m1, float m2, float m3, float m float mat4_determinant(mat4_t m); mat4_t mat4_nan(); bool mat4_isnan(mat4_t m); - -#define mat4nan (mat4_nan()) diff --git a/base/sources/iron_obj.c b/base/sources/iron_obj.c index 228b3233..735fa3dd 100644 --- a/base/sources/iron_obj.c +++ b/base/sources/iron_obj.c @@ -341,12 +341,12 @@ raw_mesh_t *obj_parse(buffer_t *file_bytes, char split_code, uint64_t start_pos, nz = nor_temp.buffer[(na[0] - _nind_off) * 3 + 2]; } else { - vec4_t n = calc_normal(vec4_create(pos_temp.buffer[(va[0] - _vind_off) * 3], pos_temp.buffer[(va[0] - _vind_off) * 3 + 1], - pos_temp.buffer[(va[0] - _vind_off) * 3 + 2], 1.0f), - vec4_create(pos_temp.buffer[(va[1] - _vind_off) * 3], pos_temp.buffer[(va[1] - _vind_off) * 3 + 1], - pos_temp.buffer[(va[1] - _vind_off) * 3 + 2], 1.0f), - vec4_create(pos_temp.buffer[(va[2] - _vind_off) * 3], pos_temp.buffer[(va[2] - _vind_off) * 3 + 1], - pos_temp.buffer[(va[2] - _vind_off) * 3 + 2], 1.0f)); + vec4_t n = calc_normal((vec4_t){pos_temp.buffer[(va[0] - _vind_off) * 3], pos_temp.buffer[(va[0] - _vind_off) * 3 + 1], + pos_temp.buffer[(va[0] - _vind_off) * 3 + 2], 1.0f}, + (vec4_t){pos_temp.buffer[(va[1] - _vind_off) * 3], pos_temp.buffer[(va[1] - _vind_off) * 3 + 1], + pos_temp.buffer[(va[1] - _vind_off) * 3 + 2], 1.0f}, + (vec4_t){pos_temp.buffer[(va[2] - _vind_off) * 3], pos_temp.buffer[(va[2] - _vind_off) * 3 + 1], + pos_temp.buffer[(va[2] - _vind_off) * 3 + 2], 1.0f}); nx = n.x; ny = n.y; nz = n.z; @@ -525,9 +525,9 @@ raw_mesh_t *obj_parse(buffer_t *file_bytes, char split_code, uint64_t start_pos, int i1 = part->inda->buffer[i * 3]; int i2 = part->inda->buffer[i * 3 + 1]; int i3 = part->inda->buffer[i * 3 + 2]; - vec4_t n = calc_normal(vec4_create(part->posa->buffer[i1 * 4], part->posa->buffer[i1 * 4 + 1], part->posa->buffer[i1 * 4 + 2], 1.0), - vec4_create(part->posa->buffer[i2 * 4], part->posa->buffer[i2 * 4 + 1], part->posa->buffer[i2 * 4 + 2], 1.0), - vec4_create(part->posa->buffer[i3 * 4], part->posa->buffer[i3 * 4 + 1], part->posa->buffer[i3 * 4 + 2], 1.0)); + vec4_t n = calc_normal((vec4_t){part->posa->buffer[i1 * 4], part->posa->buffer[i1 * 4 + 1], part->posa->buffer[i1 * 4 + 2], 1.0}, + (vec4_t){part->posa->buffer[i2 * 4], part->posa->buffer[i2 * 4 + 1], part->posa->buffer[i2 * 4 + 2], 1.0}, + (vec4_t){part->posa->buffer[i3 * 4], part->posa->buffer[i3 * 4 + 1], part->posa->buffer[i3 * 4 + 2], 1.0}); part->nora->buffer[i1 * 2] = (int)(n.x * 32767); part->nora->buffer[i1 * 2 + 1] = (int)(n.y * 32767); part->posa->buffer[i1 * 4 + 3] = (int)(n.z * 32767); diff --git a/base/sources/iron_raycast.c b/base/sources/iron_raycast.c index 261b6509..f8974ab7 100644 --- a/base/sources/iron_raycast.c +++ b/base/sources/iron_raycast.c @@ -12,8 +12,8 @@ mat4_t _raycast_p_inv = {0}; mat4_t _raycast_v_inv = {0}; ray_t *raycast_get_ray(f32 input_x, f32 input_y, camera_object_t *camera) { - vec4_t start = vec4_create(0.0, 0.0, 0.0, 0.0); - vec4_t end = vec4_create(0.0, 0.0, 0.0, 0.0); + vec4_t start = (vec4_t){0.0, 0.0, 0.0, 0.0}; + vec4_t end = (vec4_t){0.0, 0.0, 0.0, 0.0}; // Get 3D point form screen coords // Set two vectors with opposing z values @@ -42,8 +42,8 @@ ray_t *raycast_get_ray(f32 input_x, f32 input_y, camera_object_t *camera) { vec4_t raycast_box_intersect(transform_t *transform, f32 input_x, f32 input_y, camera_object_t *camera) { ray_t *ray = raycast_get_ray(input_x, input_y, camera); - vec4_t c = vec4_create(transform_world_x(transform), transform_world_y(transform), transform_world_z(transform), 0.0); - vec4_t s = vec4_create(transform->dim.x, transform->dim.y, transform->dim.z, 0.0); + vec4_t c = (vec4_t){transform_world_x(transform), transform_world_y(transform), transform_world_z(transform), 0.0}; + vec4_t s = (vec4_t){transform->dim.x, transform->dim.y, transform->dim.z, 0.0}; return ray_intersect_box(ray, c, s); } @@ -98,7 +98,7 @@ vec4_t ray_at(ray_t *raw, f32 t) { } f32 ray_dist_to_point(ray_t *raw, vec4_t point) { - vec4_t v1 = vec4_create(0.0, 0.0, 0.0, 0.0); + vec4_t v1 = (vec4_t){0.0, 0.0, 0.0, 0.0}; f32 dir_dist = vec4_dot(vec4_sub(point, raw->origin), raw->dir); // Point behind the ray @@ -297,7 +297,7 @@ vec4_t ray_intersect_triangle(ray_t *raw, vec4_t a, vec4_t b, vec4_t c, bool cul plane_t plane_create(void) { plane_t raw; - raw.normal = vec4_create(1.0, 0.0, 0.0, 0.0); + raw.normal = (vec4_t){1.0, 0.0, 0.0, 0.0}; raw.constant = 0.0; return raw; } diff --git a/base/sources/iron_shape.c b/base/sources/iron_shape.c index 62950b9d..25e037fb 100644 --- a/base/sources/iron_shape.c +++ b/base/sources/iron_shape.c @@ -192,9 +192,9 @@ void line_draw_line(f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2) { line_draw_begin(); } - line_draw_mid_point = vec4_mult(vec4_create(x1 + x2, y1 + y2, z1 + z2, 0.0), 0.5); + line_draw_mid_point = vec4_mult((vec4_t){x1 + x2, y1 + y2, z1 + z2, 0.0}, 0.5); - line_draw_mid_line = vec4_sub(vec4_create(x1, y1, z1, 0.0), line_draw_mid_point); + line_draw_mid_line = vec4_sub((vec4_t){x1, y1, z1, 0.0}, line_draw_mid_point); line_draw_camera_look = vec4_sub(mat4_get_loc(scene_camera->base->transform->world), line_draw_mid_point); @@ -202,10 +202,10 @@ void line_draw_line(f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2) { line_width = vec4_norm(line_width); line_width = vec4_mult(line_width, line_draw_strength); - line_draw_corner1 = vec4_add(vec4_create(x1, y1, z1, 0.0), line_width); - line_draw_corner2 = vec4_sub(vec4_create(x1, y1, z1, 0.0), line_width); - line_draw_corner3 = vec4_sub(vec4_create(x2, y2, z2, 0.0), line_width); - line_draw_corner4 = vec4_add(vec4_create(x2, y2, z2, 0.0), line_width); + line_draw_corner1 = vec4_add((vec4_t){x1, y1, z1, 0.0}, line_width); + line_draw_corner2 = vec4_sub((vec4_t){x1, y1, z1, 0.0}, line_width); + line_draw_corner3 = vec4_sub((vec4_t){x2, y2, z2, 0.0}, line_width); + line_draw_corner4 = vec4_add((vec4_t){x2, y2, z2, 0.0}, line_width); i32 i = line_draw_lines * 12; // 4 * 3 (structure len) @@ -289,7 +289,7 @@ void shape_draw_sphere(mat4_t mat) { gpu_set_pipeline(line_draw_overlay_pipeline); f32 f = line_draw_strength * 50; line_draw_vp = mat4_clone(mat); - line_draw_vp = mat4_scale(line_draw_vp, vec4_create(f, f, f, 0.0)); + line_draw_vp = mat4_scale(line_draw_vp, (vec4_t){f, f, f, 0.0}); line_draw_vp = mat4_mult_mat(line_draw_vp, scene_camera->v); line_draw_vp = mat4_mult_mat(line_draw_vp, scene_camera->p); gpu_set_mat4(line_draw_vp_loc, line_draw_vp); diff --git a/base/sources/libs/minic_api.c b/base/sources/libs/minic_api.c index a4e18274..9f59ab84 100644 --- a/base/sources/libs/minic_api.c +++ b/base/sources/libs/minic_api.c @@ -301,9 +301,6 @@ static void minic_set_mat4(void *p, mat4_t m) { #define AP(i) (_a[i].p) // vec2 -MN(vec2_create) { - RET2(vec2_create(AF(0), AF(1))); -} MN(vec2_len) { return minic_val_float(vec2_len(V2(0))); } @@ -336,9 +333,6 @@ MN(vec2_isnan) { } // vec4 -MN(vec4_create) { - RET4(vec4_create(AF(0), AF(1), AF(2), AF(3))); -} MN(vec4_cross) { RET4(vec4_cross(V4(0), V4(1))); } @@ -419,9 +413,6 @@ MN(vec4_isnan) { } // quat -MN(quat_create) { - RETQ(quat_create(AF(0), AF(1), AF(2), AF(3))); -} MN(quat_from_axis_angle) { RETQ(quat_from_axis_angle(V4(0), AF(1))); } @@ -460,9 +451,6 @@ MN(quat_inv) { } // mat3 -MN(mat3_create) { - RET3(mat3_create(AF(0), AF(1), AF(2), AF(3), AF(4), AF(5), AF(6), AF(7), AF(8))); -} MN(mat3_identity) { RET3(mat3_identity()); } @@ -492,9 +480,6 @@ MN(mat3_isnan) { } // mat4 -MN(mat4_create) { - RET4M(mat4_create(AF(0), AF(1), AF(2), AF(3), AF(4), AF(5), AF(6), AF(7), AF(8), AF(9), AF(10), AF(11), AF(12), AF(13), AF(14), AF(15))); -} MN(mat4_identity) { RET4M(mat4_identity()); } @@ -1352,7 +1337,6 @@ void minic_register_builtins() { // iron_math #define MR(sym) minic_register_native(#sym, mn_##sym) - MR(vec2_create); MR(vec2_len); MR(vec2_set_len); MR(vec2_mult); @@ -1363,7 +1347,6 @@ void minic_register_builtins() { MR(vec2_dot); MR(vec2_nan); MR(vec2_isnan); - MR(vec4_create); MR(vec4_cross); MR(vec4_add); MR(vec4_fadd); @@ -1390,7 +1373,6 @@ void minic_register_builtins() { MR(vec4_z_axis); MR(vec4_nan); MR(vec4_isnan); - MR(quat_create); MR(quat_from_axis_angle); MR(quat_from_mat); MR(quat_from_rot_mat); @@ -1403,7 +1385,6 @@ void minic_register_builtins() { MR(quat_dot); MR(quat_from_to); MR(quat_inv); - MR(mat3_create); MR(mat3_identity); MR(mat3_translation); MR(mat3_rotation); @@ -1413,7 +1394,6 @@ void minic_register_builtins() { MR(mat3_transpose); MR(mat3_nan); MR(mat3_isnan); - MR(mat4_create); MR(mat4_identity); MR(mat4_persp); MR(mat4_ortho); diff --git a/base/tests/cube/sources/main.c b/base/tests/cube/sources/main.c index a74b4467..9cf9ffa3 100644 --- a/base/tests/cube/sources/main.c +++ b/base/tests/cube/sources/main.c @@ -9,14 +9,14 @@ void render_commands() { void spin_cube(void *_) { object_t *cube = scene_get_child("Cube"); - transform_rotate(cube->transform, vec4_create(0, 0, 1, 1.0), 0.01); + transform_rotate(cube->transform, (vec4_t){0, 0, 1, 1.0}, 0.01); } void scene_ready() { // Set camera transform_t *t = scene_camera->base->transform; - t->loc = vec4_create(0, -6, 0, 1.0); - t->rot = quat_from_to(vec4_create(0, 0, 1, 1.0), vec4_create(0, -1, 0, 1.0)); + t->loc = (vec4_t){0, -6, 0, 1.0}; + t->rot = quat_from_to((vec4_t){0, 0, 1, 1.0}, (vec4_t){0, -1, 0, 1.0}); transform_build_matrix(t); // Rotate cube diff --git a/base/tests/fall/sources/camera.c b/base/tests/fall/sources/camera.c index 4cbcadc1..0cce0a5e 100644 --- a/base/tests/fall/sources/camera.c +++ b/base/tests/fall/sources/camera.c @@ -11,7 +11,7 @@ void camera_update() { bool strafe_down = keyboard_down("q"); f32 fast = keyboard_down("shift") ? 2.0 : 1.0; f32 speed = 5.0; - vec4_t dir = vec4_create(0.0, 0.0, 0.0, 1.0); + vec4_t dir = (vec4_t){0.0, 0.0, 0.0, 1.0}; if (move_forward || move_backward || strafe_right || strafe_left || strafe_up || strafe_down) { vec4_t clook = camera_object_look(camera); diff --git a/base/tests/fall/sources/main.c b/base/tests/fall/sources/main.c index 016670ba..0c3034a3 100644 --- a/base/tests/fall/sources/main.c +++ b/base/tests/fall/sources/main.c @@ -16,7 +16,7 @@ void scene_update(void *_) { camera_update(); if (keyboard_started("space")) { - asim_body_sync_transform(body, vec4_create(0, 0, 5, 1.0), quat_create(0, 0, 0, 1)); + asim_body_sync_transform(body, (vec4_t){0, 0, 5, 1.0}, (quat_t){0, 0, 0, 1}); } object_t *sphere = scene_get_child("Sphere"); @@ -28,8 +28,8 @@ void scene_update(void *_) { void scene_ready() { // Set camera transform_t *t = scene_camera->base->transform; - t->loc = vec4_create(0, -10, 0, 1.0); - t->rot = quat_from_to(vec4_create(0, 0, 1, 1.0), vec4_create(0, -1, 0, 1.0)); + t->loc = (vec4_t){0, -10, 0, 1.0}; + t->rot = quat_from_to((vec4_t){0, 0, 1, 1.0}, (vec4_t){0, -1, 0, 1.0}); transform_build_matrix(t); sys_notify_on_update(scene_update, NULL); diff --git a/base/tools/amake/ashader.c b/base/tools/amake/ashader.c index 9fa9ea69..ee7b7129 100644 --- a/base/tools/amake/ashader.c +++ b/base/tools/amake/ashader.c @@ -23,8 +23,7 @@ char *hlsl_to_bin(char *source, char *shader_type, char *to) { ID3DBlob *error_message; ID3DBlob *shader_buffer; - // UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION; - UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL3; + UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL3 | D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR; HRESULT hr = D3DCompile(source, strlen(source) + 1, NULL, NULL, NULL, "main", type, flags, 0, &shader_buffer, &error_message); if (hr != S_OK) { printf("%s\n", (char *)error_message->lpVtbl->GetBufferPointer(error_message));