Converting codebase to SOL3

Signed-off-by: Hartmut Seichter <hartmut@technotecture.com>
This commit is contained in:
Hartmut Seichter 2021-01-29 00:00:02 +01:00
parent 874c87cedf
commit 0c8748befe
5 changed files with 137 additions and 92 deletions

View file

@ -17,6 +17,7 @@
namespace sol {
template <> struct is_automagical<pw::matrix4x4> : std::false_type {};
template <> struct is_automagical<pw::vector3> : std::false_type {};
template <> struct is_automagical<pw::vector2> : std::false_type {};
template <> struct is_automagical<pw::vector4> : std::false_type {};
template <> struct is_automagical<pw::quaternion> : std::false_type {};
template <> struct is_automagical<pw::rectangle> : std::false_type {};
@ -24,22 +25,22 @@ template <> struct is_automagical<pw::rectangle> : std::false_type {};
namespace pw {
rectangle from_lua_table(sol::table t)
vector3 table_to_vector3(sol::table t)
{
float v[4];
return vector3(t[0],t[1],t[2]);
}
for (std::size_t i {1}; i <= t.size();i++){
v[i-1] = t[i];
template <typename elementType>
std::vector<elementType> convert_sequence(sol::table t)
{
const std::size_t sz = t.size();
std::vector<elementType> res(sz);
for (std::size_t i = 1; i <= sz; i++) {
res[i - 1] = t[i];
}
return rectangle(v);
return res;
}
vector3 vector3_from_lua_table(sol::table t)
{
return vector3();
}
void register_core_function(sol::state& lua,sol::table& ns)
@ -51,16 +52,25 @@ void register_core_function(sol::state& lua,sol::table& ns)
ns.new_usertype<matrix4x4>("matrix4x4"
, sol::constructors<matrix4x4()>()
, sol::call_constructor,sol::constructors<matrix4x4()>()
, "row",&matrix4x4::row
, "column",&matrix4x4::column
, "set_identity",&matrix4x4::set_identity
, "inverse",&matrix4x4::inverse
, "identity", &matrix4x4::identity
, "identity",sol::readonly_property(matrix4x4::identity)
// , "set",[](sol::this_state s,sol::table t) { for (int i = 0;i < t.size();i++) s.Ldata[i] = t[i-1]; })
// , "get",[]() ->sol::table { return sol::table(); }
);
ns.new_usertype<vector2>("vector2"
,sol::call_constructor,sol::constructors<vector2(),vector2(Scalar,Scalar)>()
,"x", sol::property(sol::resolve<const vector2::value_type&() const>(&vector2::x), [](vector2& v,vector2::value_type val){ v.x() = val;})
,"y", sol::property(sol::resolve<const vector2::value_type&() const>(&vector2::y), [](vector2& v,vector2::value_type val){ v.y() = val;})
);
ns.new_usertype<vector3>("vector3"
,sol::constructors<vector3(),vector3(Scalar,Scalar,Scalar)>()
,sol::call_constructor,sol::constructors<vector3(),vector3(Scalar,Scalar,Scalar)>()
,"x", sol::property(sol::resolve<const vector3::value_type&() const>(&vector3::x), [](vector3& v,vector3::value_type val){ v.x() = val;})
,"y", sol::property(sol::resolve<const vector3::value_type&() const>(&vector3::y), [](vector3& v,vector3::value_type val){ v.y() = val;})
,"z", sol::property(sol::resolve<const vector3::value_type&() const>(&vector3::z), [](vector3& v,vector3::value_type val){ v.z() = val;})
@ -79,29 +89,29 @@ void register_core_function(sol::state& lua,sol::table& ns)
);
ns.new_usertype<vector4>("vector4"
,sol::constructors<vector4(),vector4(vector4::value_type,vector4::value_type,vector4::value_type,vector4::value_type)>()
,sol::call_constructor,sol::constructors<vector4(),vector4(vector4::value_type,vector4::value_type,vector4::value_type,vector4::value_type)>()
,"x", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::x), [](vector4& v,vector4::value_type val){ v.x() = val;})
,"y", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::y), [](vector4& v,vector4::value_type val){ v.y() = val;})
,"z", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::z), [](vector4& v,vector4::value_type val){ v.z() = val;})
,"w", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::w), [](vector4& v,vector4::value_type val){ v.w() = val;})
,"project",&vector4::project
);
,"y", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::y), [](vector4& v,vector4::value_type val){ v.y() = val;})
,"z", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::z), [](vector4& v,vector4::value_type val){ v.z() = val;})
,"w", sol::property(sol::resolve<const vector4::value_type&() const>(&vector4::w), [](vector4& v,vector4::value_type val){ v.w() = val;})
,"project",&vector4::project
);
ns.new_usertype<quaternion>("quaternion"
,sol::constructors<quaternion(), quaternion(quaternion::value_type,quaternion::value_type,quaternion::value_type,quaternion::value_type)>()
,"x", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::x), [](quaternion& v,quaternion::value_type val){ v.x() = val;})
,"y", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::y), [](quaternion& v,quaternion::value_type val){ v.y() = val;})
,"z", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::z), [](quaternion& v,quaternion::value_type val){ v.z() = val;})
,"w", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::w), [](quaternion& v,quaternion::value_type val){ v.w() = val;})
,"identity",sol::readonly_property(&quaternion::identity)
,"dot",&quaternion::dot
,"inverse",sol::readonly_property(&quaternion::inverse)
,"normalized",&quaternion::normalized
,"lerp",&quaternion::lerp
,"slerp",&quaternion::slerp
,"matrix",&quaternion::to_matrix
);
,"y", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::y), [](quaternion& v,quaternion::value_type val){ v.y() = val;})
,"z", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::z), [](quaternion& v,quaternion::value_type val){ v.z() = val;})
,"w", sol::property(sol::resolve<const quaternion::value_type&() const>(&quaternion::w), [](quaternion& v,quaternion::value_type val){ v.w() = val;})
,"identity",sol::readonly_property(&quaternion::identity)
,"dot",&quaternion::dot
,"inverse",sol::readonly_property(&quaternion::inverse)
,"normalized",&quaternion::normalized
,"lerp",&quaternion::lerp
,"slerp",&quaternion::slerp
,"matrix",&quaternion::to_matrix
);
ns.new_usertype<axisangle>
("axisangle",
@ -114,18 +124,18 @@ void register_core_function(sol::state& lua,sol::table& ns)
ns.new_usertype<size>("size"
, sol::call_constructor,sol::constructors<size(),size(Scalar,Scalar)>()
, sol::call_constructor, sol::constructors<size(),size(Scalar,Scalar)>()
, "width",&size::width
, "height",&size::height
, "cast_to_float",&size::cast<float>
);
ns.new_usertype<sizef>("sizef"
, sol::constructors<sizef(),sizef(Scalar,Scalar)>()
, "width",&sizef::width
, "height",&sizef::height
, "cast_to_int",&sizef::cast<int>
);
, sol::call_constructor, sol::constructors<sizef(),sizef(Scalar,Scalar)>()
, "width",&sizef::width
, "height",&sizef::height
, "cast_to_int",&sizef::cast<int>
);
ns.new_usertype<point>("point",
sol::constructors<point(),point(Scalar,Scalar)>(),
@ -151,14 +161,16 @@ void register_core_function(sol::state& lua,sol::table& ns)
ns.new_usertype<geometry>("geometry"
, sol::constructors<geometry(),geometry(geometry::primitive_topology_type,vector3_array,geometry::indices_t)>()
, "primitive_topology", sol::property(&geometry::primitive_topology,&geometry::set_primitive_topology)
, "vertices", sol::property(&geometry::vertices,&geometry::set_vertices)
, "indices", sol::property(&geometry::indices,&geometry::set_indices)
, "vertices", sol::property(&geometry::ref_vertices,&geometry::ref_vertices)
, "indices", sol::property(&geometry::ref_indices,&geometry::ref_indices)
, "add_texture_coordinates",&geometry::add_texture_coordinates
// , "texture_coordinates",&geometry::texture_coordinates
, "compute_normals", &geometry::compute_normals);
ns.new_enum<false>("primitive_topology_type"
,"point_list", geometry::primitive_topology_type::point_list
,"line_list", geometry::primitive_topology_type::line_list
,"triangle_list", geometry::primitive_topology_type::triangle_list);
,"line_list", geometry::primitive_topology_type::line_list
,"triangle_list", geometry::primitive_topology_type::triangle_list);
ns.new_usertype<matrix_transform<real_t>>("matrixtransform"
@ -166,11 +178,11 @@ void register_core_function(sol::state& lua,sol::table& ns)
,"look_at",&matrix_transform<real_t>::look_at
,"perspective_projection",&matrix_transform<real_t>::perspective_projection);
// SOL3
// geoom_type["type"] = lua.create_table_with(
// "points", geometry::topology_type::points
// , "lines", geometry::topology_type::lines
// , "line_strip", geometry::topology_type::line_strip
// );
// geoom_type["type"] = lua.create_table_with(
// "points", geometry::topology_type::points
// , "lines", geometry::topology_type::lines
// , "line_strip", geometry::topology_type::line_strip
// );
@ -182,21 +194,21 @@ void register_core_function(sol::state& lua,sol::table& ns)
,"change_count",sol::property(&image::change_count,&image::set_change_count)
);
image_type.create_named("pixel_layout"
,"rgb8", image::RGB8
,"rgb32", image::RGBA8
,"gray", image::LUM
);
ns.create_named("pixel_layout"
,"rgb8", image::RGB8
,"rgb32", image::RGBA8
,"gray", image::LUM
);
// image_type["layout"] = lua.create_table_with(
// "rgb8", image::RGB8
// ,"rgb32", image::RGBA8
// ,"gray", image::LUM);
// image_type["layout"] = lua.create_table_with(
// "rgb8", image::RGB8
// ,"rgb32", image::RGBA8
// ,"gray", image::LUM);
ns.new_usertype<rectangle>("rectangle"
,sol::constructors<rectangle(),rectangle(const point_<float>&,const size_<float>&)>()
);
);
auto mathf_table = ns.create_named("mathf");
mathf_table.set_function("ping_pong",ping_pong<real_t>);

View file

@ -13,7 +13,7 @@
namespace pw {
void register_visual_function(sol::state&,sol::table &ns)
void register_visual_function(sol::state& lua,sol::table &ns)
{
ns.new_usertype<pipeline>("pipeline"
@ -36,16 +36,21 @@ void register_visual_function(sol::state&,sol::table &ns)
,"set_uniform_vec4",&shader::set_uniform<vector4&>
,"set_uniform_texture",&shader::set_uniform<texture&>
).new_enum<false>("shader_type"
);
ns["shader_type"] = ns.create_named("shader_type"
,"fragment",shader::code_type::fragment
,"vertex",shader::code_type::vertex
,"geometry",shader::code_type::geometry
,"compute",shader::code_type::compute);
,"vertex",shader::code_type::vertex
,"geometry",shader::code_type::geometry
,"compute",shader::code_type::compute);
// new_enum<false>(
ns.new_usertype<render_pass>("render_pass"
,"submit",&render_pass::submit
);
// ns.new_usertype<render_pass>("render_pass"
// ,"submit",&render_pass::submit
// );
ns.new_usertype<renderer>("renderer"