Major push to get renderer separated and configurable.

Signed-off-by: Hartmut Seichter <hartmut@technotecture.com>
This commit is contained in:
Hartmut Seichter 2021-01-05 00:23:03 +01:00
parent 77e254872f
commit d2c8262c68
22 changed files with 542 additions and 97 deletions

View file

@ -7,6 +7,7 @@
#include "pw/core/time.hpp"
#include "pw/core/geometry.hpp"
#include "pw/core/image.hpp"
#include "pw/core/matrix_transform.hpp"
#include "runtime_lua.hpp"
@ -15,6 +16,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::vector4> : std::false_type {};
template <> struct is_automagical<pw::quaternion> : std::false_type {};
}
@ -44,8 +46,24 @@ void register_core_function(sol::state& lua,sol::table& ns)
,"cross",&vector3::cross
,"transposed",&vector3::transposed
,"lerp",&vector3::lerp
,"forward",&vector3::forward
,"backward",&vector3::backward
,"left",&vector3::left
,"right",&vector3::right
,"up",&vector3::up
,"down",&vector3::down
);
ns.new_usertype<vector4>("vector4"
,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
);
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;})
@ -77,11 +95,6 @@ void register_core_function(sol::state& lua,sol::table& ns)
, "height",&size::height
);
ns.new_usertype<sizei>("sizei"
, sol::constructors<sizei(),sizei(int,int)>()
, "width",&sizei::width
, "height",&sizei::height
);
ns.new_usertype<point>("point",
sol::constructors<point(),point(Scalar,Scalar)>(),
@ -109,13 +122,18 @@ void register_core_function(sol::state& lua,sol::table& ns)
, "topology", sol::property(&geometry::topology,&geometry::set_topology)
, "vertices", sol::property(&geometry::vertices,&geometry::set_vertices)
, "indices", sol::property(&geometry::indices,&geometry::set_indices)
).new_enum<false>("type"
, "", &geometry::compute_normals
).new_enum<false>("geometry_type"
,"points", geometry::topology_type::points
, "lines", geometry::topology_type::lines
, "line_strip", geometry::topology_type::line_strip
, "triangles", geometry::topology_type::triangles);
ns.new_usertype<matrix_transform<real_t>>("matrixtransform"
,"new",sol::no_constructor
,"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

View file

@ -2,6 +2,8 @@
#include "pw/core/debug.hpp"
#include "pw/visual/pipeline.hpp"
#include "pw/visual/shader.hpp"
#include "pw/visual/framebuffer.hpp"
#include "pw/core/size.hpp"
#include "runtime_lua.hpp"
@ -10,26 +12,29 @@ namespace pw {
void register_visual_function(sol::state&,sol::table &ns)
{
ns.new_usertype<pipeline>("pipeline"
ns.new_usertype<pipeline>("pipeline"
,"create",&pipeline::create
,"draw",&pipeline::draw
,"draw",&pipeline::draw
);
ns.new_usertype<shader>("shader"
ns.new_usertype<shader>("shader"
,sol::constructors<shader()>()
,"ready",sol::readonly_property(&shader::ready)
,"use",&shader::use
,"ready",sol::readonly_property(&shader::ready)
,"use",&shader::use
,"build",&shader::build
,"source",&shader::source
,"set_source",&shader::set_source
,"set_uniforms",&shader::set_uniforms
,"set_uniform_float",&shader::set_uniform<float>
,"set_uniform_mat4",&shader::set_uniform<matrix4x4&>
,"set_uniform_vec4",&shader::set_uniform<vector4&>
).new_enum<false>("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);
ns.new_usertype<render_pass>("render_pass"
@ -40,7 +45,20 @@ void register_visual_function(sol::state&,sol::table &ns)
,"color",sol::property(&material::_color));
ns.new_usertype<mesh_renderer>("mesh_renderer");
ns.new_usertype<mesh_renderer>("mesh_renderer"
,sol::constructors<mesh_renderer(),mesh_renderer(const geometry&)>()
,"create",&mesh_renderer::create
,"ready",sol::readonly_property(&mesh_renderer::ready)
,"release",&mesh_renderer::release
,"draw",&mesh_renderer::draw
);
ns.new_usertype<framebuffer>("framebuffer"
,sol::constructors<framebuffer()>()
,"create",&framebuffer::create
,"bind",&framebuffer::bind
,"unbind",&framebuffer::unbind
,"blit",&framebuffer::blit);
}
PW_REGISTER_LUA(visual)