diff --git a/src/core/include/pw/core/image.hpp b/src/core/include/pw/core/image.hpp index cc4992b..cb8cd03 100644 --- a/src/core/include/pw/core/image.hpp +++ b/src/core/include/pw/core/image.hpp @@ -58,6 +58,8 @@ public: typedef shared_ptr ptr; + sizei size() const; + protected: sizei _size; diff --git a/src/core/src/image.cpp b/src/core/src/image.cpp index 76be05c..91a75ff 100644 --- a/src/core/src/image.cpp +++ b/src/core/src/image.cpp @@ -48,6 +48,11 @@ uint32_t image::bytes_per_pixel(image::pixel_layout t) return std::numeric_limits::max(); } +sizei image::size() const +{ + return _size; +} + image::pixel_layout image::layout() const { return _layout; diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt index 5326811..53af65b 100644 --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -5,6 +5,7 @@ set(scripts_demo set(scripts_test ${CMAKE_SOURCE_DIR}/src/scripts/tests/test_core.lua + ${CMAKE_SOURCE_DIR}/src/scripts/tests/test_io.lua ) add_executable(pixwerx WIN32 MACOSX_BUNDLE diff --git a/src/io/include/pw/io/image_io.hpp b/src/io/include/pw/io/image_io.hpp index 91113f3..909b845 100644 --- a/src/io/include/pw/io/image_io.hpp +++ b/src/io/include/pw/io/image_io.hpp @@ -37,13 +37,15 @@ public: bool write(const std::string& uri,uint32_t flags = 0); + ~image_io(); + + protected: struct impl; std::unique_ptr _impl; - image_io() = default; - ~image_io() = default; + image_io(); }; diff --git a/src/io/src/image_io.cpp b/src/io/src/image_io.cpp index aa2e3f0..f0ebc84 100644 --- a/src/io/src/image_io.cpp +++ b/src/io/src/image_io.cpp @@ -1,7 +1,8 @@ #include "pw/io/image_io.hpp" +#define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" -#include "stb_image_write.h" +// #include "stb_image_write.h" namespace pw { @@ -26,6 +27,11 @@ struct image_io::impl return image(); } + bool write(const std::string& uri, uint32_t flags) + { + return false; + } + }; @@ -40,4 +46,22 @@ image image_io::read(const std::string &uri, uint32_t flags) return _impl->read_impl(uri,flags); } +bool image_io::write(const std::string &uri, uint32_t flags) +{ + return _impl->write(uri,flags); +} + +// +// +// + +image_io::image_io() +{ + _impl = make_unique(); +} + +image_io::~image_io() +{ +} + } diff --git a/src/scripting/CMakeLists.txt b/src/scripting/CMakeLists.txt index d0b4082..1ce611f 100644 --- a/src/scripting/CMakeLists.txt +++ b/src/scripting/CMakeLists.txt @@ -1,36 +1,39 @@ set(hdrs - include/pw/scripting/script.hpp - ) + include/pw/scripting/script.hpp + ) set(srcs - src/script.cpp -# src/script_core.hpp + src/script.cpp src/script_core.cpp -# src/script_system.hpp src/script_system.cpp -# src/script_scene.hpp + src/script_io.cpp src/script_scene.cpp -# src/script_visual.hpp src/script_visual.cpp - src/runtime_lua.hpp - src/runtime_lua.cpp - ) + src/runtime_lua.hpp + src/runtime_lua.cpp + ) add_library(pwscripting - STATIC - ${hdrs} - ${srcs} - ) + STATIC + ${hdrs} + ${srcs} + ) target_include_directories( - pwscripting - PRIVATE - ${CMAKE_SOURCE_DIR}/src/deps/lua-5.3.5/src - ${CMAKE_SOURCE_DIR}/src/deps/sol2-2.20.6 - PUBLIC - include - ) + pwscripting + PRIVATE + ${CMAKE_SOURCE_DIR}/src/deps/lua-5.3.5/src + ${CMAKE_SOURCE_DIR}/src/deps/sol2-2.20.6 + PUBLIC + include + ) -target_link_libraries(pwscripting lualib pwcore pwsystem pwscene pwvisual) +target_link_libraries(pwscripting + lualib + pwcore + pwsystem + pwio + pwscene + pwvisual) diff --git a/src/scripting/src/script.cpp b/src/scripting/src/script.cpp index 0d24f5e..c4c68fe 100644 --- a/src/scripting/src/script.cpp +++ b/src/scripting/src/script.cpp @@ -10,6 +10,7 @@ namespace pw { PW_REGISTER_DECL_LUA(core) PW_REGISTER_DECL_LUA(system) +PW_REGISTER_DECL_LUA(io) PW_REGISTER_DECL_LUA(scene) PW_REGISTER_DECL_LUA(visual) @@ -89,6 +90,7 @@ void script::initialize() PW_REGISTER_USE_LUA(core) PW_REGISTER_USE_LUA(system) + PW_REGISTER_USE_LUA(io) PW_REGISTER_USE_LUA(scene) PW_REGISTER_USE_LUA(visual) diff --git a/src/scripting/src/script_core.cpp b/src/scripting/src/script_core.cpp index 1c27982..a9bf558 100644 --- a/src/scripting/src/script_core.cpp +++ b/src/scripting/src/script_core.cpp @@ -6,6 +6,7 @@ #include "pw/core/point.hpp" #include "pw/core/timer.hpp" #include "pw/core/mesh.hpp" +#include "pw/core/image.hpp" #include "runtime_lua.hpp" @@ -75,6 +76,12 @@ void register_core_function(sol::state& lua,sol::table& ns) , "height",&size::height ); + ns.new_usertype("sizei" + , sol::constructors() + , "width",&sizei::width + , "height",&sizei::height + ); + ns.new_usertype("point", sol::constructors(), "x",&point::x, @@ -109,6 +116,17 @@ void register_core_function(sol::state& lua,sol::table& ns) , "line_strip", mesh::topology_type::line_strip ); + ns.new_usertype("image" + ,"create",&image::create + ,"size",sol::readonly_property(&image::size) + ,"change_count",sol::property(&image::change_count,&image::set_change_count) + + ).new_enum("layout" + ,"rgb8", image::RGB8 + ,"rgb32", image::RGBA8 + ,"gray", image::LUM); + + } diff --git a/src/scripting/src/script_io.cpp b/src/scripting/src/script_io.cpp new file mode 100644 index 0000000..aebef78 --- /dev/null +++ b/src/scripting/src/script_io.cpp @@ -0,0 +1,21 @@ +#include "pw/io/image_io.hpp" +#include "runtime_lua.hpp" + + + +namespace pw { + + +void register_io_function(sol::state& lua,sol::table& ns) +{ + ns.new_usertype("imageio" + ,"new", sol::no_constructor + ,"get",&image_io::get + ,"read",&image_io::read + , "write",&image_io::write + ); +} + +PW_REGISTER_LUA(io) + +} diff --git a/src/scripts/tests/test_io.lua b/src/scripts/tests/test_io.lua new file mode 100644 index 0000000..bbe4838 --- /dev/null +++ b/src/scripts/tests/test_io.lua @@ -0,0 +1,11 @@ +-- +-- pixwerx - test - io +-- + +-- loading our libraries +pw.script:load_all() + +local img = pw.imageio:get():read("/home/hartmut/Development/pixwerx/share/assets/textures/checkerboard-512-32.png",0) + +print(img.size.width,img.size.height) + diff --git a/src/visual/src/pipeline.cpp b/src/visual/src/pipeline.cpp index b91d92f..8293d6e 100644 --- a/src/visual/src/pipeline.cpp +++ b/src/visual/src/pipeline.cpp @@ -1,10 +1,8 @@ - #include "pw/core/size.hpp" #include "pw/core/matrix.hpp" #include "pw/core/mesh.hpp" #include "pw/core/timer.hpp" - #include "pw/core/debug.hpp" #include "pw/visual/pipeline.hpp" #include "pw/visual/shader.hpp" @@ -19,7 +17,6 @@ class queue { // vector ... }; - struct triangle_renderer { GLuint vbo = 0; @@ -35,11 +32,8 @@ struct triangle_renderer { } - void setup() { - - mesh::vertex3array_t vertices = { { 0.0f, 0.5f, 0.0f} ,{ 0.5f, -0.5f, 0.0f}