diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 975553a..9aa5d4d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,7 +6,7 @@ add_subdirectory(system) add_subdirectory(io) #add_subdirectory(ui) -add_subdirectory(scripting) +add_subdirectory(binding) add_subdirectory(visual) add_subdirectory(geometry) diff --git a/src/binding/CMakeLists.txt b/src/binding/CMakeLists.txt index 1ce611f..94f42c6 100644 --- a/src/binding/CMakeLists.txt +++ b/src/binding/CMakeLists.txt @@ -14,7 +14,7 @@ set(srcs src/runtime_lua.cpp ) -add_library(pwscripting +add_library(pwbinding STATIC ${hdrs} ${srcs} @@ -22,7 +22,7 @@ add_library(pwscripting target_include_directories( - pwscripting + pwbinding PRIVATE ${CMAKE_SOURCE_DIR}/src/deps/lua-5.3.5/src ${CMAKE_SOURCE_DIR}/src/deps/sol2-2.20.6 @@ -30,7 +30,7 @@ target_include_directories( include ) -target_link_libraries(pwscripting +target_link_libraries(pwbinding lualib pwcore pwsystem diff --git a/src/core/include/pw/core/mesh.hpp b/src/core/include/pw/core/mesh.hpp index b03b1e7..2dc719d 100644 --- a/src/core/include/pw/core/mesh.hpp +++ b/src/core/include/pw/core/mesh.hpp @@ -73,6 +73,7 @@ public: void compute_normals(); + void compute_bounds(); protected: @@ -90,10 +91,6 @@ protected: // TODO add weights, tangents etc. pp. -private: - - void compute_bounds(); - }; } diff --git a/src/core/src/mesh.cpp b/src/core/src/mesh.cpp index cbd4377..27598ee 100644 --- a/src/core/src/mesh.cpp +++ b/src/core/src/mesh.cpp @@ -15,7 +15,7 @@ void mesh::compute_normals() vertex3array_t normals; normals.resize(_vertices.size()); // for indexed-faceset - for (auto i = 1; i < _indices.size()-1;i++) + for (size_t i = 1; i < _indices.size()-1;i++) { // left index and right index auto il = (i - 1 + _indices.size()) % _indices.size(); @@ -26,13 +26,12 @@ void mesh::compute_normals() auto li = _indices[il]; auto ri = _indices[ir]; - // calculate delta vectors - auto dL = vector3( _vertices[li] - _vertices[ci] ); - auto dR = vector3( _vertices[ri] - _vertices[ci] ); + // calculate edges between vertices + auto edgeLeft = vector3( _vertices[li] - _vertices[ci] ); + auto edgeRight = vector3( _vertices[ri] - _vertices[ci] ); - auto N = dR.cross(dL).normalized(); - - //auto dV = _vertices[idx0].cross(_vertices[idx1]); + // calculate counter clockwise and normalize + auto N = edgeRight.cross(edgeLeft).normalized(); // NOTE that addition is ugly normals[ci] = N + normals[ci]; diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index 734e8ba..fed439f 100644 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -24,7 +24,7 @@ target_include_directories(pixwerx ) target_link_libraries(pixwerx - pwscripting + pwbinding # -Wl,--whole-archive -lpwscripting -Wl,--no-whole-archive pwcore pwsystem) diff --git a/src/system/include/pw/system/window.hpp b/src/system/include/pw/system/window.hpp index 0a9d585..1d4c0a6 100644 --- a/src/system/include/pw/system/window.hpp +++ b/src/system/include/pw/system/window.hpp @@ -39,11 +39,11 @@ public: void set_visible(bool is_visible); protected: - on_update_t _on_update; - struct impl; std::unique_ptr _impl; + on_update_t _on_update; + }; } diff --git a/src/system/src/path.cpp b/src/system/src/path.cpp index 8bf0219..cce345d 100644 --- a/src/system/src/path.cpp +++ b/src/system/src/path.cpp @@ -84,9 +84,10 @@ std::string path::executable_path() const return result; } -std::string path::find_file(const std::string& filename) const +std::string path::find_file(const std::string&) const { -// for () + // TODO: Implement + return std::string(); } path::path() diff --git a/src/system/src/window.cpp b/src/system/src/window.cpp index e8a50d9..635dae7 100644 --- a/src/system/src/window.cpp +++ b/src/system/src/window.cpp @@ -48,6 +48,11 @@ struct window::impl { // window_context _context; + static void error_callback(int error, const char* description) + { + debug::e() << "GLFW error: " << description; + } + static void drop_callback(GLFWwindow* window, int count, const char** paths) { // std::cout << __FUNCTION__ << std::endl; @@ -73,12 +78,13 @@ struct window::impl { input::get()._mouse_position = pointd(xpos,ypos).cast(); } + static void key_callback(GLFWwindow *window,int key, int scancode, int action, int mods) { input::get()._key_code = scancode; input::get()._key_pressed = action; // action 0,1,2 -// std::cout << __FUNCTION__ << action << std::endl; + // std::cout << __FUNCTION__ << action << std::endl; } // static void character_callback(GLFWwindow* window, unsigned int codepoint) @@ -107,66 +113,69 @@ struct window::impl { // glViewport(0, 0, width, height); } - void update_display_list() - { - display::_displays.clear(); + void update_display_list() + { + display::_displays.clear(); - // fetch all monitors - int monitor_count = 0; - GLFWmonitor** monitors = glfwGetMonitors(&monitor_count); + // fetch all monitors + int monitor_count = 0; + GLFWmonitor** monitors = glfwGetMonitors(&monitor_count); - for (int i = 0; i < monitor_count;i++) { - display d; - d._name = std::string(glfwGetMonitorName(monitors[i])); + for (int i = 0; i < monitor_count;i++) { + display d; + d._name = std::string(glfwGetMonitorName(monitors[i])); - display::_displays.push_back(d); + display::_displays.push_back(d); -// debug::d() << - } + // debug::d() << + } -// GLFWvidmode -// glfwGetVideoModes() ... get all -// glfwGetVideoMode( . get current -// glfwGetMonitorPos( -// glfwGetMonitorPhysicalSize( -// glfwGetMonitorName(); + // GLFWvidmode + // glfwGetVideoModes() ... get all + // glfwGetVideoMode( . get current + // glfwGetMonitorPos( + // glfwGetMonitorPhysicalSize( + // glfwGetMonitorName(); - } + } impl(window& w) : _parent(w) { - // initialize - glfwInit(); + // initialize + if (!glfwInit()) + { + debug::e() << "Initalization error"; + } - update_display_list(); + update_display_list(); // request specific version 3.3 - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - // - _window = glfwCreateWindow(640, 480, "pixwerxs", nullptr, nullptr); + // + _window = glfwCreateWindow(640, 480, "pixwerx", nullptr, nullptr); - // make window current - glfwMakeContextCurrent(_window); + // make window current + glfwMakeContextCurrent(_window); - // load opengl - if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) - { - debug::e() << "glad couldn't get OpenGL API"; - } + // load opengl + if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) + { + debug::e() << "glad couldn't get OpenGL API"; + } - // check Version - int major, minor, rev; - major = glfwGetWindowAttrib(_window, GLFW_CONTEXT_VERSION_MAJOR); - minor = glfwGetWindowAttrib(_window, GLFW_CONTEXT_VERSION_MINOR); - rev = glfwGetWindowAttrib(_window, GLFW_CONTEXT_REVISION); + // check Version + int major, minor, rev; + major = glfwGetWindowAttrib(_window, GLFW_CONTEXT_VERSION_MAJOR); + minor = glfwGetWindowAttrib(_window, GLFW_CONTEXT_VERSION_MINOR); + rev = glfwGetWindowAttrib(_window, GLFW_CONTEXT_REVISION); - // maybe something to pass to the outside - debug::d() << "OpenGL " << major << "." << minor << "." << rev; + // maybe something to pass to the outside + debug::d() << "OpenGL " << major << "." << minor << "." << rev; glfwSetWindowUserPointer(_window,this); @@ -182,7 +191,10 @@ struct window::impl { glfwSetMouseButtonCallback(_window, mouse_button_callback); glfwSetScrollCallback(_window, scroll_callback); -// glfwSetWindowCloseCallback(_window,close_callback); + + glfwSetErrorCallback(error_callback); + + //glfwSetWindowCloseCallback(_window,close_callback); } ~impl() @@ -192,24 +204,23 @@ struct window::impl { bool update() { - if (!glfwWindowShouldClose(_window)) { + if (_window && !glfwWindowShouldClose(_window)) + { - - // reset input - input::get().reset(); - - // get new events - glfwPollEvents(); + // // reset input + // input::get().reset(); _parent._on_update(_parent); glfwSwapBuffers(_window); + // // get new events + glfwPollEvents(); + return true; } return false; - } void set_title(const std::string& title) @@ -290,8 +301,6 @@ struct window::impl { // // // - - window::window() : _impl(std::make_unique(*this)) , _on_update([](window&){})