_math: cdef-backed structures

This commit is contained in:
Zack Buhman 2026-03-01 22:18:18 -06:00
parent 6a57516349
commit 761a0073ef
6 changed files with 480 additions and 443 deletions

878
_math.lua

File diff suppressed because it is too large Load Diff

View File

@ -211,9 +211,9 @@ collada_scene = {
end
--shader:send("Joints", "column",
--joints[1].data,
--joints[2].data,
--joints[3].data)
--joints[1]:data(),
--joints[2]:data(),
--joints[3]:data())
current_shader:send("Joints", "column",
mat4.store_table(joints[1]),
mat4.store_table(joints[2]),
@ -241,20 +241,20 @@ collada_scene = {
if node.instance_geometries_count > 0 then
current_shader = current_shader_set.static
love.graphics.setShader(current_shader)
--current_shader:send("projection", "column", projection.data)
current_shader:send("view_transform", "column", view_transform.data)
current_shader:send("world_transform", "column", world.data)
current_shader:send("light_transform", "column", light_transform.data)
current_shader:send("transform", "column", transform.data)
--current_shader:send("projection", "column", projection:data())
current_shader:send("view_transform", "column", view_transform:data())
current_shader:send("world_transform", "column", world:data())
current_shader:send("light_transform", "column", light_transform:data())
current_shader:send("transform", "column", transform:data())
collada_scene.draw_instance_geometries(node.instance_geometries)
end
if node.instance_controllers_count > 0 then
current_shader = current_shader_set.skinned
love.graphics.setShader(current_shader)
current_shader:send("world_transform", "column", world.data)
current_shader:send("light_transform", "column", light_transform.data)
current_shader:send("transform", "column", transform.data)
current_shader:send("world_transform", "column", world:data())
current_shader:send("light_transform", "column", light_transform:data())
current_shader:send("transform", "column", transform:data())
collada_scene.draw_instance_controllers(node_state, node.instance_controllers)
end
end,
@ -303,12 +303,12 @@ collada_scene = {
-- color
----------------------------------------------------------------------
shader_color_static:send("view_position", view_position.data)
shader_color_static:send("light_position", light_position.data)
shader_color_static:send("view_position", view_position:data())
shader_color_static:send("light_position", light_position:data())
--shader_color_static:send("shadow_sampler", g_shadow_canvas)
shader_color_skinned:send("view_position", view_position.data)
shader_color_skinned:send("light_position", light_position.data)
shader_color_skinned:send("view_position", view_position:data())
shader_color_skinned:send("light_position", light_position:data())
--shader_color_skinned:send("shadow_sampler", g_shadow_canvas)
love.graphics.setCanvas({g_color_canvas, g_position_canvas, g_normal_canvas, depth=true})
@ -331,7 +331,7 @@ collada_scene = {
if true then
love.graphics.setCanvas({g_occlusion_canvas_a, depth=false})
love.graphics.setShader(shader_ssao)
shader_ssao:send("projection", "column", perspective_projection.data)
shader_ssao:send("projection", "column", perspective_projection:data())
--shader_ssao:send("g_color_sampler", g_color_canvas)
shader_ssao:send("g_position_sampler", g_position_canvas)
shader_ssao:send("g_normal_sampler", g_normal_canvas)

View File

@ -30,11 +30,11 @@ local transform_matrix = function (loaded_transform)
elseif type == collada_types.transform_type.MATRIX then
return value
elseif type == collada_types.transform_type.ROTATE then
if value.f[0] == 0 and value.f[1] == 0 and value.f[2] == 0 then
if value.x == 0 and value.y == 0 and value.z == 0 then
-- WUT?
return mat4.identity()
end
return mat4.rotation_axis(value, scalar.convert_to_radians(value.f[3]))
return mat4.rotation_axis(value, scalar.convert_to_radians(value.w))
elseif type == collada_types.transform_type.SCALE then
return mat4.scaling_from_vector(value)
elseif type == collada_types.transform_type.TRANSLATE then

View File

@ -79,7 +79,7 @@ local draw_string = function(font, s, x, y)
for i = 1, #s do
local c = s:byte(i)
if c ~= 32 then
shader_font:send("transform", "column", glyph_transform(font, x, y).data)
shader_font:send("transform", "column", glyph_transform(font, x, y):data())
shader_font:send("glyph", glyph_coordinate(font, c))
love.graphics.drawFromShader(screen_index_buffer, 3 * 2, 1, 1)
end

View File

@ -166,6 +166,7 @@ function love.run()
local dt = love.timer.step()
update(dt)
draw()
love.graphics.present()
love.timer.sleep(0.001)
end

View File

@ -32,9 +32,9 @@ local generate_ssao_kernel = function(kernel_samples)
local scale = i / kernel_samples
scale = lerp(0.1, 1.0, scale * scale)
v = vec3.multiply_scalar(v, love.math.random() * scale)
ssao_kernel_data_ptr[i * 4 + 0] = v.f[0]
ssao_kernel_data_ptr[i * 4 + 1] = v.f[1]
ssao_kernel_data_ptr[i * 4 + 2] = v.f[2]
ssao_kernel_data_ptr[i * 4 + 0] = v.x
ssao_kernel_data_ptr[i * 4 + 1] = v.y
ssao_kernel_data_ptr[i * 4 + 2] = v.z
--ssao_kernel_data_ptr[i * 4 + 3] = 0
end