From 42c9fac38ef33cb9688796a17e8a1bafd6c7f645 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Sun, 24 Jan 2021 21:54:29 +0100 Subject: [PATCH] WiP --- src/binding/src/script_core.cpp | 33 +++++++++++++++++++++++- src/binding/src/script_system.cpp | 1 + src/binding/src/script_visual.cpp | 7 +++++ src/core/include/pw/core/rectangle.hpp | 25 ++++++++++++------ src/scripts/demos/simple_002.lua | 8 +++++- src/visual/CMakeLists.txt | 3 ++- src/visual/include/pw/visual/context.hpp | 5 +++- src/visual/src/context.cpp | 21 ++++++++++++--- src/visual/src/texture.cpp | 2 -- 9 files changed, 87 insertions(+), 18 deletions(-) diff --git a/src/binding/src/script_core.cpp b/src/binding/src/script_core.cpp index f7c4f9a..ae9db28 100644 --- a/src/binding/src/script_core.cpp +++ b/src/binding/src/script_core.cpp @@ -8,6 +8,7 @@ #include "pw/core/geometry.hpp" #include "pw/core/image.hpp" #include "pw/core/matrix_transform.hpp" +#include "pw/core/rectangle.hpp" #include "runtime_lua.hpp" @@ -18,11 +19,30 @@ template <> struct is_automagical : std::false_type {}; template <> struct is_automagical : std::false_type {}; template <> struct is_automagical : std::false_type {}; template <> struct is_automagical : std::false_type {}; +template <> struct is_automagical : std::false_type {}; } namespace pw { -void register_core_function(sol::state& lua,sol::table& ns) + +rectangle from_lua_table(sol::table t) +{ + float v[4]; + + for (std::size_t i {1}; i <= t.size();i++){ + v[i-1] = t[i]; + } + return rectangle(v); +} + +vector3 vector3_from_lua_table(sol::table t) +{ + + return vector3(); +} + + +void register_core_function(sol::state&,sol::table& ns) { typedef real_t Scalar; @@ -93,8 +113,15 @@ void register_core_function(sol::state& lua,sol::table& ns) , sol::constructors() , "width",&size::width , "height",&size::height + , "cast_to_float",&size::cast ); + ns.new_usertype("sizef" + , sol::constructors() + , "width",&sizef::width + , "height",&sizef::height + , "cast_to_int",&sizef::cast + ); ns.new_usertype("point", sol::constructors(), @@ -154,6 +181,10 @@ void register_core_function(sol::state& lua,sol::table& ns) ,"gray", image::LUM); + ns.new_usertype("rectangle" + ,sol::constructors&,const size_&)>() + ); + auto mathf_table = ns.create_named("mathf"); mathf_table.set_function("ping_pong",ping_pong); diff --git a/src/binding/src/script_system.cpp b/src/binding/src/script_system.cpp index 411d68c..8c12cf8 100644 --- a/src/binding/src/script_system.cpp +++ b/src/binding/src/script_system.cpp @@ -45,6 +45,7 @@ void register_system_function(sol::state&, sol::table &ns) ,"new", sol::no_constructor ,"get",&path::get ,"separator",sol::readonly_property(&path::separator) + ,"resource_paths",sol::readonly_property(&path::resource_paths) ,"executable_path",sol::readonly_property(&path::executable_path) ); } diff --git a/src/binding/src/script_visual.cpp b/src/binding/src/script_visual.cpp index d8ec985..39bcf85 100644 --- a/src/binding/src/script_visual.cpp +++ b/src/binding/src/script_visual.cpp @@ -4,6 +4,7 @@ #include "pw/visual/shader.hpp" #include "pw/visual/framebuffer.hpp" #include "pw/visual/texture.hpp" +#include "pw/visual/context.hpp" #include "pw/core/size.hpp" @@ -62,6 +63,12 @@ void register_visual_function(sol::state&,sol::table &ns) ,sol::constructors() ,"image",sol::property(&texture::set_image,&texture::image) ); + + ns.new_usertype("context" + ,sol::constructors() + ,"clear",&context::clear + ,"set_viewport",&context::set_viewport + ); } PW_REGISTER_LUA(visual) diff --git a/src/core/include/pw/core/rectangle.hpp b/src/core/include/pw/core/rectangle.hpp index 700a183..96eef21 100644 --- a/src/core/include/pw/core/rectangle.hpp +++ b/src/core/include/pw/core/rectangle.hpp @@ -20,8 +20,8 @@ * SOFTWARE. * */ -#ifndef PW_CORE_RECT_HPP -#define PW_CORE_RECT_HPP +#ifndef PW_CORE_RECTANGLE_HPP +#define PW_CORE_RECTANGLE_HPP #include @@ -38,10 +38,16 @@ struct rectangle_ { rectangle_() = default; - rectangle_(const T_(&l)[4]) + rectangle_(const T_ l[4]) + : position(point_(l[0],l[1])) + , size(size_(l[2],l[3])) + { + } + + rectangle_(const T_(&l)[4]) + : position(point_(l[0],l[1])) + , size(size_(l[2],l[3])) { - position.x = l[0]; position.y = l[1]; - size.width = l[2]; size.height = l[3]; } rectangle_(point_ const & p,size_ const & s) : size(s), position(p) {} @@ -53,11 +59,14 @@ struct rectangle_ { } template - rectangle_ cast() const { return rectangle_(position.template cast(),size.template cast()); } - + rectangle_ cast() const + { + return rectangle_(position.template cast(),size.template cast()); + } }; -using rectangle = rectangle_; +using rectangle = rectangle_; +using rectanglei = rectangle_; using rectanglef = rectangle_; using rectangled = rectangle_; diff --git a/src/scripts/demos/simple_002.lua b/src/scripts/demos/simple_002.lua index 39343ee..446cb61 100644 --- a/src/scripts/demos/simple_002.lua +++ b/src/scripts/demos/simple_002.lua @@ -6,6 +6,8 @@ pw.script:load_all() +print(pw.path.get().executable_path) + -- create a window (remember windows are invisible by default) local w = pw.window.new() @@ -90,16 +92,20 @@ end local cam_pos = pw.vector3:new(0,0,0) +local ctx = pw.context:new() + w.on_resize = function(self) -- use client_size to resize the viewport - print(self.client_size.width,self.client_size.height) + ctx:set_viewport(pw.rectangle:new(pw.point:new(0,0),self.client_size:cast_to_float())) end + -- setup a lua callback function as callback w.on_update = function(self) -- set identity on model matrix mm:set_identity() + -- set view matrix with look_at mv = pw.matrixtransform.look_at(cam_pos,pw.vector3.forward(),pw.vector3.up()) diff --git a/src/visual/CMakeLists.txt b/src/visual/CMakeLists.txt index b9c870f..1294b8f 100644 --- a/src/visual/CMakeLists.txt +++ b/src/visual/CMakeLists.txt @@ -1,5 +1,6 @@ set(hdrs + include/pw/visual/context.hpp include/pw/visual/framebuffer.hpp include/pw/visual/shader.hpp include/pw/visual/pipeline.hpp @@ -8,9 +9,9 @@ set(hdrs ) set(srcs + src/context.cpp src/framebuffer.cpp src/shader.cpp - src/context.cpp src/pass.cpp src/pipeline.cpp src/target.cpp diff --git a/src/visual/include/pw/visual/context.hpp b/src/visual/include/pw/visual/context.hpp index 6d5c9eb..e0620c4 100644 --- a/src/visual/include/pw/visual/context.hpp +++ b/src/visual/include/pw/visual/context.hpp @@ -27,6 +27,7 @@ #include #include #include +#include namespace pw { @@ -40,7 +41,9 @@ public: void set_blend(); void set_depth(); - void set_viewport(point const &p, size const &s); + void set_viewport(const rectangle& v); + rectangle viewport() const; + size viewport_size() const; point viewport_origin() const; diff --git a/src/visual/src/context.cpp b/src/visual/src/context.cpp index b816aea..38d3ffc 100644 --- a/src/visual/src/context.cpp +++ b/src/visual/src/context.cpp @@ -6,9 +6,17 @@ namespace pw { struct context::impl { - void set_viewport(const point &p, const size &s) + + void set_viewport(const rectangle& v) { - glViewport(p.x,p.y,s.width,s.height); + glViewport(v.position.x,v.position.y,v.size.width,v.size.height); + } + + const rectangle viewport() + { + float _viewport[4] = {0,0,1,1}; + glGetFloatv(GL_VIEWPORT,&_viewport[0]); + return rectangle(_viewport); } void clear() @@ -31,9 +39,14 @@ void context::set_blend() } -void context::set_viewport(const point &p, const size &s) +void context::set_viewport(const rectangle& v) { - _impl->set_viewport(p,s); + _impl->set_viewport(v); +} + +rectangle context::viewport() const +{ + return _impl->viewport(); } void context::clear() diff --git a/src/visual/src/texture.cpp b/src/visual/src/texture.cpp index 34a12e2..dbff643 100644 --- a/src/visual/src/texture.cpp +++ b/src/visual/src/texture.cpp @@ -136,7 +136,6 @@ void texture::set_wrap(wrap_mode w) _wrap = w; } - uint32_t texture::native_handle() const { return _impl->_texture_id; @@ -147,5 +146,4 @@ uint32_t texture::native_sampler_handle() const return _impl->_texture_sampler; } - }