From 9773103a184d5975c0d66bf027751d54a78b5ba2 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Sun, 13 Jan 2019 22:14:41 +0100 Subject: [PATCH] wiggling around with the whole notion of what a renderer does and what not. Added simple wrapper for GLFWmonitor named display --- share/CMakeLists.txt | 30 ++--- share/doc/pixwerx.xmind | Bin 126884 -> 133033 bytes src/scripting/src/script_system.cpp | 12 +- src/scripts/demos/simple_000.lua | 5 + src/system/CMakeLists.txt | 2 + src/system/include/pw/system/display.hpp | 29 ++++ src/system/src/display.cpp | 10 ++ src/system/src/window.cpp | 60 ++++++--- src/visual/CMakeLists.txt | 3 +- .../include/pw/visual/mesh_renderer.hpp | 4 +- src/visual/include/pw/visual/pipeline.hpp | 13 ++ src/visual/src/mesh_renderer.cpp | 108 --------------- src/visual/src/pipeline.cpp | 124 ++++++++++++++++++ 13 files changed, 252 insertions(+), 148 deletions(-) create mode 100644 src/system/include/pw/system/display.hpp create mode 100644 src/system/src/display.cpp create mode 100644 src/visual/include/pw/visual/pipeline.hpp create mode 100644 src/visual/src/pipeline.cpp diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index eb0be27..0ad654b 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -1,20 +1,20 @@ find_package(mkdocs 1.0) # if(MKDOCS_FOUND) -# configure_file(mkdocs.yml "${CMAKE_CURRENT_BINARY_DIR}/mkdocs.yml" COPYONLY) -# set(MKDOCS_FLAGS -# --site-dir "${CMAKE_CURRENT_BINARY_DIR}/docs/user/" -# --config-file "${CMAKE_CURRENT_BINARY_DIR}/mkdocs.yml" -# ) -# if(DEBUG_MODE) -# list(APPEND MKDOCS_FLAGS --clean --verbose) -# endif() -# add_custom_target(docs-user -# ${MKDOCS_EXECUTABLE} build ${MKDOCS_FLAGS} -# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" -# COMMENT "Generating user documentation" -# ) -# add_dependencies(docs docs-user) +# configure_file(mkdocs.yml "${CMAKE_CURRENT_BINARY_DIR}/mkdocs.yml" COPYONLY) +# set(MKDOCS_FLAGS +# --site-dir "${CMAKE_CURRENT_BINARY_DIR}/docs/user/" +# --config-file "${CMAKE_CURRENT_BINARY_DIR}/mkdocs.yml" +# ) +# if(DEBUG_MODE) +# list(APPEND MKDOCS_FLAGS --clean --verbose) +# endif() +# add_custom_target(docs-user +# ${MKDOCS_EXECUTABLE} build ${MKDOCS_FLAGS} +# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" +# COMMENT "Generating user documentation" +# ) +# add_dependencies(docs docs-user) # else() -# message(STATUS "SKIPPING generation of user documentation (mkdocs not found)") +# message(STATUS "SKIPPING generation of user documentation (mkdocs not found)") # endif() diff --git a/share/doc/pixwerx.xmind b/share/doc/pixwerx.xmind index 6e061eba0dd11384bd12397d7a73ee41dff37421..5c96f0fd8640e794d3c2264ac5ec9106aecdb9cf 100644 GIT binary patch delta 46400 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 RCWHyOO$7$wZ7@zF{{x}v-(LU# delta 45633 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 diff --git a/src/scripting/src/script_system.cpp b/src/scripting/src/script_system.cpp index d5629e2..7ef8d35 100644 --- a/src/scripting/src/script_system.cpp +++ b/src/scripting/src/script_system.cpp @@ -2,6 +2,7 @@ #include "pw/system/window.hpp" #include "pw/system/input.hpp" +#include "pw/system/display.hpp" namespace pw { @@ -11,8 +12,8 @@ void script_system::load(sol::table &ns) "update",&window::update, "title",sol::writeonly_property(&window::set_title), "size",sol::property(&window::size,&window::set_size), - "position",sol::property(&window::position,&window::set_position), - "fullscreen",sol::property(&window::fullscreen,&window::set_fullscreen) + "position",sol::property(&window::position,&window::set_position), + "fullscreen",sol::property(&window::fullscreen,&window::set_fullscreen) ); ns.new_usertype("input", @@ -20,9 +21,14 @@ void script_system::load(sol::table &ns) "get",&input::get, "mouse_position",sol::readonly_property(&input::mouse_position), "mouse_button",sol::readonly_property(&input::mouse_button), - "mouse_pressed",sol::readonly_property(&input::mouse_pressed), + "mouse_pressed",sol::readonly_property(&input::mouse_pressed), "input_string",sol::readonly_property(&input::input_string) ); + + ns.new_usertype("display", + "all",&display::all, + "name",sol::readonly_property(&display::name) + ); } } diff --git a/src/scripts/demos/simple_000.lua b/src/scripts/demos/simple_000.lua index 3f69c1e..9b83a59 100644 --- a/src/scripts/demos/simple_000.lua +++ b/src/scripts/demos/simple_000.lua @@ -73,6 +73,11 @@ w.title = "pixwerx 0.1" -- set size w.size = pw.size.new(1200,800) +local ds = pw.display:all() +for i = 1,#ds do + print("display ",i,ds[i].name) +end + while w:update() do diff --git a/src/system/CMakeLists.txt b/src/system/CMakeLists.txt index f475113..08b2781 100644 --- a/src/system/CMakeLists.txt +++ b/src/system/CMakeLists.txt @@ -2,9 +2,11 @@ set(hdrs include/pw/system/window.hpp include/pw/system/input.hpp + include/pw/system/display.hpp ) set(srcs + src/display.cpp src/window.cpp src/input.cpp ) diff --git a/src/system/include/pw/system/display.hpp b/src/system/include/pw/system/display.hpp new file mode 100644 index 0000000..e85fafc --- /dev/null +++ b/src/system/include/pw/system/display.hpp @@ -0,0 +1,29 @@ +#ifndef PW_SYSTEM_DISPLAY_HPP +#define PW_SYSTEM_DISPLAY_HPP + +#include +#include + +namespace pw { + +class display { +public: + + typedef std::vector list; + + static const list& all() { return _displays; } + + std::string name() const { return _name; } + +protected: + friend class window; + + std::string _name; + + static list _displays; + +}; + +} + +#endif diff --git a/src/system/src/display.cpp b/src/system/src/display.cpp new file mode 100644 index 0000000..d722399 --- /dev/null +++ b/src/system/src/display.cpp @@ -0,0 +1,10 @@ +#include "pw/system/display.hpp" + + + +namespace pw { + + +display::list display::_displays; + +} diff --git a/src/system/src/window.cpp b/src/system/src/window.cpp index 80e3aea..fd3b180 100644 --- a/src/system/src/window.cpp +++ b/src/system/src/window.cpp @@ -1,10 +1,12 @@ #include "pw/system/window.hpp" +#include "glad/glad.h" #include "GLFW/glfw3.h" -//#include "glad/glad.h" #include "pw/visual/context.hpp" #include "pw/system/input.hpp" +#include "pw/system/display.hpp" + #include "pw/core/debug.hpp" #include @@ -97,37 +99,65 @@ struct window::impl { // glViewport(0, 0, width, height); } + void update_display_list() + { + display::_displays.clear(); + + // 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])); + + display::_displays.push_back(d); + +// debug::d() << + } + +// GLFWvidmode +// glfwGetVideoModes() ... get all +// glfwGetVideoMode( . get current +// glfwGetMonitorPos( +// glfwGetMonitorPhysicalSize( +// glfwGetMonitorName(); + + } + impl() { // initialize glfwInit(); + update_display_list(); + // request specific version 3.2 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - // _window = glfwCreateWindow(640, 480, "pixwerxs", nullptr, nullptr); + // make window current + glfwMakeContextCurrent(_window); + + // 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); - // maybe something to pass to the outside -// debug::d() << "OpenGL " << major << "." << minor << "." << rev; - - -// if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) -// { -// debug::e() << "G"; -// return -1; -// } + debug::d() << "OpenGL " << major << "." << minor << "." << rev; glfwSetWindowUserPointer(_window,this); @@ -142,14 +172,6 @@ struct window::impl { glfwSetCursorPosCallback(_window, cursor_pos_callback); glfwSetMouseButtonCallback(_window, mouse_button_callback); glfwSetScrollCallback(_window, scroll_callback); - - -#if 0 - glfwMakeContextCurrent(_window); - - gladLoadGLLoader((GLADloadproc) glfwGetProcAddress); - -#endif } ~impl() diff --git a/src/visual/CMakeLists.txt b/src/visual/CMakeLists.txt index 3e89d52..6d48f62 100644 --- a/src/visual/CMakeLists.txt +++ b/src/visual/CMakeLists.txt @@ -2,13 +2,14 @@ set(hdrs include/pw/visual/mesh_renderer.hpp include/pw/visual/shader.hpp - include/pw/visual/context.hpp + include/pw/visual/pipeline.hpp ) set(srcs src/mesh_renderer.cpp src/shader.cpp src/context.cpp + src/pipeline.cpp ) add_library(pwvisual diff --git a/src/visual/include/pw/visual/mesh_renderer.hpp b/src/visual/include/pw/visual/mesh_renderer.hpp index f923321..76ba99d 100644 --- a/src/visual/include/pw/visual/mesh_renderer.hpp +++ b/src/visual/include/pw/visual/mesh_renderer.hpp @@ -1,5 +1,5 @@ -#ifndef PW_VISUAL_RENDERER_HPP -#define PW_VISUAL_RENDERER_HPP +#ifndef PW_VISUAL_MESH_RENDERER_HPP +#define PW_VISUAL_MESH_RENDERER_HPP #include #include diff --git a/src/visual/include/pw/visual/pipeline.hpp b/src/visual/include/pw/visual/pipeline.hpp new file mode 100644 index 0000000..a591b87 --- /dev/null +++ b/src/visual/include/pw/visual/pipeline.hpp @@ -0,0 +1,13 @@ +#ifndef PW_VISUAL_PIPELINE_HPP +#define PW_VISUAL_PIPELINE_HPP + +#include +#include + +#include + +namespace pw { + +} + +#endif diff --git a/src/visual/src/mesh_renderer.cpp b/src/visual/src/mesh_renderer.cpp index 163dee4..a4051ef 100644 --- a/src/visual/src/mesh_renderer.cpp +++ b/src/visual/src/mesh_renderer.cpp @@ -65,114 +65,6 @@ struct mesh_renderer::impl { }; -struct renderer { - - sizei _size; - - GLuint _fbo_draw; - GLuint _fbo_msaa; - - GLuint rboColorId; - GLuint rboDepthId; - - bool create() - { - int max_msaa; - - // query actual maximum MSAA - glGetIntegerv(GL_MAX_SAMPLES,&max_msaa); - - // create a 4x MSAA renderbuffer object for colorbuffer - int msaa = 4; - -// msaa = std::clamp(msaa,max_msaa); - - glGenRenderbuffers(1, &rboColorId); - glBindRenderbuffer(GL_RENDERBUFFER, rboColorId); - glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_RGB8, _size.width, _size.height); - - // create a 4x MSAA renderbuffer object for depthbuffer - - glGenRenderbuffers(1, &rboDepthId); - glBindRenderbuffer(GL_RENDERBUFFER, rboDepthId); - glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_DEPTH_COMPONENT, _size.width, _size.height); - - // create a 4x MSAA framebuffer object - glGenFramebuffers(1, &_fbo_msaa); - glBindFramebuffer(GL_FRAMEBUFFER, _fbo_msaa); - - // attach colorbuffer image to FBO - glFramebufferRenderbuffer(GL_FRAMEBUFFER, // 1. fbo target: GL_FRAMEBUFFER - GL_COLOR_ATTACHMENT0, // 2. color attachment point - GL_RENDERBUFFER, // 3. rbo target: GL_RENDERBUFFER - rboColorId); // 4. rbo ID - - // attach depthbuffer image to FBO - glFramebufferRenderbuffer(GL_FRAMEBUFFER, // 1. fbo target: GL_FRAMEBUFFER - GL_DEPTH_ATTACHMENT, // 2. depth attachment point - GL_RENDERBUFFER, // 3. rbo target: GL_RENDERBUFFER - rboDepthId); // 4. rbo ID - - // check FBO status - if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - return false; - - return true; - } - - void draw() - { - /* We are going to blit into the window (default framebuffer) */ - glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0); - glDrawBuffer (GL_BACK); /* Use backbuffer as color dst. */ - - /* Read from your FBO */ - glBindFramebuffer (GL_READ_FRAMEBUFFER, _fbo_draw ); - glReadBuffer (GL_COLOR_ATTACHMENT0); /* Use Color Attachment 0 as color src. */ - - /* Copy the color and depth buffer from your FBO to the default framebuffer */ - glBlitFramebuffer (0,0, _size.width, _size.height, - 0,0, _size.width, _size.height, - GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, - GL_NEAREST); - } - -}; - - -class pipeline; - -class pass -{ -public: - virtual void apply(pipeline& p); -}; - -class pipeline -{ - -public: - void apply() - { - for (auto p : _passes) p.apply(*this); - } - -protected: - std::vector _passes; -}; - - - -//pipeline > -// n*pass -// shadow_pass -// lighting_pass -// mesh_pass -// compositor_pass - -//compositor -// render to fbo > add a -// glBlitFramebuffer .. https://stackoverflow.com/questions/29254574/using-glblitframebuffer-to-display-a-texture } diff --git a/src/visual/src/pipeline.cpp b/src/visual/src/pipeline.cpp new file mode 100644 index 0000000..2bb725c --- /dev/null +++ b/src/visual/src/pipeline.cpp @@ -0,0 +1,124 @@ +#include "pw/core/size.hpp" +#include "pw/core/matrix.hpp" + +#include "glad/glad.h" + +namespace pw { + +struct pipeline { + + sizei _size; + + GLuint _fbo_draw; + GLuint _fbo_msaa; + + GLuint rboColorId; + GLuint rboDepthId; + + bool create() + { + int max_msaa; + + // query actual maximum MSAA + glGetIntegerv(GL_MAX_SAMPLES,&max_msaa); + + // create a 4x MSAA renderbuffer object for colorbuffer + int msaa = 4; + +// msaa = std::clamp(msaa,max_msaa); + + glGenRenderbuffers(1, &rboColorId); + glBindRenderbuffer(GL_RENDERBUFFER, rboColorId); + glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_RGB8, _size.width, _size.height); + + // create a 4x MSAA renderbuffer object for depthbuffer + + glGenRenderbuffers(1, &rboDepthId); + glBindRenderbuffer(GL_RENDERBUFFER, rboDepthId); + glRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa, GL_DEPTH_COMPONENT, _size.width, _size.height); + + // create a 4x MSAA framebuffer object + glGenFramebuffers(1, &_fbo_msaa); + glBindFramebuffer(GL_FRAMEBUFFER, _fbo_msaa); + + // attach colorbuffer image to FBO + glFramebufferRenderbuffer(GL_FRAMEBUFFER, // 1. fbo target: GL_FRAMEBUFFER + GL_COLOR_ATTACHMENT0, // 2. color attachment point + GL_RENDERBUFFER, // 3. rbo target: GL_RENDERBUFFER + rboColorId); // 4. rbo ID + + // attach depthbuffer image to FBO + glFramebufferRenderbuffer(GL_FRAMEBUFFER, // 1. fbo target: GL_FRAMEBUFFER + GL_DEPTH_ATTACHMENT, // 2. depth attachment point + GL_RENDERBUFFER, // 3. rbo target: GL_RENDERBUFFER + rboDepthId); // 4. rbo ID + + // check FBO status + if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) + return false; + + return true; + } + + void draw() + { + /* We are going to blit into the window (default framebuffer) */ + glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0); + glDrawBuffer (GL_BACK); /* Use backbuffer as color dst. */ + + /* Read from your FBO */ + glBindFramebuffer (GL_READ_FRAMEBUFFER, _fbo_draw ); + glReadBuffer (GL_COLOR_ATTACHMENT0); /* Use Color Attachment 0 as color src. */ + + /* Copy the color and depth buffer from your FBO to the default framebuffer */ + glBlitFramebuffer (0,0, _size.width, _size.height, + 0,0, _size.width, _size.height, + GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, + GL_NEAREST); + } + +}; + + +} + + + + +//class pipeline; + +//class pass +//{ +//public: +// virtual void apply(pipeline& p); +//}; + +//class pipeline +//{ + +//public: +// void apply() +// { +// for (auto p : _passes) p.apply(*this); +// } + +//protected: +// std::vector _passes; +//}; + + + + + + + +//pipeline > +// n*pass +// shadow_pass +// lighting_pass +// mesh_pass +// compositor_pass + +//compositor +// render to fbo > add a +// glBlitFramebuffer .. https://stackoverflow.com/questions/29254574/using-glblitframebuffer-to-display-a-texture