update to add more functionality to the ECS and connect it to the rendering system
Signed-off-by: Hartmut Seichter <hartmut@technotecture.com>
This commit is contained in:
parent
a4f9308aa7
commit
8253756e4c
9 changed files with 76 additions and 50 deletions
|
@ -23,6 +23,8 @@
|
|||
#ifndef PW_CORE_RECT_HPP
|
||||
#define PW_CORE_RECT_HPP
|
||||
|
||||
#include <initializer_list>
|
||||
|
||||
#include <pw/core/point.hpp>
|
||||
#include <pw/core/size.hpp>
|
||||
|
||||
|
@ -31,11 +33,17 @@ namespace pw {
|
|||
template <typename T_>
|
||||
struct rectangle_ {
|
||||
|
||||
size_<T_> size;
|
||||
point_<T_> position;
|
||||
size_<T_> size;
|
||||
|
||||
rectangle_() = default;
|
||||
|
||||
rectangle_(const T_(&l)[4])
|
||||
{
|
||||
position.x = l[0]; position.y = l[1];
|
||||
size.width = l[2]; size.height = l[3];
|
||||
}
|
||||
|
||||
rectangle_(point_<T_> const & p,size_<T_> const & s) : size(s), position(p) {}
|
||||
|
||||
bool contains(const point_<T_>& p) const noexcept
|
||||
|
|
|
@ -8,6 +8,7 @@ set(hdrs_components
|
|||
include/pw/scene/components/relationship.hpp
|
||||
include/pw/scene/components/transform.hpp
|
||||
include/pw/scene/components/projection.hpp
|
||||
include/pw/scene/components/camera.hpp
|
||||
)
|
||||
|
||||
set(srcs
|
||||
|
|
|
@ -142,9 +142,8 @@ private:
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#include <pw/scene/components/relationship.hpp>
|
||||
#include <pw/scene/components/transform.hpp>
|
||||
#include <pw/scene/components/camera.hpp>
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,8 +4,23 @@
|
|||
#include "pw/core/debug.hpp"
|
||||
#include "pw/core/serialize.hpp"
|
||||
|
||||
#include "pw/core/geometry.hpp"
|
||||
#include "pw/core/matrix_transform.hpp"
|
||||
|
||||
namespace pw {
|
||||
|
||||
|
||||
struct mesh {
|
||||
geometry geom;
|
||||
};
|
||||
|
||||
struct mesh_renderer {
|
||||
std::unique_ptr<int> state;
|
||||
// std::vector<matrials> mat;
|
||||
};
|
||||
|
||||
|
||||
|
||||
scene::scene()
|
||||
: _registry{ std::make_shared<entt::registry>()}
|
||||
{
|
||||
|
@ -24,6 +39,9 @@ size_t scene::count_alive_enties() const
|
|||
void scene::update_transforms()
|
||||
{
|
||||
|
||||
|
||||
//auto [t,r] = view.get<transform,parent>(entity);
|
||||
|
||||
#if 1
|
||||
|
||||
// search for nodes with parent and transform (only find leaf nodes)
|
||||
|
@ -33,40 +51,37 @@ void scene::update_transforms()
|
|||
{
|
||||
debug::d() << "info for entity " << (int)entity;
|
||||
|
||||
//auto [t,r] = view.get<transform,parent>(entity);
|
||||
|
||||
// collect node path
|
||||
std::vector<transform> path;
|
||||
while (_registry->has<parent>(entity)) {
|
||||
|
||||
if (_registry->has<transform>(entity)) {
|
||||
path.push_back(_registry->get<transform>(entity));
|
||||
}
|
||||
|
||||
//
|
||||
entity = _registry->get<parent>(entity).entity;
|
||||
}
|
||||
|
||||
|
||||
debug::d() << "\tpath length " << path.size();
|
||||
|
||||
std::reverse(path.begin(),path.end());
|
||||
|
||||
auto m = pw::matrix4x4::identity();
|
||||
|
||||
for (auto& transform : path) {
|
||||
|
||||
transform._global = transform._local * m;
|
||||
m = transform._global;
|
||||
|
||||
debug::d() << pw::serialize::matrix(m);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// r = _registry->view<relationship>
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#else
|
||||
|
||||
// auto view = _registry->view<relationship>();
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
std::map<code_type,std::string> _source;
|
||||
std::unordered_map<code_type,std::string> _source;
|
||||
|
||||
struct impl;
|
||||
std::unique_ptr<impl> _impl;
|
||||
|
|
|
@ -12,12 +12,12 @@ class geometry;
|
|||
/**
|
||||
* @brief Connects mesh data with the render backend
|
||||
*/
|
||||
class vertex_array {
|
||||
class mesh_renderer {
|
||||
public:
|
||||
vertex_array();
|
||||
vertex_array(const geometry& m);
|
||||
mesh_renderer();
|
||||
mesh_renderer(const geometry& m);
|
||||
|
||||
~vertex_array();
|
||||
~mesh_renderer();
|
||||
|
||||
void create(const geometry &m);
|
||||
void release();
|
||||
|
|
|
@ -40,7 +40,7 @@ struct triangle_renderer
|
|||
|
||||
shader shader_p;
|
||||
geometry amesh;
|
||||
vertex_array amesh_renderer;
|
||||
mesh_renderer amesh_renderer;
|
||||
time::tick_t tick;
|
||||
|
||||
triangle_renderer()
|
||||
|
|
|
@ -12,6 +12,8 @@ struct texture::impl {
|
|||
GLuint _texture_id;
|
||||
GLuint _texture_sampler;
|
||||
|
||||
impl() = delete;
|
||||
|
||||
impl(texture& host)
|
||||
: _host(host)
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
namespace pw {
|
||||
|
||||
struct vertex_array::impl {
|
||||
struct mesh_renderer::impl {
|
||||
|
||||
GLuint _vao = 0;
|
||||
|
||||
|
@ -73,7 +73,8 @@ struct vertex_array::impl {
|
|||
|
||||
// indices
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _vbos[1]);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(m.indices().front()) * m.indices().size(), m.indices().data(),
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
sizeof(m.indices().front()) * m.indices().size(), m.indices().data(),
|
||||
GL_STATIC_DRAW);
|
||||
|
||||
// stop binding
|
||||
|
@ -120,37 +121,37 @@ struct vertex_array::impl {
|
|||
//
|
||||
//
|
||||
|
||||
vertex_array::vertex_array()
|
||||
: _impl(std::make_unique<vertex_array::impl>())
|
||||
mesh_renderer::mesh_renderer()
|
||||
: _impl(std::make_unique<mesh_renderer::impl>())
|
||||
{
|
||||
}
|
||||
|
||||
vertex_array::vertex_array(const geometry &m)
|
||||
mesh_renderer::mesh_renderer(const geometry &m)
|
||||
{
|
||||
vertex_array();
|
||||
mesh_renderer();
|
||||
_impl->create(m);
|
||||
}
|
||||
|
||||
vertex_array::~vertex_array()
|
||||
mesh_renderer::~mesh_renderer()
|
||||
{
|
||||
}
|
||||
|
||||
bool vertex_array::ready() const
|
||||
bool mesh_renderer::ready() const
|
||||
{
|
||||
return _impl->ready();
|
||||
}
|
||||
|
||||
void vertex_array::create(const geometry &m)
|
||||
void mesh_renderer::create(const geometry &m)
|
||||
{
|
||||
_impl->create(m);
|
||||
}
|
||||
|
||||
void vertex_array::release()
|
||||
void mesh_renderer::release()
|
||||
{
|
||||
_impl->release();
|
||||
}
|
||||
|
||||
void vertex_array::draw()
|
||||
void mesh_renderer::draw()
|
||||
{
|
||||
_impl->draw();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue