From 632be84cebd1c61d14ac235523fa3853604a3a8e Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 19:32:28 +0200 Subject: [PATCH 01/33] roadmap update --- ROADMAP.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 114b9a2..b848d8f 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,9 +1,11 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [Renderer] Move clipping algorithm into VU1 -- [Renderer] Move animation calcs into VU1 -- [Renderer] Dbufferring during mesh unroll +- [Renderer] Rename stdRenderer -> staticRenderer +- [Renderer] Mesh, StaticMesh, AnimMesh +- [Renderer] dynamicRenderer, dbufferring during mesh unrolling, simple clip +- [Renderer] staticRenderer -> remove animation, dbufferring during mesh unrolling, full plane clip +- [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader - [Texture] Test cache hits with large amount of textures (dolphin sample?) From bb02a3d9bfaeb21e57caca9f152010206c93dac6 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 19:46:06 +0200 Subject: [PATCH 02/33] std pipeline rename --- ROADMAP.txt | 1 - .../bag/packaging/stapip_bag_package.hpp} | 16 +-- .../bag/packaging/stapip_bag_packager.hpp} | 22 ++-- .../packaging/stapip_bag_packages_bbox.hpp} | 8 +- .../core/bag/stapip_bag.hpp} | 26 ++-- .../core/bag/stapip_color_bag.hpp} | 6 +- .../core/bag/stapip_info_bag.hpp} | 10 +- .../core/bag/stapip_lighting_bag.hpp} | 10 +- .../core/bag/stapip_texture_bag.hpp} | 6 +- .../as_is/stapip_as_is_c_vu1_program.hpp} | 10 +- .../as_is/stapip_as_is_d_vu1_program.hpp} | 10 +- .../as_is/stapip_as_is_tc_vu1_program.hpp} | 10 +- .../as_is/stapip_as_is_td_vu1_program.hpp} | 10 +- .../cull/stapip_cull_c_vu1_program.hpp} | 10 +- .../cull/stapip_cull_d_vu1_program.hpp} | 10 +- .../cull/stapip_cull_tc_vu1_program.hpp | 29 +++++ .../cull/stapip_cull_td_vu1_program.hpp | 29 +++++ .../programs/stapip_vu1_shared_defines.h} | 0 .../core/stapip_clipper.hpp} | 12 +- .../core/stapip_program_name.hpp} | 18 +-- .../core/stapip_program_type.hpp} | 10 +- .../core/stapip_programs_repository.hpp | 49 +++++++ .../core/stapip_qbuffer.hpp} | 26 ++-- .../core/stapip_qbuffer_renderer.hpp} | 50 +++---- .../core/stapip_vu1_program.hpp} | 22 ++-- .../core/static_pipeline_core.hpp} | 28 ++-- .../stapip_lighting_options.hpp} | 6 +- .../stapip_options.hpp} | 14 +- .../stapip_shading_type.hpp} | 6 +- .../static_pipeline.hpp} | 30 ++--- .../cull/stdpip_cull_tc_vu1_program.hpp | 29 ----- .../cull/stdpip_cull_td_vu1_program.hpp | 29 ----- .../core/path1/stdpip_programs_repository.hpp | 49 ------- .../bag/packaging/stapip_bag_package.cpp} | 14 +- .../bag/packaging/stapip_bag_packager.cpp} | 26 ++-- .../packaging/stapip_bag_packages_bbox.cpp} | 26 ++-- .../core/bag/stapip_bag.cpp} | 18 +-- .../core/bag/stapip_color_bag.cpp} | 6 +- .../core/bag/stapip_info_bag.cpp} | 8 +- .../core/bag/stapip_lighting_bag.cpp} | 30 ++--- .../core/bag/stapip_texture_bag.cpp} | 6 +- .../programs/as_is/stapip_as_is_c_vu1.vclpp} | 6 +- .../as_is/stapip_as_is_c_vu1_program.cpp} | 20 +-- .../programs/as_is/stapip_as_is_d_vu1.vclpp} | 6 +- .../as_is/stapip_as_is_d_vu1_program.cpp} | 20 +-- .../programs/as_is/stapip_as_is_tc_vu1.vclpp} | 6 +- .../as_is/stapip_as_is_tc_vu1_program.cpp} | 20 +-- .../programs/as_is/stapip_as_is_td_vu1.vclpp} | 6 +- .../as_is/stapip_as_is_td_vu1_program.cpp} | 20 +-- .../programs/cull/stapip_cull_c_vu1.vclpp} | 6 +- .../cull/stapip_cull_c_vu1_program.cpp} | 20 +-- .../programs/cull/stapip_cull_d_vu1.vclpp} | 6 +- .../cull/stapip_cull_d_vu1_program.cpp} | 20 +-- .../programs/cull/stapip_cull_tc_vu1.vclpp} | 6 +- .../cull/stapip_cull_tc_vu1_program.cpp} | 20 +-- .../programs/cull/stapip_cull_td_vu1.vclpp} | 6 +- .../cull/stapip_cull_td_vu1_program.cpp} | 20 +-- .../core/stapip_clipper.cpp} | 20 +-- .../core/stapip_programs_repository.cpp | 48 +++++++ .../core/stapip_qbuffer.cpp} | 36 +++--- .../core/stapip_qbuffer_renderer.cpp} | 122 +++++++++--------- .../core/stapip_vu1_program.cpp} | 20 +-- .../core/static_pipeline_core.cpp} | 26 ++-- .../static_pipeline.cpp} | 44 +++---- .../core/path1/stdpip_programs_repository.cpp | 48 ------- .../programs/draw_finish/draw_finish.vclpp | 2 +- samples/h4570/inc/h4570.hpp | 6 +- samples/h4570/src/h4570.cpp | 22 ++-- samples/wellinator/inc/wellinator.hpp | 6 +- samples/wellinator/src/wellinator.cpp | 16 +-- 70 files changed, 679 insertions(+), 680 deletions(-) rename engine/inc/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_package.hpp => static/core/bag/packaging/stapip_bag_package.hpp} (79%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_packager.hpp => static/core/bag/packaging/stapip_bag_packager.hpp} (68%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_packages_bbox.hpp => static/core/bag/packaging/stapip_bag_packages_bbox.hpp} (90%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/stdpip_bag.hpp => static/core/bag/stapip_bag.hpp} (72%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/stdpip_color_bag.hpp => static/core/bag/stapip_color_bag.hpp} (90%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/stdpip_info_bag.hpp => static/core/bag/stapip_info_bag.hpp} (80%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/stdpip_lighting_bag.hpp => static/core/bag/stapip_lighting_bag.hpp} (87%) rename engine/inc/renderer/3d/pipeline/{std/core/bag/stdpip_texture_bag.hpp => static/core/bag/stapip_texture_bag.hpp} (89%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.hpp => static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp} (67%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.hpp => static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp} (67%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.hpp => static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp} (67%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.hpp => static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp} (67%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_c_vu1_program.hpp => static/core/programs/cull/stapip_cull_c_vu1_program.hpp} (67%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_d_vu1_program.hpp => static/core/programs/cull/stapip_cull_d_vu1_program.hpp} (67%) create mode 100644 engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp create mode 100644 engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp rename engine/inc/renderer/3d/pipeline/{std/core/path1/programs/stdpip_vu1_shared_defines.h => static/core/programs/stapip_vu1_shared_defines.h} (100%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_clipper.hpp => static/core/stapip_clipper.hpp} (86%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_program_name.hpp => static/core/stapip_program_name.hpp} (63%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_program_type.hpp => static/core/stapip_program_type.hpp} (75%) create mode 100644 engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_qbuffer.hpp => static/core/stapip_qbuffer.hpp} (73%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_qbuffer_renderer.hpp => static/core/stapip_qbuffer_renderer.hpp} (58%) rename engine/inc/renderer/3d/pipeline/{std/core/path1/stdpip_vu1_program.hpp => static/core/stapip_vu1_program.hpp} (65%) rename engine/inc/renderer/3d/pipeline/{std/core/std_pipeline_core.hpp => static/core/static_pipeline_core.hpp} (65%) rename engine/inc/renderer/3d/pipeline/{std/stdpip_lighting_options.hpp => static/stapip_lighting_options.hpp} (89%) rename engine/inc/renderer/3d/pipeline/{std/stdpip_options.hpp => static/stapip_options.hpp} (68%) rename engine/inc/renderer/3d/pipeline/{std/stdpip_shading_type.hpp => static/stapip_shading_type.hpp} (79%) rename engine/inc/renderer/3d/pipeline/{std/std_pipeline.hpp => static/static_pipeline.hpp} (61%) delete mode 100644 engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.hpp delete mode 100644 engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.hpp delete mode 100644 engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.hpp rename engine/src/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_package.cpp => static/core/bag/packaging/stapip_bag_package.cpp} (83%) rename engine/src/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_packager.cpp => static/core/bag/packaging/stapip_bag_packager.cpp} (76%) rename engine/src/renderer/3d/pipeline/{std/core/bag/packaging/stdpip_bag_packages_bbox.cpp => static/core/bag/packaging/stapip_bag_packages_bbox.cpp} (77%) rename engine/src/renderer/3d/pipeline/{std/core/bag/stdpip_bag.cpp => static/core/bag/stapip_bag.cpp} (84%) rename engine/src/renderer/3d/pipeline/{std/core/bag/stdpip_color_bag.cpp => static/core/bag/stapip_color_bag.cpp} (73%) rename engine/src/renderer/3d/pipeline/{std/core/bag/stdpip_info_bag.cpp => static/core/bag/stapip_info_bag.cpp} (71%) rename engine/src/renderer/3d/pipeline/{std/core/bag/stdpip_lighting_bag.cpp => static/core/bag/stapip_lighting_bag.cpp} (74%) rename engine/src/renderer/3d/pipeline/{std/core/bag/stdpip_texture_bag.cpp => static/core/bag/stapip_texture_bag.cpp} (72%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_c_vu1.vclpp => static/core/programs/as_is/stapip_as_is_c_vu1.vclpp} (93%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.cpp => static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp} (59%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_d_vu1.vclpp => static/core/programs/as_is/stapip_as_is_d_vu1.vclpp} (93%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.cpp => static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp} (62%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_tc_vu1.vclpp => static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.cpp => static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp} (63%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_td_vu1.vclpp => static/core/programs/as_is/stapip_as_is_td_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.cpp => static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp} (66%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_c_vu1.vclpp => static/core/programs/cull/stapip_cull_c_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_c_vu1_program.cpp => static/core/programs/cull/stapip_cull_c_vu1_program.cpp} (59%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_d_vu1.vclpp => static/core/programs/cull/stapip_cull_d_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_d_vu1_program.cpp => static/core/programs/cull/stapip_cull_d_vu1_program.cpp} (62%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_tc_vu1.vclpp => static/core/programs/cull/stapip_cull_tc_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.cpp => static/core/programs/cull/stapip_cull_tc_vu1_program.cpp} (63%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_td_vu1.vclpp => static/core/programs/cull/stapip_cull_td_vu1.vclpp} (94%) rename engine/src/renderer/3d/pipeline/{std/core/path1/programs/cull/stdpip_cull_td_vu1_program.cpp => static/core/programs/cull/stapip_cull_td_vu1_program.cpp} (66%) rename engine/src/renderer/3d/pipeline/{std/core/path1/stdpip_clipper.cpp => static/core/stapip_clipper.cpp} (81%) create mode 100644 engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp rename engine/src/renderer/3d/pipeline/{std/core/path1/stdpip_qbuffer.cpp => static/core/stapip_qbuffer.cpp} (85%) rename engine/src/renderer/3d/pipeline/{std/core/path1/stdpip_qbuffer_renderer.cpp => static/core/stapip_qbuffer_renderer.cpp} (67%) rename engine/src/renderer/3d/pipeline/{std/core/path1/stdpip_vu1_program.cpp => static/core/stapip_vu1_program.cpp} (77%) rename engine/src/renderer/3d/pipeline/{std/core/std_pipeline_core.cpp => static/core/static_pipeline_core.cpp} (90%) rename engine/src/renderer/3d/pipeline/{std/std_pipeline.cpp => static/static_pipeline.cpp} (83%) delete mode 100644 engine/src/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.cpp diff --git a/ROADMAP.txt b/ROADMAP.txt index b848d8f..62ff70f 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,7 +1,6 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [Renderer] Rename stdRenderer -> staticRenderer - [Renderer] Mesh, StaticMesh, AnimMesh - [Renderer] dynamicRenderer, dbufferring during mesh unrolling, simple clip - [Renderer] staticRenderer -> remove animation, dbufferring during mesh unrolling, full plane clip diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp similarity index 79% rename from engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp index 194b28d..5225c05 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp @@ -10,17 +10,17 @@ #pragma once -#include "../stdpip_bag.hpp" +#include "../stapip_bag.hpp" #include "renderer/core/3d/bbox/core_bbox_frustum.hpp" namespace Tyra { -class StdpipBagPackage { +class StapipBagPackage { public: - StdpipBagPackage(); - ~StdpipBagPackage(); + StapipBagPackage(); + ~StapipBagPackage(); - StdpipBag* bag; + StapipBag* bag; Vec4* vertices; Vec4* sts; @@ -32,12 +32,12 @@ class StdpipBagPackage { CoreBBoxFrustum isInFrustum; /** - * We are creating StdpipBagPackagesBBox which checks CoreBBoxBBox for every + * We are creating StapipBagPackagesBBox which checks CoreBBoxBBox for every * maxVertCount / 3. So this variable is index of starting - * StdpipBagPackagesBBox's CoreBBoxBBox. If package have <= maxVertCount / 3 + * StapipBagPackagesBBox's CoreBBoxBBox. If package have <= maxVertCount / 3 * verts, we will need only single (starting) bbox. if package have * maxVertCount verts, we will calculate CoreBBoxBBox from 3 - * StdpipBagPackagesBBox's bboxes. + * StapipBagPackagesBBox's bboxes. */ u32 indexOf1By3BBox; diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp similarity index 68% rename from engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp index aa91507..9b90f9c 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp @@ -13,19 +13,19 @@ #include "renderer/core/3d/bbox/core_bbox.hpp" #include "renderer/core/3d/renderer_3d_frustum_planes.hpp" #include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" -#include "./stdpip_bag_packages_bbox.hpp" -#include "./stdpip_bag_package.hpp" -#include "../stdpip_bag.hpp" +#include "./stapip_bag_packages_bbox.hpp" +#include "./stapip_bag_package.hpp" +#include "../stapip_bag.hpp" namespace Tyra { -class StdpipBagPackager { +class StapipBagPackager { public: - StdpipBagPackager(); - ~StdpipBagPackager(); + StapipBagPackager(); + ~StapipBagPackager(); void init(Renderer3DFrustumPlanes* frustumPlanes); - void setRenderBBox(StdpipBagPackagesBBox* bbox) { renderBBox = bbox; } + void setRenderBBox(StapipBagPackagesBBox* bbox) { renderBBox = bbox; } void setMaxVertCount(const u32& count); /** @@ -33,20 +33,20 @@ class StdpipBagPackager { * * @param size Max maxVertCount verts (VU1 buffer size) */ - StdpipBagPackage* create(u16* o_size, StdpipBag* data, u16 size); + StapipBagPackage* create(u16* o_size, StapipBag* data, u16 size); /** * @brief Split render package to smaller packages * * @param size Max maxVertCount verts (VU1 buffer size) */ - StdpipBagPackage* create(u16* o_size, const StdpipBagPackage& pkg, u16 size); + StapipBagPackage* create(u16* o_size, const StapipBagPackage& pkg, u16 size); - CoreBBoxFrustum checkFrustum(const StdpipBagPackage& pkg); + CoreBBoxFrustum checkFrustum(const StapipBagPackage& pkg); private: u32 maxVertCount; Renderer3DFrustumPlanes* frustumPlanes; - StdpipBagPackagesBBox* renderBBox; + StapipBagPackagesBBox* renderBBox; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp similarity index 90% rename from engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp index ed7a460..9356690 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp @@ -18,13 +18,13 @@ namespace Tyra { * Splits all 3D input vertices into 16vert parts and creates child bboxes for * it */ -class StdpipBagPackagesBBox { +class StapipBagPackagesBBox { public: - StdpipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, + StapipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, const u32& t_maxVertCount); - StdpipBagPackagesBBox(Vec4* t_vertices, const u32& t_counts, + StapipBagPackagesBBox(Vec4* t_vertices, const u32& t_counts, const u32& t_maxVertCount); - ~StdpipBagPackagesBBox(); + ~StapipBagPackagesBBox(); void setMaxVertCount(const u32& count); diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp similarity index 72% rename from engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_bag.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp index 30b4ffa..fd8be94 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp @@ -11,12 +11,12 @@ #pragma once #include "math/vec4.hpp" -#include "./stdpip_lighting_bag.hpp" -#include "./stdpip_info_bag.hpp" -#include "./stdpip_color_bag.hpp" -#include "./stdpip_texture_bag.hpp" +#include "./stapip_lighting_bag.hpp" +#include "./stapip_info_bag.hpp" +#include "./stapip_color_bag.hpp" +#include "./stapip_texture_bag.hpp" #include "renderer/core/texture/models/texture.hpp" -#include "./packaging/stdpip_bag_packages_bbox.hpp" +#include "./packaging/stapip_bag_packages_bbox.hpp" namespace Tyra { @@ -25,16 +25,16 @@ namespace Tyra { * Supports frustum culling, clipping, lighting, * texture and single color / many colors. */ -class StdpipBag { +class StapipBag { public: - StdpipBag(); - ~StdpipBag(); + StapipBag(); + ~StapipBag(); /** Mandatory. Object info. */ - StdpipInfoBag* info; + StapipInfoBag* info; /** Mandatory. Object color(s). */ - StdpipColorBag* color; + StapipColorBag* color; /** Mandatory. Vertex count. */ u32 count; @@ -43,15 +43,15 @@ class StdpipBag { Vec4* vertices; /** Optional. Texture coordinates and image. */ - StdpipTextureBag* texture; + StapipTextureBag* texture; /** Optional. Object lighting. */ - StdpipLightingBag* lighting; + StapipLightingBag* lighting; /** * @param maxVertCount This parameter is available in renderer API. */ - StdpipBagPackagesBBox calculateBbox(const u32& maxVertCount); + StapipBagPackagesBBox calculateBbox(const u32& maxVertCount); void print() const; void print(const char* name) const; diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp similarity index 90% rename from engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp index e6a7132..e17761b 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp @@ -17,10 +17,10 @@ namespace Tyra { /** * @brief Color data. At least one color data is required (single/many). */ -class StdpipColorBag { +class StapipColorBag { public: - StdpipColorBag(); - ~StdpipColorBag(); + StapipColorBag(); + ~StapipColorBag(); /** Optional. Single color for all vertices. */ Color* single; diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp similarity index 80% rename from engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp index 3e6c94d..5afaa30 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp @@ -13,19 +13,19 @@ #include #include "math/m4x4.hpp" #include "math/vec4.hpp" -#include "../../stdpip_shading_type.hpp" +#include "../../stapip_shading_type.hpp" namespace Tyra { -class StdpipInfoBag { +class StapipInfoBag { public: - StdpipInfoBag(); - ~StdpipInfoBag(); + StapipInfoBag(); + ~StapipInfoBag(); /** Mandatory. Model matrix */ M4x4* model; - StdpipShadingType shadingType; + StapipShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp similarity index 87% rename from engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp index f399c9d..5c9444b 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp @@ -16,12 +16,12 @@ namespace Tyra { -enum StdpipLightingBagMode { Auto, Manual }; +enum StapipLightingBagMode { Auto, Manual }; -class StdpipLightingBag { +class StapipLightingBag { public: - explicit StdpipLightingBag(const bool& manual = false); - ~StdpipLightingBag(); + explicit StapipLightingBag(const bool& manual = false); + ~StapipLightingBag(); Vec4* normals; M4x4* lightMatrix; @@ -47,7 +47,7 @@ class StdpipLightingBag { void deallocate(); void forceDeallocate(); u8 isAllocated; - StdpipLightingBagMode mode; + StapipLightingBagMode mode; Vec4* lightColors; Vec4* lightDirections; diff --git a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp similarity index 89% rename from engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.hpp rename to engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp index 9ee3e70..4f73dde 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp @@ -15,10 +15,10 @@ namespace Tyra { -class StdpipTextureBag { +class StapipTextureBag { public: - StdpipTextureBag(); - ~StdpipTextureBag(); + StapipTextureBag(); + ~StapipTextureBag(); /** Mandatory. Texture coordinates per vertex. */ Vec4* coordinates; diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp index 3b337ff..79a5d77 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp @@ -12,19 +12,19 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipAsIsCVU1Program : public StdpipVU1Program { +class StapipAsIsCVU1Program : public StapipVU1Program { public: - StdpipAsIsCVU1Program(); - ~StdpipAsIsCVU1Program(); + StapipAsIsCVU1Program(); + ~StapipAsIsCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp index 9f3f621..f1af9d1 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp @@ -12,18 +12,18 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipAsIsDVU1Program : public StdpipVU1Program { +class StapipAsIsDVU1Program : public StapipVU1Program { public: - StdpipAsIsDVU1Program(); - ~StdpipAsIsDVU1Program(); + StapipAsIsDVU1Program(); + ~StapipAsIsDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp index c63e6c8..b2827d0 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp @@ -12,18 +12,18 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipAsIsTCVU1Program : public StdpipVU1Program { +class StapipAsIsTCVU1Program : public StapipVU1Program { public: - StdpipAsIsTCVU1Program(); - ~StdpipAsIsTCVU1Program(); + StapipAsIsTCVU1Program(); + ~StapipAsIsTCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp index 8c45f9a..c1e4147 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp @@ -12,18 +12,18 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipAsIsTDVU1Program : public StdpipVU1Program { +class StapipAsIsTDVU1Program : public StapipVU1Program { public: - StdpipAsIsTDVU1Program(); - ~StdpipAsIsTDVU1Program(); + StapipAsIsTDVU1Program(); + ~StapipAsIsTDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp index 4979595..5cb6489 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp @@ -12,18 +12,18 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipCullCVU1Program : public StdpipVU1Program { +class StapipCullCVU1Program : public StapipVU1Program { public: - StdpipCullCVU1Program(); - ~StdpipCullCVU1Program(); + StapipCullCVU1Program(); + ~StapipCullCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp similarity index 67% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp index 1d77e12..7463374 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp @@ -12,18 +12,18 @@ #include #include -#include "../../stdpip_vu1_program.hpp" +#include "../../stapip_vu1_program.hpp" namespace Tyra { -class StdpipCullDVU1Program : public StdpipVU1Program { +class StapipCullDVU1Program : public StapipVU1Program { public: - StdpipCullDVU1Program(); - ~StdpipCullDVU1Program(); + StapipCullDVU1Program(); + ~StapipCullDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; + StapipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp new file mode 100644 index 0000000..6419e0c --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp @@ -0,0 +1,29 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "../../stapip_vu1_program.hpp" + +namespace Tyra { + +class StapipCullTCVU1Program : public StapipVU1Program { + public: + StapipCullTCVU1Program(); + ~StapipCullTCVU1Program(); + + std::string getStringName() const; + void addProgramQBufferDataToPacket(packet2_t* packet, + StapipQBuffer* qbuffer) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp new file mode 100644 index 0000000..1007c90 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp @@ -0,0 +1,29 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "../../stapip_vu1_program.hpp" + +namespace Tyra { + +class StapipCullTDVU1Program : public StapipVU1Program { + public: + StapipCullTDVU1Program(); + ~StapipCullTDVU1Program(); + + std::string getStringName() const; + void addProgramQBufferDataToPacket(packet2_t* packet, + StapipQBuffer* qbuffer) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h similarity index 100% rename from engine/inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h rename to engine/inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_clipper.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp similarity index 86% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_clipper.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp index ab598e9..79a03ac 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_clipper.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp @@ -12,7 +12,7 @@ #include #include "debug/debug.hpp" -#include "./stdpip_qbuffer.hpp" +#include "./stapip_qbuffer.hpp" #include "renderer/renderer_settings.hpp" #include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" @@ -25,11 +25,11 @@ namespace Tyra { * To be honest clipping algorithm should be moved to VU1 and "AsIs" VU1 program * should be renamed to "Clip" - I don't want to do it now, too much time. */ -class StdpipClipper { +class StapipClipper { public: - StdpipClipper(); - ~StdpipClipper(); - void clip(StdpipQBuffer* buffer); + StapipClipper(); + ~StapipClipper(); + void clip(StapipQBuffer* buffer); void init(const RendererSettings& settings); void setMaxVertCount(const u32& count); void setMVP(M4x4* mvp); @@ -41,7 +41,7 @@ class StdpipClipper { void perspectiveDivide(std::vector* vertices); void moveDataToBuffer(const std::vector& vertices, - StdpipQBuffer* buffer); + StapipQBuffer* buffer); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_name.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp similarity index 63% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_name.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp index 4eba03f..1927a3b 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_name.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp @@ -12,20 +12,20 @@ namespace Tyra { -enum StdpipProgramName { +enum StapipProgramName { StdipUndefinedProgram, - StdpipCullColor, - StdpipAsIsColor, + StapipCullColor, + StapipAsIsColor, - StdpipCullDirLights, - StdpipAsIsDirLights, + StapipCullDirLights, + StapipAsIsDirLights, - StdpipCullTextureDirLights, - StdpipAsIsTextureDirLights, + StapipCullTextureDirLights, + StapipAsIsTextureDirLights, - StdpipCullTextureColor, - StdpipAsIsTextureColor, + StapipCullTextureColor, + StapipAsIsTextureColor, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_type.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp similarity index 75% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_type.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp index 3618c56..55bb7b2 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_program_type.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp @@ -12,11 +12,11 @@ namespace Tyra { -enum StdpipProgramType { - StdpipVU1Color, - StdpipVU1DirLights, - StdpipVU1TextureDirLights, - StdpipVU1TextureColor, +enum StapipProgramType { + StapipVU1Color, + StapipVU1DirLights, + StapipVU1TextureDirLights, + StapipVU1TextureColor, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp new file mode 100644 index 0000000..35a36f6 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp @@ -0,0 +1,49 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "debug/debug.hpp" +#include "renderer/core/paths/path1/vu1_program.hpp" + +#include "./programs/as_is/stapip_as_is_c_vu1_program.hpp" +#include "./programs/as_is/stapip_as_is_d_vu1_program.hpp" +#include "./programs/as_is/stapip_as_is_td_vu1_program.hpp" +#include "./programs/as_is/stapip_as_is_tc_vu1_program.hpp" + +#include "./programs/cull/stapip_cull_c_vu1_program.hpp" +#include "./programs/cull/stapip_cull_d_vu1_program.hpp" +#include "./programs/cull/stapip_cull_td_vu1_program.hpp" +#include "./programs/cull/stapip_cull_tc_vu1_program.hpp" + +#include "renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp" + +namespace Tyra { + +class StapipProgramsRepository { + public: + StapipProgramsRepository(); + ~StapipProgramsRepository(); + + StapipVU1Program* getProgram(const StapipProgramName& name); + + private: + StapipAsIsCVU1Program asIsColor; + StapipCullCVU1Program cullColor; + StapipAsIsDVU1Program asIsLightingColor; + StapipCullDVU1Program cullLightingColor; + StapipAsIsTDVU1Program asIsLightingTextureColor; + StapipCullTDVU1Program cullLightingTextureColor; + StapipAsIsTCVU1Program asIsTextureColor; + StapipCullTCVU1Program cullTextureColor; + VU1DrawFinish drawFinish; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp similarity index 73% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp index 588f3bc..30b01f1 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp @@ -14,15 +14,15 @@ #include #include #include "debug/debug.hpp" -#include "../bag/packaging/stdpip_bag_package.hpp" -#include "../bag/stdpip_bag.hpp" +#include "./bag/packaging/stapip_bag_package.hpp" +#include "./bag/stapip_bag.hpp" namespace Tyra { -class StdpipQBuffer { +class StapipQBuffer { public: - StdpipQBuffer(); - ~StdpipQBuffer(); + StapipQBuffer(); + ~StapipQBuffer(); void setMaxVertCount(const u32& count); @@ -30,27 +30,27 @@ class StdpipQBuffer { * @brief Dont allocate any dynamic data in buffer. * Just copy pointers to input data. */ - void fillByPointer(const StdpipBagPackage& pkg); + void fillByPointer(const StapipBagPackage& pkg); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopyMax(const StdpipBagPackage& pkg1, const StdpipBagPackage& pkg2, - const StdpipBagPackage& pkg3); + void fillByCopyMax(const StapipBagPackage& pkg1, const StapipBagPackage& pkg2, + const StapipBagPackage& pkg3); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopy1By2(const StdpipBagPackage& pkg1, - const StdpipBagPackage& pkg2); + void fillByCopy1By2(const StapipBagPackage& pkg1, + const StapipBagPackage& pkg2); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopy1By3(const StdpipBagPackage& pkg); + void fillByCopy1By3(const StapipBagPackage& pkg); /** * @brief Deallocate dynamic data if it was allocated and allocate new data @@ -61,7 +61,7 @@ class StdpipQBuffer { bool any() const; - StdpipBag* bag; + StapipBag* bag; Vec4* vertices; Vec4* sts; @@ -77,7 +77,7 @@ class StdpipQBuffer { private: u32 maxVertCount; void deallocateDynamicData(); - void allocateDynamicData(u16 size, StdpipBag* bag); + void allocateDynamicData(u16 size, StapipBag* bag); u8 _isDynamicallyAllocated, _stAllocated, _colorAllocated, _normalAllocated; }; diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp similarity index 58% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp index 150a028..6d0a41e 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp @@ -17,21 +17,21 @@ #include "math/m4x4.hpp" #include "renderer/renderer_settings.hpp" #include "renderer/models/color.hpp" -#include "./stdpip_qbuffer.hpp" -#include "./stdpip_program_type.hpp" -#include "./stdpip_program_name.hpp" -#include "./stdpip_programs_repository.hpp" -#include "./stdpip_clipper.hpp" +#include "./stapip_qbuffer.hpp" +#include "./stapip_program_type.hpp" +#include "./stapip_program_name.hpp" +#include "./stapip_programs_repository.hpp" +#include "./stapip_clipper.hpp" #include "renderer/core/paths/path1/path1.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/core/texture/renderer_core_texture_buffers.hpp" namespace Tyra { -class StdpipQBufferRenderer { +class StapipQBufferRenderer { public: - StdpipQBufferRenderer(); - ~StdpipQBufferRenderer(); + StapipQBufferRenderer(); + ~StapipQBufferRenderer(); void init(RendererCore* t_core); @@ -39,26 +39,26 @@ class StdpipQBufferRenderer { void setClipperMVP(M4x4* mvp) { clipper.setMVP(mvp); } - StdpipQBuffer* getBuffer(); + StapipQBuffer* getBuffer(); - void sendObjectData(StdpipBag* bag, M4x4* mvp, + void sendObjectData(StapipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const; void setMaxVertCount(const u32& count); - void setInfo(StdpipInfoBag* bag); + void setInfo(StapipInfoBag* bag); /** Fast render with culling */ - void cull(StdpipQBuffer* buffer); + void cull(StapipQBuffer* buffer); /** Slower render with clipping */ - void clip(StdpipQBuffer* buffer); + void clip(StapipQBuffer* buffer); void clearLastProgramName(); - StdpipVU1Program* getCullProgramByBag(const StdpipBag* bag); + StapipVU1Program* getCullProgramByBag(const StapipBag* bag); - StdpipVU1Program* getCullProgramByParams(const bool& isLightingEnabled, + StapipVU1Program* getCullProgramByParams(const bool& isLightingEnabled, const bool& isTextureEnabled); const u16& getBufferSize() { return bufferSize; } @@ -69,27 +69,27 @@ class StdpipQBufferRenderer { void uploadPrograms(); void setDoubleBuffer(); - StdpipVU1Program* getProgramByName(const StdpipProgramName& name); - void addBufferDataToPacket(StdpipVU1Program* program, StdpipQBuffer* buffer); + StapipVU1Program* getProgramByName(const StapipProgramName& name); + void addBufferDataToPacket(StapipVU1Program* program, StapipQBuffer* buffer); void sendPacket(); - StdpipVU1Program* getAsIsProgramByBag(const StdpipBag* bag); - StdpipVU1Program* getCullProgramByType(const StdpipProgramType& programType); - StdpipProgramType getDrawProgramTypeByBag(const StdpipBag* bag) const; - StdpipProgramType getDrawProgramTypeByParams( + StapipVU1Program* getAsIsProgramByBag(const StapipBag* bag); + StapipVU1Program* getCullProgramByType(const StapipProgramType& programType); + StapipProgramType getDrawProgramTypeByBag(const StapipBag* bag) const; + StapipProgramType getDrawProgramTypeByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) const; packet2_t* packets[2]; packet2_t* programsPacket; - StdpipQBuffer buffers[2]; + StapipQBuffer buffers[2]; packet2_t* currentPacket; packet2_t* staticDataPacket; packet2_t* objectDataPacket; RendererCore* rendererCore; - StdpipProgramName lastProgramName; + StapipProgramName lastProgramName; Path1* path1; - StdpipClipper clipper; - StdpipProgramsRepository repository; + StapipClipper clipper; + StapipProgramsRepository repository; u16 bufferSize; u8 context; diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp similarity index 65% rename from engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp index c2cecba..5842e52 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp @@ -10,40 +10,40 @@ #pragma once -#include "./stdpip_program_name.hpp" +#include "./stapip_program_name.hpp" #include "renderer/core/paths/path1/vu1_program.hpp" -#include "./stdpip_qbuffer.hpp" -#include "./programs/stdpip_vu1_shared_defines.h" +#include "./stapip_qbuffer.hpp" +#include "./programs/stapip_vu1_shared_defines.h" namespace Tyra { -class StdpipVU1Program : public VU1Program { +class StapipVU1Program : public VU1Program { public: - StdpipVU1Program(const StdpipProgramName& name, u32* start, u32* end, + StapipVU1Program(const StapipProgramName& name, u32* start, u32* end, const u32& t_reglist, const u8& t_reglistCount, const u8& t_elementsPerVertex); - ~StdpipVU1Program(); + ~StapipVU1Program(); u32& getReglist(); - const StdpipProgramName& getName() const; + const StapipProgramName& getName() const; u16 getMaxVertCount(const bool& singleColorEnabled, const u16& vu1DBufferSize) const; - void addBufferDataToPacket(packet2_t* packet, StdpipQBuffer* buffer, + void addBufferDataToPacket(packet2_t* packet, StapipQBuffer* buffer, prim_t* prim); protected: - StdpipProgramName name; + StapipProgramName name; u8 reglistCount, elementsPerVertex; u32 destinationAddress, reglist; virtual void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const = 0; + StapipQBuffer* qbuffer) const = 0; private: - void addStandardBufferDataToPacket(packet2_t* packet, StdpipQBuffer* buffer, + void addStandardBufferDataToPacket(packet2_t* packet, StapipQBuffer* buffer, prim_t* prim); }; diff --git a/engine/inc/renderer/3d/pipeline/std/core/std_pipeline_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp similarity index 65% rename from engine/inc/renderer/3d/pipeline/std/core/std_pipeline_core.hpp rename to engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp index 9b44486..3079ceb 100644 --- a/engine/inc/renderer/3d/pipeline/std/core/std_pipeline_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp @@ -11,23 +11,23 @@ #pragma once #include -#include "./bag/stdpip_bag.hpp" -#include "./bag/packaging/stdpip_bag_packages_bbox.hpp" -#include "./bag/packaging/stdpip_bag_package.hpp" -#include "./bag/packaging/stdpip_bag_packager.hpp" -#include "./path1/stdpip_qbuffer_renderer.hpp" +#include "./bag/stapip_bag.hpp" +#include "./bag/packaging/stapip_bag_packages_bbox.hpp" +#include "./bag/packaging/stapip_bag_package.hpp" +#include "./bag/packaging/stapip_bag_packager.hpp" +#include "./stapip_qbuffer_renderer.hpp" namespace Tyra { -class StdPipelineCore { +class StapipelineCore { public: - StdPipelineCore(); - ~StdPipelineCore(); + StapipelineCore(); + ~StapipelineCore(); void init(RendererCore* t_core); /** Render 3D data via "bags" */ - void render(StdpipBag* data, StdpipBagPackagesBBox* bbox = nullptr); + void render(StapipBag* data, StapipBagPackagesBBox* bbox = nullptr); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isSingleColor, @@ -35,7 +35,7 @@ class StdPipelineCore { const bool& isTextureEnabled); /** Get max vert count of VU1 qbuffer (for optimizations) */ - u32 getMaxVertCountByBag(const StdpipBag* bag); + u32 getMaxVertCountByBag(const StapipBag* bag); /** * - Uploads standard VU1 programs. @@ -50,10 +50,10 @@ class StdPipelineCore { RendererCore* rendererCore; void setMaxVertCount(const u32& count); - StdpipBagPackager packager; - StdpipQBufferRenderer qbufferRenderer; - void renderPkgs(StdpipBagPackage* packages, u16 count); - void renderSubpkgs(StdpipBagPackage* packages, u16 count); + StapipBagPackager packager; + StapipQBufferRenderer qbufferRenderer; + void renderPkgs(StapipBagPackage* packages, u16 count); + void renderSubpkgs(StapipBagPackage* packages, u16 count); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/stdpip_lighting_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp similarity index 89% rename from engine/inc/renderer/3d/pipeline/std/stdpip_lighting_options.hpp rename to engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp index ae4bc85..0bc1e4a 100644 --- a/engine/inc/renderer/3d/pipeline/std/stdpip_lighting_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp @@ -15,10 +15,10 @@ namespace Tyra { -class StdpipLightingOptions { +class StapipLightingOptions { public: - StdpipLightingOptions() {} - ~StdpipLightingOptions() {} + StapipLightingOptions() {} + ~StapipLightingOptions() {} /** * Mandatory. diff --git a/engine/inc/renderer/3d/pipeline/std/stdpip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp similarity index 68% rename from engine/inc/renderer/3d/pipeline/std/stdpip_options.hpp rename to engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index 71f207b..13d2797 100644 --- a/engine/inc/renderer/3d/pipeline/std/stdpip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -10,23 +10,23 @@ #pragma once -#include "./stdpip_shading_type.hpp" -#include "./stdpip_lighting_options.hpp" +#include "./stapip_shading_type.hpp" +#include "./stapip_lighting_options.hpp" namespace Tyra { -class StdpipOptions { +class StapipOptions { public: - StdpipOptions() {} - ~StdpipOptions() {} + StapipOptions() {} + ~StapipOptions() {} - StdpipShadingType shadingType; + StapipShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; /** Optional */ - StdpipLightingOptions* lighting; + StapipLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/stdpip_shading_type.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp similarity index 79% rename from engine/inc/renderer/3d/pipeline/std/stdpip_shading_type.hpp rename to engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp index d38b2fb..6068900 100644 --- a/engine/inc/renderer/3d/pipeline/std/stdpip_shading_type.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp @@ -12,9 +12,9 @@ namespace Tyra { -enum StdpipShadingType { - StdpipShadingFlat, - StdpipShadingGouraud, +enum StapipShadingType { + StapipShadingFlat, + StapipShadingGouraud, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/std_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp similarity index 61% rename from engine/inc/renderer/3d/pipeline/std/std_pipeline.hpp rename to engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 44c87d3..67681ad 100644 --- a/engine/inc/renderer/3d/pipeline/std/std_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -12,17 +12,17 @@ #include #include "../renderer_3d_pipeline.hpp" -#include "./stdpip_options.hpp" +#include "./stapip_options.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/3d/mesh/mesh.hpp" -#include "./core/std_pipeline_core.hpp" +#include "./core/static_pipeline_core.hpp" namespace Tyra { -class StdPipeline : public Renderer3DPipeline { +class Stapipeline : public Renderer3DPipeline { public: - StdPipeline(); - ~StdPipeline(); + Stapipeline(); + ~Stapipeline(); void init(RendererCore* core); @@ -32,28 +32,28 @@ class StdPipeline : public Renderer3DPipeline { * Render 3D data via "meshes". * This render() method is a bridge to core.renderer3D.render() method. */ - void render(Mesh* mesh, const StdpipOptions* options = nullptr); + void render(Mesh* mesh, const StapipOptions* options = nullptr); private: - StdPipelineCore core; + StapipelineCore core; RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(Mesh* mesh, MeshMaterial* material, StdpipBag* bag, + void addVertices(Mesh* mesh, MeshMaterial* material, StapipBag* bag, MeshFrame* frameFrom, MeshFrame* frameTo) const; - StdpipInfoBag* getInfoBag(Mesh* mesh, const StdpipOptions* options, + StapipInfoBag* getInfoBag(Mesh* mesh, const StapipOptions* options, M4x4* model) const; - StdpipColorBag* getColorBag(Mesh* mesh, MeshMaterial* material, + StapipColorBag* getColorBag(Mesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo) const; - StdpipTextureBag* getTextureBag(Mesh* mesh, MeshMaterial* material, + StapipTextureBag* getTextureBag(Mesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo); - StdpipLightingBag* getLightingBag(Mesh* mesh, MeshMaterial* material, + StapipLightingBag* getLightingBag(Mesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, - const StdpipOptions* options) const; - void deallocDrawBags(StdpipBag* bag, MeshMaterial* material) const; + const StapipOptions* options) const; + void deallocDrawBags(StapipBag* bag, MeshMaterial* material) const; - void setLightingColorsCache(StdpipLightingOptions* lightingOptions); + void setLightingColorsCache(StapipLightingOptions* lightingOptions); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.hpp deleted file mode 100644 index e1d62f6..0000000 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#pragma once - -#include -#include -#include "../../stdpip_vu1_program.hpp" - -namespace Tyra { - -class StdpipCullTCVU1Program : public StdpipVU1Program { - public: - StdpipCullTCVU1Program(); - ~StdpipCullTCVU1Program(); - - std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; -}; - -} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.hpp deleted file mode 100644 index 5da4969..0000000 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.hpp +++ /dev/null @@ -1,29 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#pragma once - -#include -#include -#include "../../stdpip_vu1_program.hpp" - -namespace Tyra { - -class StdpipCullTDVU1Program : public StdpipVU1Program { - public: - StdpipCullTDVU1Program(); - ~StdpipCullTDVU1Program(); - - std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* qbuffer) const; -}; - -} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.hpp deleted file mode 100644 index 26ef7e2..0000000 --- a/engine/inc/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#pragma once - -#include "debug/debug.hpp" -#include "renderer/core/paths/path1/vu1_program.hpp" - -#include "./programs/as_is/stdpip_as_is_c_vu1_program.hpp" -#include "./programs/as_is/stdpip_as_is_d_vu1_program.hpp" -#include "./programs/as_is/stdpip_as_is_td_vu1_program.hpp" -#include "./programs/as_is/stdpip_as_is_tc_vu1_program.hpp" - -#include "./programs/cull/stdpip_cull_c_vu1_program.hpp" -#include "./programs/cull/stdpip_cull_d_vu1_program.hpp" -#include "./programs/cull/stdpip_cull_td_vu1_program.hpp" -#include "./programs/cull/stdpip_cull_tc_vu1_program.hpp" - -#include "renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp" - -namespace Tyra { - -class StdpipProgramsRepository { - public: - StdpipProgramsRepository(); - ~StdpipProgramsRepository(); - - StdpipVU1Program* getProgram(const StdpipProgramName& name); - - private: - StdpipAsIsCVU1Program asIsColor; - StdpipCullCVU1Program cullColor; - StdpipAsIsDVU1Program asIsLightingColor; - StdpipCullDVU1Program cullLightingColor; - StdpipAsIsTDVU1Program asIsLightingTextureColor; - StdpipCullTDVU1Program cullLightingTextureColor; - StdpipAsIsTCVU1Program asIsTextureColor; - StdpipCullTCVU1Program cullTextureColor; - VU1DrawFinish drawFinish; -}; - -} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp similarity index 83% rename from engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp index f79a60f..0d5ebb2 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp @@ -11,11 +11,11 @@ #include #include #include -#include "renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_package.hpp" +#include "renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp" namespace Tyra { -StdpipBagPackage::StdpipBagPackage() { +StapipBagPackage::StapipBagPackage() { size = 0; bag = nullptr; vertices = nullptr; @@ -23,24 +23,24 @@ StdpipBagPackage::StdpipBagPackage() { normals = nullptr; colors = nullptr; } -StdpipBagPackage::~StdpipBagPackage() {} +StapipBagPackage::~StapipBagPackage() {} -void StdpipBagPackage::print() const { +void StapipBagPackage::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StdpipBagPackage::print(const char* name) const { +void StapipBagPackage::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StdpipBagPackage::getPrint(const char* name) const { +std::string StapipBagPackage::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StdpipBagPackage("; + res << "StapipBagPackage("; } res << std::fixed << std::setprecision(2); res << std::endl; diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp similarity index 76% rename from engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp index 9d8e169..6cb0af3 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp @@ -11,14 +11,14 @@ #include #include #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packager.hpp" +#include "renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp" namespace Tyra { -StdpipBagPackager::StdpipBagPackager() {} -StdpipBagPackager::~StdpipBagPackager() {} +StapipBagPackager::StapipBagPackager() {} +StapipBagPackager::~StapipBagPackager() {} -void StdpipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { +void StapipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { frustumPlanes = t_frustumPlanes; } @@ -27,13 +27,13 @@ void StdpipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { * * @param size Max maxVertCount verts (VU1 buffer size) */ -StdpipBagPackage* StdpipBagPackager::create(u16* o_size, StdpipBag* data, +StapipBagPackage* StapipBagPackager::create(u16* o_size, StapipBag* data, u16 size) { - TYRA_ASSERT(size <= maxVertCount, "StdpipBagPackage can have max ", + TYRA_ASSERT(size <= maxVertCount, "StapipBagPackage can have max ", maxVertCount, " verts. Provided \"", size, "\""); *o_size = ceil(data->count / static_cast(size)); - StdpipBagPackage* result = new StdpipBagPackage[*o_size]; + StapipBagPackage* result = new StapipBagPackage[*o_size]; for (u16 i = 0; i < *o_size; i++) { result[i].bag = data; @@ -65,14 +65,14 @@ StdpipBagPackage* StdpipBagPackager::create(u16* o_size, StdpipBag* data, * * @param size Max maxVertCount verts (VU1 buffer size) */ -StdpipBagPackage* StdpipBagPackager::create(u16* o_count, - const StdpipBagPackage& pkg, +StapipBagPackage* StapipBagPackager::create(u16* o_count, + const StapipBagPackage& pkg, u16 size) { - TYRA_ASSERT(size <= maxVertCount, "StdpipBagPackage can have max ", + TYRA_ASSERT(size <= maxVertCount, "StapipBagPackage can have max ", maxVertCount, " verts. Provided \"", size, "\""); *o_count = ceil(pkg.size / static_cast(size)); - auto* result = new StdpipBagPackage[*o_count]; + auto* result = new StapipBagPackage[*o_count]; for (u16 i = 0; i < *o_count; i++) { result[i].bag = pkg.bag; @@ -99,7 +99,7 @@ StdpipBagPackage* StdpipBagPackager::create(u16* o_count, return result; } -CoreBBoxFrustum StdpipBagPackager::checkFrustum(const StdpipBagPackage& pkg) { +CoreBBoxFrustum StapipBagPackager::checkFrustum(const StapipBagPackage& pkg) { if (pkg.size <= (maxVertCount / 3)) { // Is subpackage auto& bbox = renderBBox->getChildBBox1By3(pkg.indexOf1By3BBox); return bbox.clipIsInFrustum(frustumPlanes->getAll(), *pkg.bag->info->model); @@ -112,7 +112,7 @@ CoreBBoxFrustum StdpipBagPackager::checkFrustum(const StdpipBagPackage& pkg) { } } -void StdpipBagPackager::setMaxVertCount(const u32& count) { +void StapipBagPackager::setMaxVertCount(const u32& count) { maxVertCount = count; } diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp similarity index 77% rename from engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp index f08f25f..3629d7a 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp @@ -13,11 +13,11 @@ #include #include #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/bag/packaging/stdpip_bag_packages_bbox.hpp" +#include "renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp" namespace Tyra { -StdpipBagPackagesBBox::StdpipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, +StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, const u32& t_maxVertCount) { u32 splitPartSize = t_maxVertCount / 3; @@ -34,7 +34,7 @@ StdpipBagPackagesBBox::StdpipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, mainBBox = new RenderBBox(*bboxParts, 0, partsCount); } -StdpipBagPackagesBBox::StdpipBagPackagesBBox(Vec4* t_vertices, +StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, const u32& t_count, const u32& t_maxVertCount) { u32 splitPartSize = t_maxVertCount / 3; @@ -51,40 +51,40 @@ StdpipBagPackagesBBox::StdpipBagPackagesBBox(Vec4* t_vertices, mainBBox = new RenderBBox(*bboxParts, 0, partsCount); } -const RenderBBox& StdpipBagPackagesBBox::getChildBBox1By3( +const RenderBBox& StapipBagPackagesBBox::getChildBBox1By3( const u32& index) const { TYRA_ASSERT(index < partsCount, "Index out of range. Provided index: ", index); return static_cast(bboxParts->at(index)); } -RenderBBox* StdpipBagPackagesBBox::getMainBBox() { return mainBBox; } +RenderBBox* StapipBagPackagesBBox::getMainBBox() { return mainBBox; } -const u32& StdpipBagPackagesBBox::getPartsCount() const { return partsCount; } +const u32& StapipBagPackagesBBox::getPartsCount() const { return partsCount; } -const u32& StdpipBagPackagesBBox::getVertexCount() const { return vertexCount; } +const u32& StapipBagPackagesBBox::getVertexCount() const { return vertexCount; } -RenderBBox StdpipBagPackagesBBox::createChildBBox(const u32& index, +RenderBBox StapipBagPackagesBBox::createChildBBox(const u32& index, const u16& partsSize) const { return RenderBBox(*bboxParts, index, partsSize); } -void StdpipBagPackagesBBox::print() const { +void StapipBagPackagesBBox::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StdpipBagPackagesBBox::print(const char* name) const { +void StapipBagPackagesBBox::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StdpipBagPackagesBBox::getPrint(const char* name) const { +std::string StapipBagPackagesBBox::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StdpipBagPackagesBBox("; + res << "StapipBagPackagesBBox("; } res << std::fixed << std::setprecision(2); res << std::endl; @@ -105,7 +105,7 @@ std::string StdpipBagPackagesBBox::getPrint(const char* name) const { return res.str(); } -StdpipBagPackagesBBox::~StdpipBagPackagesBBox() { +StapipBagPackagesBBox::~StapipBagPackagesBBox() { delete bboxParts; delete mainBBox; } diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp similarity index 84% rename from engine/src/renderer/3d/pipeline/std/core/bag/stdpip_bag.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp index 16c3f9b..24230a0 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp @@ -9,41 +9,41 @@ */ #include -#include "renderer/3d/pipeline/std/core/bag/stdpip_bag.hpp" +#include "renderer/3d/pipeline/static/core/bag/stapip_bag.hpp" namespace Tyra { -StdpipBag::StdpipBag() { +StapipBag::StapipBag() { info = nullptr; color = nullptr; texture = nullptr; lighting = nullptr; } -StdpipBag::~StdpipBag() {} +StapipBag::~StapipBag() {} -StdpipBagPackagesBBox StdpipBag::calculateBbox(const u32& maxVertCount) { +StapipBagPackagesBBox StapipBag::calculateBbox(const u32& maxVertCount) { TYRA_ASSERT(vertices != nullptr, "Vertices are required to calculate bbox"); TYRA_ASSERT(count > 0, "Count must be greater than 0 to calculate bbox"); - return StdpipBagPackagesBBox(vertices, count, maxVertCount); + return StapipBagPackagesBBox(vertices, count, maxVertCount); } -void StdpipBag::print() const { +void StapipBag::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StdpipBag::print(const char* name) const { +void StapipBag::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StdpipBag::getPrint(const char* name) const { +std::string StapipBag::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StdpipBag("; + res << "StapipBag("; } res << std::fixed << std::setprecision(4); res << std::endl; diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp similarity index 73% rename from engine/src/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp index 2d50dbc..470f120 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_color_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp @@ -8,15 +8,15 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/bag/stdpip_color_bag.hpp" +#include "renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp" namespace Tyra { -StdpipColorBag::StdpipColorBag() { +StapipColorBag::StapipColorBag() { single = nullptr; many = nullptr; } -StdpipColorBag::~StdpipColorBag() {} +StapipColorBag::~StapipColorBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp similarity index 71% rename from engine/src/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp index 64d5640..4f55491 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_info_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp @@ -8,17 +8,17 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/bag/stdpip_info_bag.hpp" +#include "renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp" namespace Tyra { -StdpipInfoBag::StdpipInfoBag() { - shadingType = StdpipShadingFlat; +StapipInfoBag::StapipInfoBag() { + shadingType = StapipShadingFlat; blendingEnabled = true; antiAliasingEnabled = false; model = nullptr; } -StdpipInfoBag::~StdpipInfoBag() {} +StapipInfoBag::~StapipInfoBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp similarity index 74% rename from engine/src/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp index 68dd97a..126156a 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp @@ -9,11 +9,11 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/bag/stdpip_lighting_bag.hpp" +#include "renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp" namespace Tyra { -StdpipLightingBag::StdpipLightingBag(const bool& manual) { +StapipLightingBag::StapipLightingBag(const bool& manual) { isAllocated = false; mode = Auto; normals = nullptr; @@ -27,24 +27,24 @@ StdpipLightingBag::StdpipLightingBag(const bool& manual) { } } -StdpipLightingBag::~StdpipLightingBag() { deallocate(); } +StapipLightingBag::~StapipLightingBag() { deallocate(); } -void StdpipLightingBag::setAmbientColor(const Color& color) { +void StapipLightingBag::setAmbientColor(const Color& color) { TYRA_ASSERT(mode != Manual, "Ambient color cannot be set in manual mode"); lightColors[3].set(reinterpret_cast(color)); } -void StdpipLightingBag::setDirectionalLightColors(Color* colors, +void StapipLightingBag::setDirectionalLightColors(Color* colors, const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightColor(colors[i], i); } -void StdpipLightingBag::setDirectionalLightDirections(Vec4* directions, +void StapipLightingBag::setDirectionalLightDirections(Vec4* directions, const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightDirection(directions[i], i); } -void StdpipLightingBag::setDirectionalLightColor(const Color& color, +void StapipLightingBag::setDirectionalLightColor(const Color& color, const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); @@ -52,7 +52,7 @@ void StdpipLightingBag::setDirectionalLightColor(const Color& color, lightColors[index].set(reinterpret_cast(color)); } -void StdpipLightingBag::setDirectionalLightDirection(const Vec4& direction, +void StapipLightingBag::setDirectionalLightDirection(const Vec4& direction, const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); @@ -61,19 +61,19 @@ void StdpipLightingBag::setDirectionalLightDirection(const Vec4& direction, lightDirections[index].set(direction); } -void StdpipLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { +void StapipLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { deallocate(); lightColors = colors; lightDirections = directions; mode = Manual; } -void StdpipLightingBag::disableManualMode() { +void StapipLightingBag::disableManualMode() { allocate(); mode = Auto; } -void StdpipLightingBag::allocate() { +void StapipLightingBag::allocate() { if (isAllocated) return; lightColors = new Vec4[4]; @@ -92,27 +92,27 @@ void StdpipLightingBag::allocate() { isAllocated = true; } -void StdpipLightingBag::deallocate() { +void StapipLightingBag::deallocate() { if (!isAllocated) return; forceDeallocate(); } -void StdpipLightingBag::forceDeallocate() { +void StapipLightingBag::forceDeallocate() { forceDeallocateColors(); forceDeallocateDirections(); isAllocated = false; } -void StdpipLightingBag::forceDeallocateColors() { +void StapipLightingBag::forceDeallocateColors() { if (lightColors != nullptr) { delete[] lightColors; lightColors = nullptr; } } -void StdpipLightingBag::forceDeallocateDirections() { +void StapipLightingBag::forceDeallocateDirections() { if (lightDirections != nullptr) { delete[] lightDirections; lightDirections = nullptr; diff --git a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp similarity index 72% rename from engine/src/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.cpp rename to engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp index 34542a5..0826b5b 100644 --- a/engine/src/renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp @@ -8,15 +8,15 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/bag/stdpip_texture_bag.hpp" +#include "renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp" namespace Tyra { -StdpipTextureBag::StdpipTextureBag() { +StapipTextureBag::StapipTextureBag() { coordinates = nullptr; texture = nullptr; } -StdpipTextureBag::~StdpipTextureBag() {} +StapipTextureBag::~StapipTextureBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp similarity index 93% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp index 49620cb..6267f3f 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1As_Is_C +.name StapipVU1As_Is_C .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StdpipVU1AsIsC +#vuprog StapipVU1AsIsC LoadTyraStaticData{ gifSetTag } LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp similarity index 59% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp index 34091f6..245fa43 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp @@ -9,27 +9,27 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_c_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp" -extern u32 StdpipVU1As_Is_C_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1As_Is_C_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_C_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_C_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipAsIsCVU1Program::StdpipAsIsCVU1Program() - : StdpipVU1Program(StdpipAsIsColor, &StdpipVU1As_Is_C_CodeStart, - &StdpipVU1As_Is_C_CodeEnd, +StapipAsIsCVU1Program::StapipAsIsCVU1Program() + : StapipVU1Program(StapipAsIsColor, &StapipVU1As_Is_C_CodeStart, + &StapipVU1As_Is_C_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} -StdpipAsIsCVU1Program::~StdpipAsIsCVU1Program() {} +StapipAsIsCVU1Program::~StapipAsIsCVU1Program() {} -std::string StdpipAsIsCVU1Program::getStringName() const { +std::string StapipAsIsCVU1Program::getStringName() const { return std::string("As is - C"); } -void StdpipAsIsCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipAsIsCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp similarity index 93% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp index 52ea541..43a2a5d 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1As_Is_D +.name StapipVU1As_Is_D .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StdpipVU1AsIsD +#vuprog StapipVU1AsIsD LoadTyraStaticData{ gifSetTag } LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp similarity index 62% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp index dac410e..8f8a81b 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp @@ -9,27 +9,27 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_d_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp" -extern u32 StdpipVU1As_Is_D_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1As_Is_D_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_D_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_D_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipAsIsDVU1Program::StdpipAsIsDVU1Program() - : StdpipVU1Program(StdpipAsIsDirLights, &StdpipVU1As_Is_D_CodeStart, - &StdpipVU1As_Is_D_CodeEnd, +StapipAsIsDVU1Program::StapipAsIsDVU1Program() + : StapipVU1Program(StapipAsIsDirLights, &StapipVU1As_Is_D_CodeStart, + &StapipVU1As_Is_D_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} -StdpipAsIsDVU1Program::~StdpipAsIsDVU1Program() {} +StapipAsIsDVU1Program::~StapipAsIsDVU1Program() {} -std::string StdpipAsIsDVU1Program::getStringName() const { +std::string StapipAsIsDVU1Program::getStringName() const { return std::string("As is - LC"); } -void StdpipAsIsDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipAsIsDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp index ab40535..2355a16 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1As_Is_TC +.name StapipVU1As_Is_TC .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StdpipVU1AsIsTC +#vuprog StapipVU1AsIsTC LoadTyraStaticData{ gifSetTag } LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp similarity index 63% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp index 66b3261..1bf94d7 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp @@ -9,28 +9,28 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_tc_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp" -extern u32 StdpipVU1As_Is_TC_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1As_Is_TC_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_TC_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_TC_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipAsIsTCVU1Program::StdpipAsIsTCVU1Program() - : StdpipVU1Program(StdpipAsIsTextureColor, &StdpipVU1As_Is_TC_CodeStart, - &StdpipVU1As_Is_TC_CodeEnd, +StapipAsIsTCVU1Program::StapipAsIsTCVU1Program() + : StapipVU1Program(StapipAsIsTextureColor, &StapipVU1As_Is_TC_CodeStart, + &StapipVU1As_Is_TC_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 3) {} -StdpipAsIsTCVU1Program::~StdpipAsIsTCVU1Program() {} +StapipAsIsTCVU1Program::~StapipAsIsTCVU1Program() {} -std::string StdpipAsIsTCVU1Program::getStringName() const { +std::string StapipAsIsTCVU1Program::getStringName() const { return std::string("As is - TC"); } -void StdpipAsIsTCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipAsIsTCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp index 966323f..758df0d 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1As_Is_TD +.name StapipVU1As_Is_TD .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StdpipVU1AsIsTD +#vuprog StapipVU1AsIsTD LoadTyraStaticData{ gifSetTag } LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp similarity index 66% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp index 8132b3b..4e47a2c 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp @@ -9,28 +9,28 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/as_is/stdpip_as_is_td_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp" -extern u32 StdpipVU1As_Is_TD_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1As_Is_TD_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_TD_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1As_Is_TD_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipAsIsTDVU1Program::StdpipAsIsTDVU1Program() - : StdpipVU1Program(StdpipAsIsTextureDirLights, &StdpipVU1As_Is_TD_CodeStart, - &StdpipVU1As_Is_TD_CodeEnd, +StapipAsIsTDVU1Program::StapipAsIsTDVU1Program() + : StapipVU1Program(StapipAsIsTextureDirLights, &StapipVU1As_Is_TD_CodeStart, + &StapipVU1As_Is_TD_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 4) {} -StdpipAsIsTDVU1Program::~StdpipAsIsTDVU1Program() {} +StapipAsIsTDVU1Program::~StapipAsIsTDVU1Program() {} -std::string StdpipAsIsTDVU1Program::getStringName() const { +std::string StapipAsIsTDVU1Program::getStringName() const { return std::string("As is - LTC"); } -void StdpipAsIsTDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipAsIsTDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp index 8234ae3..247f84a 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1Cull_C +.name StapipVU1Cull_C .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StdpipVU1CullC +#vuprog StapipVU1CullC ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp similarity index 59% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp index 6bd1cf4..b7c781a 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp @@ -9,26 +9,26 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_c_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp" -extern u32 StdpipVU1Cull_C_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1Cull_C_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_C_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_C_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipCullCVU1Program::StdpipCullCVU1Program() - : StdpipVU1Program( - StdpipCullColor, &StdpipVU1Cull_C_CodeStart, &StdpipVU1Cull_C_CodeEnd, +StapipCullCVU1Program::StapipCullCVU1Program() + : StapipVU1Program( + StapipCullColor, &StapipVU1Cull_C_CodeStart, &StapipVU1Cull_C_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} -StdpipCullCVU1Program::~StdpipCullCVU1Program() {} +StapipCullCVU1Program::~StapipCullCVU1Program() {} -std::string StdpipCullCVU1Program::getStringName() const { +std::string StapipCullCVU1Program::getStringName() const { return std::string("Cull - C"); } -void StdpipCullCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipCullCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp index ffa857c..ed49143 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1Cull_D +.name StapipVU1Cull_D .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StdpipVU1CullD +#vuprog StapipVU1CullD ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp similarity index 62% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp index 9ac111c..bac5d8f 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp @@ -9,27 +9,27 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_d_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp" -extern u32 StdpipVU1Cull_D_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1Cull_D_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_D_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_D_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipCullDVU1Program::StdpipCullDVU1Program() - : StdpipVU1Program(StdpipCullDirLights, &StdpipVU1Cull_D_CodeStart, - &StdpipVU1Cull_D_CodeEnd, +StapipCullDVU1Program::StapipCullDVU1Program() + : StapipVU1Program(StapipCullDirLights, &StapipVU1Cull_D_CodeStart, + &StapipVU1Cull_D_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} -StdpipCullDVU1Program::~StdpipCullDVU1Program() {} +StapipCullDVU1Program::~StapipCullDVU1Program() {} -std::string StdpipCullDVU1Program::getStringName() const { +std::string StapipCullDVU1Program::getStringName() const { return std::string("Cull - LC"); } -void StdpipCullDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipCullDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp index cc2d0bb..f1a9b2a 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1Cull_TC +.name StapipVU1Cull_TC .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StdpipVU1CullTC +#vuprog StapipVU1CullTC ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp similarity index 63% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp index 6437241..d64d609 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp @@ -9,28 +9,28 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_tc_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp" -extern u32 StdpipVU1Cull_TC_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1Cull_TC_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_TC_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_TC_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipCullTCVU1Program::StdpipCullTCVU1Program() - : StdpipVU1Program(StdpipCullTextureColor, &StdpipVU1Cull_TC_CodeStart, - &StdpipVU1Cull_TC_CodeEnd, +StapipCullTCVU1Program::StapipCullTCVU1Program() + : StapipVU1Program(StapipCullTextureColor, &StapipVU1Cull_TC_CodeStart, + &StapipVU1Cull_TC_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 3) {} -StdpipCullTCVU1Program::~StdpipCullTCVU1Program() {} +StapipCullTCVU1Program::~StapipCullTCVU1Program() {} -std::string StdpipCullTCVU1Program::getStringName() const { +std::string StapipCullTCVU1Program::getStringName() const { return std::string("Cull - TC"); } -void StdpipCullTCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipCullTCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp similarity index 94% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1.vclpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp index 22877e8..cf82eed 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp @@ -13,14 +13,14 @@ ;--------------------------------------------------------------- .syntax new -.name StdpipVU1Cull_TD +.name StapipVU1Cull_TD .vu .init_vf_all .init_vi_all #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StdpipVU1CullTD +#vuprog StapipVU1CullTD ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp similarity index 66% rename from engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp index 18c5ba4..c217f6d 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp @@ -9,28 +9,28 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/cull/stdpip_cull_td_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp" -extern u32 StdpipVU1Cull_TD_CodeStart __attribute__((section(".vudata"))); -extern u32 StdpipVU1Cull_TD_CodeEnd __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_TD_CodeStart __attribute__((section(".vudata"))); +extern u32 StapipVU1Cull_TD_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StdpipCullTDVU1Program::StdpipCullTDVU1Program() - : StdpipVU1Program(StdpipCullTextureDirLights, &StdpipVU1Cull_TD_CodeStart, - &StdpipVU1Cull_TD_CodeEnd, +StapipCullTDVU1Program::StapipCullTDVU1Program() + : StapipVU1Program(StapipCullTextureDirLights, &StapipVU1Cull_TD_CodeStart, + &StapipVU1Cull_TD_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 4) {} -StdpipCullTDVU1Program::~StdpipCullTDVU1Program() {} +StapipCullTDVU1Program::~StapipCullTDVU1Program() {} -std::string StdpipCullTDVU1Program::getStringName() const { +std::string StapipCullTDVU1Program::getStringName() const { return std::string("Cull - LTC"); } -void StdpipCullTDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StdpipQBuffer* qbuffer) const { +void StapipCullTDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StapipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_clipper.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp similarity index 81% rename from engine/src/renderer/3d/pipeline/std/core/path1/stdpip_clipper.cpp rename to engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp index 42f3d05..1a4de98 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_clipper.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp @@ -8,22 +8,22 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/path1/stdpip_clipper.hpp" +#include "renderer/3d/pipeline/static/core/stapip_clipper.hpp" namespace Tyra { -StdpipClipper::StdpipClipper() {} -StdpipClipper::~StdpipClipper() {} +StapipClipper::StapipClipper() {} +StapipClipper::~StapipClipper() {} -void StdpipClipper::setMVP(M4x4* t_mvp) { mvp = t_mvp; } +void StapipClipper::setMVP(M4x4* t_mvp) { mvp = t_mvp; } -void StdpipClipper::init(const RendererSettings& settings) { +void StapipClipper::init(const RendererSettings& settings) { algorithm.init(settings); } -void StdpipClipper::setMaxVertCount(const u32& count) { maxVertCount = count; } +void StapipClipper::setMaxVertCount(const u32& count) { maxVertCount = count; } -void StdpipClipper::clip(StdpipQBuffer* buffer) { +void StapipClipper::clip(StapipQBuffer* buffer) { TYRA_ASSERT(buffer->size <= maxVertCount / 3, "Buffer should have max ", maxVertCount / 3, " verts if we want to clip it."); @@ -64,14 +64,14 @@ void StdpipClipper::clip(StdpipQBuffer* buffer) { moveDataToBuffer(clippedVertices, buffer); } -void StdpipClipper::perspectiveDivide(std::vector* vertices) { +void StapipClipper::perspectiveDivide(std::vector* vertices) { for (u32 i = 0; i < vertices->size(); i++) { (*vertices)[i].position /= (*vertices)[i].position.w; } } -void StdpipClipper::moveDataToBuffer( - const std::vector& vertices, StdpipQBuffer* buffer) { +void StapipClipper::moveDataToBuffer( + const std::vector& vertices, StapipQBuffer* buffer) { buffer->reallocateManually(vertices.size()); for (u32 i = 0; i < vertices.size(); i++) { diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp new file mode 100644 index 0000000..faf4439 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp @@ -0,0 +1,48 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/static/core/stapip_programs_repository.hpp" + +namespace Tyra { + +StapipProgramsRepository::StapipProgramsRepository() {} + +StapipProgramsRepository::~StapipProgramsRepository() {} + +StapipVU1Program* StapipProgramsRepository::getProgram( + const StapipProgramName& name) { + switch (name) { + case StapipProgramName::StapipAsIsColor: + return &asIsColor; + case StapipProgramName::StapipCullColor: + return &cullColor; + + case StapipProgramName::StapipAsIsDirLights: + return &asIsLightingColor; + case StapipProgramName::StapipCullDirLights: + return &cullLightingColor; + + case StapipProgramName::StapipAsIsTextureDirLights: + return &asIsLightingTextureColor; + case StapipProgramName::StapipCullTextureDirLights: + return &cullLightingTextureColor; + + case StapipProgramName::StapipAsIsTextureColor: + return &asIsTextureColor; + case StapipProgramName::StapipCullTextureColor: + return &cullTextureColor; + + default: + TYRA_TRAP("Unknown VU1 program name"); + return &cullLightingTextureColor; + } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp similarity index 85% rename from engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.cpp rename to engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp index c650943..89740ff 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp @@ -8,11 +8,11 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/path1/stdpip_qbuffer.hpp" +#include "renderer/3d/pipeline/static/core/stapip_qbuffer.hpp" namespace Tyra { -StdpipQBuffer::StdpipQBuffer() { +StapipQBuffer::StapipQBuffer() { size = 0; _isDynamicallyAllocated = false; _stAllocated = false; @@ -25,11 +25,11 @@ StdpipQBuffer::StdpipQBuffer() { normals = nullptr; } -StdpipQBuffer::~StdpipQBuffer() { deallocateDynamicData(); } +StapipQBuffer::~StapipQBuffer() { deallocateDynamicData(); } -void StdpipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } +void StapipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } -void StdpipQBuffer::fillByPointer(const StdpipBagPackage& pkg) { +void StapipQBuffer::fillByPointer(const StapipBagPackage& pkg) { TYRA_ASSERT(pkg.size <= maxVertCount, "VU1 buffer supports only ", maxVertCount, " verts. Provided: ", pkg.size); @@ -43,9 +43,9 @@ void StdpipQBuffer::fillByPointer(const StdpipBagPackage& pkg) { bag = pkg.bag; } -void StdpipQBuffer::fillByCopyMax(const StdpipBagPackage& pkg1, - const StdpipBagPackage& pkg2, - const StdpipBagPackage& pkg3) { +void StapipQBuffer::fillByCopyMax(const StapipBagPackage& pkg1, + const StapipBagPackage& pkg2, + const StapipBagPackage& pkg3) { TYRA_ASSERT(pkg1.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg1.size); TYRA_ASSERT(pkg2.size <= maxVertCount / 3, @@ -95,8 +95,8 @@ void StdpipQBuffer::fillByCopyMax(const StdpipBagPackage& pkg1, bag = pkg1.bag; } -void StdpipQBuffer::fillByCopy1By2(const StdpipBagPackage& pkg1, - const StdpipBagPackage& pkg2) { +void StapipQBuffer::fillByCopy1By2(const StapipBagPackage& pkg1, + const StapipBagPackage& pkg2) { TYRA_ASSERT(pkg1.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg1.size); TYRA_ASSERT(pkg2.size <= maxVertCount / 3, @@ -131,7 +131,7 @@ void StdpipQBuffer::fillByCopy1By2(const StdpipBagPackage& pkg1, bag = pkg1.bag; } -void StdpipQBuffer::fillByCopy1By3(const StdpipBagPackage& pkg) { +void StapipQBuffer::fillByCopy1By3(const StapipBagPackage& pkg) { TYRA_ASSERT(pkg.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg.size); @@ -153,13 +153,13 @@ void StdpipQBuffer::fillByCopy1By3(const StdpipBagPackage& pkg) { bag = pkg.bag; } -void StdpipQBuffer::reallocateManually(const u16& t_size) { +void StapipQBuffer::reallocateManually(const u16& t_size) { deallocateDynamicData(); allocateDynamicData(t_size, bag); size = t_size; } -void StdpipQBuffer::deallocateDynamicData() { +void StapipQBuffer::deallocateDynamicData() { if (_isDynamicallyAllocated) { delete[] vertices; @@ -184,7 +184,7 @@ void StdpipQBuffer::deallocateDynamicData() { /** When we not receive maxVertCount vertices, we must align it by ourself. * Too bad - not efficient. */ -void StdpipQBuffer::allocateDynamicData(u16 size, StdpipBag* bag) { +void StapipQBuffer::allocateDynamicData(u16 size, StapipBag* bag) { TYRA_ASSERT(size <= maxVertCount, "Wrong size. Max buffer size in VU1 is ", maxVertCount, ". Provided: ", size); TYRA_ASSERT(!_isDynamicallyAllocated, "Buffer is already allocated"); @@ -209,19 +209,19 @@ void StdpipQBuffer::allocateDynamicData(u16 size, StdpipBag* bag) { _isDynamicallyAllocated = true; } -bool StdpipQBuffer::any() const { return size > 0; } +bool StapipQBuffer::any() const { return size > 0; } -void StdpipQBuffer::print() const { +void StapipQBuffer::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StdpipQBuffer::print(const char* name) const { +void StapipQBuffer::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StdpipQBuffer::getPrint(const char* name) const { +std::string StapipQBuffer::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp similarity index 67% rename from engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.cpp rename to engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index b9df310..d8d19ad 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -8,8 +8,8 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/path1/stdpip_qbuffer_renderer.hpp" -#include "renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp" +#include "renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" namespace Tyra { @@ -34,14 +34,14 @@ namespace Tyra { * */ -StdpipQBufferRenderer::StdpipQBufferRenderer() { +StapipQBufferRenderer::StapipQBufferRenderer() { context = 0; lastProgramName = StdipUndefinedProgram; staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); programsPacket = nullptr; } -StdpipQBufferRenderer::~StdpipQBufferRenderer() { +StapipQBufferRenderer::~StapipQBufferRenderer() { packet2_free(packets[0]); packet2_free(packets[1]); packet2_free(staticDataPacket); @@ -50,7 +50,7 @@ StdpipQBufferRenderer::~StdpipQBufferRenderer() { if (programsPacket) packet2_free(programsPacket); } -void StdpipQBufferRenderer::init(RendererCore* t_core) { +void StapipQBufferRenderer::init(RendererCore* t_core) { path1 = t_core->getPath1(); clipper.init(t_core->getSettings()); rendererCore = t_core; @@ -73,16 +73,16 @@ void StdpipQBufferRenderer::init(RendererCore* t_core) { TYRA_LOG("Renderer3DQBufferRenderer initialized"); } -void StdpipQBufferRenderer::reinitVU1() { +void StapipQBufferRenderer::reinitVU1() { sendStaticData(); uploadPrograms(); setDoubleBuffer(); } -StdpipQBuffer* StdpipQBufferRenderer::getBuffer() { return &buffers[context]; } +StapipQBuffer* StapipQBufferRenderer::getBuffer() { return &buffers[context]; } -void StdpipQBufferRenderer::sendObjectData( - StdpipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { +void StapipQBufferRenderer::sendObjectData( + StapipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { packet2_reset(objectDataPacket, false); packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_MVP_MATRIX_ADDR, mvp->data, 4, false); @@ -130,13 +130,13 @@ void StdpipQBufferRenderer::sendObjectData( dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } -void StdpipQBufferRenderer::setInfo(StdpipInfoBag* bag) { +void StapipQBufferRenderer::setInfo(StapipInfoBag* bag) { rendererCore->gs.prim.antialiasing = bag->antiAliasingEnabled; rendererCore->gs.prim.blending = bag->blendingEnabled; rendererCore->gs.prim.shading = bag->shadingType; } -void StdpipQBufferRenderer::sendStaticData() const { +void StapipQBufferRenderer::sendStaticData() const { packet2_reset(staticDataPacket, false); packet2_utils_vu_open_unpack(staticDataPacket, VU1_SET_GIFTAG_ADDR, false); { packet2_utils_gif_add_set(staticDataPacket, 1); } @@ -147,27 +147,27 @@ void StdpipQBufferRenderer::sendStaticData() const { dma_channel_send_packet2(staticDataPacket, DMA_CHANNEL_VIF1, true); } -void StdpipQBufferRenderer::setProgramsCache() { +void StapipQBufferRenderer::setProgramsCache() { VU1Program** programs = new VU1Program*[8]; - programs[0] = repository.getProgram(StdpipCullColor); - programs[1] = repository.getProgram(StdpipAsIsColor); - programs[2] = repository.getProgram(StdpipCullDirLights); - programs[3] = repository.getProgram(StdpipAsIsDirLights); - programs[4] = repository.getProgram(StdpipCullTextureDirLights); - programs[5] = repository.getProgram(StdpipAsIsTextureDirLights); - programs[6] = repository.getProgram(StdpipCullTextureColor); - programs[7] = repository.getProgram(StdpipAsIsTextureColor); + programs[0] = repository.getProgram(StapipCullColor); + programs[1] = repository.getProgram(StapipAsIsColor); + programs[2] = repository.getProgram(StapipCullDirLights); + programs[3] = repository.getProgram(StapipAsIsDirLights); + programs[4] = repository.getProgram(StapipCullTextureDirLights); + programs[5] = repository.getProgram(StapipAsIsTextureDirLights); + programs[6] = repository.getProgram(StapipCullTextureColor); + programs[7] = repository.getProgram(StapipAsIsTextureColor); programsPacket = path1->createProgramsCache(programs, 8, 0); delete[] programs; } -void StdpipQBufferRenderer::uploadPrograms() { +void StapipQBufferRenderer::uploadPrograms() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(programsPacket, DMA_CHANNEL_VIF1, true); dma_channel_wait(DMA_CHANNEL_VIF1, 0); } -void StdpipQBufferRenderer::setDoubleBuffer() { +void StapipQBufferRenderer::setDoubleBuffer() { u16 startingAddr = VU1_LAST_ITEM_ADDR + 1; const u16 bufferMaxSize = 1000; bufferSize = (bufferMaxSize - startingAddr) / 2; @@ -178,7 +178,7 @@ void StdpipQBufferRenderer::setDoubleBuffer() { // buffer, to first addr of second buffer } -void StdpipQBufferRenderer::cull(StdpipQBuffer* buffer) { +void StapipQBufferRenderer::cull(StapipQBuffer* buffer) { if (buffer->size == 0) { return; } @@ -188,8 +188,8 @@ void StdpipQBufferRenderer::cull(StdpipQBuffer* buffer) { sendPacket(); } -// void StdpipQBufferRenderer::sendFinishTag() { -// StdpipQBufferRenderer way proposition +// void StapipQBufferRenderer::sendFinishTag() { +// StapipQBufferRenderer way proposition // auto program = path1->getProgramByName(Draw_Finish); // addBufferDataToPacket(program, nullptr); // sendPacket(); @@ -206,7 +206,7 @@ void StdpipQBufferRenderer::cull(StdpipQBuffer* buffer) { // packet2_free(packet2); // } -void StdpipQBufferRenderer::clip(StdpipQBuffer* buffer) { +void StapipQBufferRenderer::clip(StapipQBuffer* buffer) { if (buffer->size == 0) { return; } @@ -220,12 +220,12 @@ void StdpipQBufferRenderer::clip(StdpipQBuffer* buffer) { } } -void StdpipQBufferRenderer::clearLastProgramName() { +void StapipQBufferRenderer::clearLastProgramName() { lastProgramName = StdipUndefinedProgram; } -void StdpipQBufferRenderer::addBufferDataToPacket(StdpipVU1Program* program, - StdpipQBuffer* buffer) { +void StapipQBufferRenderer::addBufferDataToPacket(StapipVU1Program* program, + StapipQBuffer* buffer) { currentPacket = packets[context]; packet2_reset(currentPacket, false); @@ -241,7 +241,7 @@ void StdpipQBufferRenderer::addBufferDataToPacket(StdpipVU1Program* program, packet2_utils_vu_add_end_tag(currentPacket); } -void StdpipQBufferRenderer::sendPacket() { +void StapipQBufferRenderer::sendPacket() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); @@ -249,72 +249,72 @@ void StdpipQBufferRenderer::sendPacket() { context = !context; } -void StdpipQBufferRenderer::setMaxVertCount(const u32& count) { +void StapipQBufferRenderer::setMaxVertCount(const u32& count) { buffers[0].setMaxVertCount(count); buffers[1].setMaxVertCount(count); clipper.setMaxVertCount(count); } -StdpipVU1Program* StdpipQBufferRenderer::getAsIsProgramByBag( - const StdpipBag* bag) { +StapipVU1Program* StapipQBufferRenderer::getAsIsProgramByBag( + const StapipBag* bag) { auto programType = getDrawProgramTypeByBag(bag); - if (programType == StdpipVU1TextureDirLights) - return getProgramByName(StdpipAsIsTextureDirLights); - else if (programType == StdpipVU1DirLights) - return getProgramByName(StdpipAsIsDirLights); - else if (programType == StdpipVU1TextureColor) - return getProgramByName(StdpipAsIsTextureColor); + if (programType == StapipVU1TextureDirLights) + return getProgramByName(StapipAsIsTextureDirLights); + else if (programType == StapipVU1DirLights) + return getProgramByName(StapipAsIsDirLights); + else if (programType == StapipVU1TextureColor) + return getProgramByName(StapipAsIsTextureColor); else - return getProgramByName(StdpipAsIsColor); + return getProgramByName(StapipAsIsColor); } -StdpipVU1Program* StdpipQBufferRenderer::getCullProgramByBag( - const StdpipBag* bag) { +StapipVU1Program* StapipQBufferRenderer::getCullProgramByBag( + const StapipBag* bag) { auto programType = getDrawProgramTypeByBag(bag); return getCullProgramByType(programType); } -StdpipVU1Program* StdpipQBufferRenderer::getProgramByName( - const StdpipProgramName& name) { +StapipVU1Program* StapipQBufferRenderer::getProgramByName( + const StapipProgramName& name) { return repository.getProgram(name); } -StdpipVU1Program* StdpipQBufferRenderer::getCullProgramByParams( +StapipVU1Program* StapipQBufferRenderer::getCullProgramByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) { auto type = getDrawProgramTypeByParams(isLightingEnabled, isTextureEnabled); return getCullProgramByType(type); } -StdpipVU1Program* StdpipQBufferRenderer::getCullProgramByType( - const StdpipProgramType& programType) { - if (programType == StdpipVU1TextureDirLights) - return getProgramByName(StdpipCullTextureDirLights); - else if (programType == StdpipVU1DirLights) - return getProgramByName(StdpipCullDirLights); - else if (programType == StdpipVU1TextureColor) - return getProgramByName(StdpipCullTextureColor); +StapipVU1Program* StapipQBufferRenderer::getCullProgramByType( + const StapipProgramType& programType) { + if (programType == StapipVU1TextureDirLights) + return getProgramByName(StapipCullTextureDirLights); + else if (programType == StapipVU1DirLights) + return getProgramByName(StapipCullDirLights); + else if (programType == StapipVU1TextureColor) + return getProgramByName(StapipCullTextureColor); else - return getProgramByName(StdpipCullColor); + return getProgramByName(StapipCullColor); } -StdpipProgramType StdpipQBufferRenderer::getDrawProgramTypeByBag( - const StdpipBag* bag) const { +StapipProgramType StapipQBufferRenderer::getDrawProgramTypeByBag( + const StapipBag* bag) const { auto isLightingEnabled = bag->lighting != nullptr; auto isTextureEnabled = bag->texture != nullptr; return getDrawProgramTypeByParams(isLightingEnabled, isTextureEnabled); } -StdpipProgramType StdpipQBufferRenderer::getDrawProgramTypeByParams( +StapipProgramType StapipQBufferRenderer::getDrawProgramTypeByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) const { if (isLightingEnabled && isTextureEnabled) - return StdpipVU1TextureDirLights; + return StapipVU1TextureDirLights; else if (isLightingEnabled) - return StdpipVU1DirLights; + return StapipVU1DirLights; else if (isTextureEnabled) - return StdpipVU1TextureColor; + return StapipVU1TextureColor; else - return StdpipVU1Color; + return StapipVU1Color; } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp similarity index 77% rename from engine/src/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp index 9725637..32f80a1 100644 --- a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp @@ -8,11 +8,11 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/path1/stdpip_vu1_program.hpp" +#include "renderer/3d/pipeline/static/core/stapip_vu1_program.hpp" namespace Tyra { -StdpipVU1Program::StdpipVU1Program(const StdpipProgramName& t_name, +StapipVU1Program::StapipVU1Program(const StapipProgramName& t_name, u32* t_start, u32* t_end, const u32& t_reglist, const u8& t_reglistCount, @@ -26,21 +26,21 @@ StdpipVU1Program::StdpipVU1Program(const StdpipProgramName& t_name, programSize = calculateProgramSize(); } -StdpipVU1Program::~StdpipVU1Program() {} +StapipVU1Program::~StapipVU1Program() {} -const StdpipProgramName& StdpipVU1Program::getName() const { return name; } +const StapipProgramName& StapipVU1Program::getName() const { return name; } -u32& StdpipVU1Program::getReglist() { return reglist; } +u32& StapipVU1Program::getReglist() { return reglist; } -void StdpipVU1Program::addBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* buffer, +void StapipVU1Program::addBufferDataToPacket(packet2_t* packet, + StapipQBuffer* buffer, prim_t* prim) { addStandardBufferDataToPacket(packet, buffer, prim); addProgramQBufferDataToPacket(packet, buffer); } -void StdpipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, - StdpipQBuffer* buffer, +void StapipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, + StapipQBuffer* buffer, prim_t* prim) { if (buffer->bag->texture) prim->mapping = 1; @@ -61,7 +61,7 @@ void StdpipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, packet2_utils_vu_close_unpack(packet); } -u16 StdpipVU1Program::getMaxVertCount(const bool& singleColorEnabled, +u16 StapipVU1Program::getMaxVertCount(const bool& singleColorEnabled, const u16& bufferSize) const { u16 res = bufferSize - 4; u8 colorElementsPerVertex = diff --git a/engine/src/renderer/3d/pipeline/std/core/std_pipeline_core.cpp b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp similarity index 90% rename from engine/src/renderer/3d/pipeline/std/core/std_pipeline_core.cpp rename to engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp index 3444b94..ca6936d 100644 --- a/engine/src/renderer/3d/pipeline/std/core/std_pipeline_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/core/std_pipeline_core.hpp" +#include "renderer/3d/pipeline/static/core/static_pipeline_core.hpp" #include "renderer/core/renderer_core.hpp" #include "thread/threading.hpp" @@ -22,26 +22,26 @@ namespace Tyra { -StdPipelineCore::StdPipelineCore() { maxVertCount = 0; } +StapipelineCore::StapipelineCore() { maxVertCount = 0; } -StdPipelineCore::~StdPipelineCore() {} +StapipelineCore::~StapipelineCore() {} -void StdPipelineCore::init(RendererCore* t_core) { +void StapipelineCore::init(RendererCore* t_core) { rendererCore = t_core; qbufferRenderer.init(t_core); packager.init(&rendererCore->renderer3D.frustumPlanes); } -void StdPipelineCore::reinitStandardVU1Programs() { +void StapipelineCore::reinitStandardVU1Programs() { qbufferRenderer.reinitVU1(); } -u32 StdPipelineCore::getMaxVertCountByBag(const StdpipBag* bag) { +u32 StapipelineCore::getMaxVertCountByBag(const StapipBag* bag) { return qbufferRenderer.getCullProgramByBag(bag)->getMaxVertCount( bag->color->many == nullptr, qbufferRenderer.getBufferSize()); } -u32 StdPipelineCore::getMaxVertCountByParams(const bool& isSingleColor, +u32 StapipelineCore::getMaxVertCountByParams(const bool& isSingleColor, const bool& isLightingEnabled, const bool& isTextureEnabled) { return qbufferRenderer @@ -49,7 +49,7 @@ u32 StdPipelineCore::getMaxVertCountByParams(const bool& isSingleColor, ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); } -void StdPipelineCore::render(StdpipBag* bag, StdpipBagPackagesBBox* bbox) { +void StapipelineCore::render(StapipBag* bag, StapipBagPackagesBBox* bbox) { if (bag->count <= 0) return; TYRA_ASSERT(bag->vertices != nullptr, @@ -71,7 +71,7 @@ void StdPipelineCore::render(StdpipBag* bag, StdpipBagPackagesBBox* bbox) { !bag->texture || (bag->texture->texture && bag->texture->coordinates), "If you want texture, please provide texture and coordinates!"); - StdpipBagPackagesBBox* renderBbox; + StapipBagPackagesBBox* renderBbox; u32 maxVertCount = getMaxVertCountByBag(bag); @@ -79,7 +79,7 @@ void StdPipelineCore::render(StdpipBag* bag, StdpipBagPackagesBBox* bbox) { if (!bbox) renderBbox = - new StdpipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); + new StapipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); else renderBbox = bbox; @@ -141,7 +141,7 @@ void StdPipelineCore::render(StdpipBag* bag, StdpipBagPackagesBBox* bbox) { Verbose("Render finished"); } -void StdPipelineCore::renderPkgs(StdpipBagPackage* packages, u16 count) { +void StapipelineCore::renderPkgs(StapipBagPackage* packages, u16 count) { for (u16 i = 0; i < count; i++) { if (packages[i].isInFrustum == IN_FRUSTUM) { Verbose(i, " - package in frustum -> cull"); @@ -161,7 +161,7 @@ void StdPipelineCore::renderPkgs(StdpipBagPackage* packages, u16 count) { } } -void StdPipelineCore::renderSubpkgs(StdpipBagPackage* subpkgs, u16 count) { +void StapipelineCore::renderSubpkgs(StapipBagPackage* subpkgs, u16 count) { std::vector doneIndexes; std::vector loadedIndexes; @@ -218,7 +218,7 @@ void StdPipelineCore::renderSubpkgs(StdpipBagPackage* subpkgs, u16 count) { } } -void StdPipelineCore::setMaxVertCount(const u32& count) { +void StapipelineCore::setMaxVertCount(const u32& count) { maxVertCount = count; packager.setMaxVertCount(count); qbufferRenderer.setMaxVertCount(count); diff --git a/engine/src/renderer/3d/pipeline/std/std_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp similarity index 83% rename from engine/src/renderer/3d/pipeline/std/std_pipeline.cpp rename to engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 00982b4..26eb90f 100644 --- a/engine/src/renderer/3d/pipeline/std/std_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -8,22 +8,22 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/std/std_pipeline.hpp" +#include "renderer/3d/pipeline/static/static_pipeline.hpp" namespace Tyra { -StdPipeline::StdPipeline() { colorsCache = new Vec4[4]; } +Stapipeline::Stapipeline() { colorsCache = new Vec4[4]; } -StdPipeline::~StdPipeline() { delete[] colorsCache; } +Stapipeline::~Stapipeline() { delete[] colorsCache; } -void StdPipeline::init(RendererCore* t_core) { +void Stapipeline::init(RendererCore* t_core) { rendererCore = t_core; core.init(t_core); } -void StdPipeline::onUse() { core.reinitStandardVU1Programs(); } +void Stapipeline::onUse() { core.reinitStandardVU1Programs(); } -void StdPipeline::render(Mesh* mesh, const StdpipOptions* options) { +void Stapipeline::render(Mesh* mesh, const StapipOptions* options) { auto model = mesh->getModelMatrix(); MeshFrame* frameFrom = mesh->getFramesCount() > 0 @@ -49,7 +49,7 @@ void StdPipeline::render(Mesh* mesh, const StdpipOptions* options) { // material->isSingleColorActivated(), material->getNormalFaces(), // material->getTextureCoordFaces()); - StdpipBag bag; + StapipBag bag; addVertices(mesh, material, &bag, frameFrom, frameTo); bag.info = infoBag; bag.color = getColorBag(mesh, material, frameFrom, frameTo); @@ -65,8 +65,8 @@ void StdPipeline::render(Mesh* mesh, const StdpipOptions* options) { delete infoBag; } -void StdPipeline::addVertices(Mesh* mesh, MeshMaterial* material, - StdpipBag* bag, MeshFrame* frameFrom, +void Stapipeline::addVertices(Mesh* mesh, MeshMaterial* material, + StapipBag* bag, MeshFrame* frameFrom, MeshFrame* frameTo) const { bag->count = material->getFacesCount(); bag->vertices = new Vec4[bag->count]; @@ -83,9 +83,9 @@ void StdPipeline::addVertices(Mesh* mesh, MeshMaterial* material, } } -StdpipInfoBag* StdPipeline::getInfoBag(Mesh* mesh, const StdpipOptions* options, +StapipInfoBag* Stapipeline::getInfoBag(Mesh* mesh, const StapipOptions* options, M4x4* model) const { - auto* result = new StdpipInfoBag(); + auto* result = new StapipInfoBag(); if (options) { result->antiAliasingEnabled = options->antiAliasingEnabled; @@ -95,7 +95,7 @@ StdpipInfoBag* StdPipeline::getInfoBag(Mesh* mesh, const StdpipOptions* options, } else { result->antiAliasingEnabled = false; result->blendingEnabled = true; - result->shadingType = StdpipShadingFlat; + result->shadingType = StapipShadingFlat; result->noClipChecks = true; } @@ -104,10 +104,10 @@ StdpipInfoBag* StdPipeline::getInfoBag(Mesh* mesh, const StdpipOptions* options, return result; } -StdpipColorBag* StdPipeline::getColorBag(Mesh* mesh, MeshMaterial* material, +StapipColorBag* Stapipeline::getColorBag(Mesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo) const { - auto* result = new StdpipColorBag(); + auto* result = new StapipColorBag(); if (material->isSingleColorActivated()) { result->single = &material->singleColor; @@ -131,12 +131,12 @@ StdpipColorBag* StdPipeline::getColorBag(Mesh* mesh, MeshMaterial* material, return result; } -StdpipTextureBag* StdPipeline::getTextureBag(Mesh* mesh, MeshMaterial* material, +StapipTextureBag* Stapipeline::getTextureBag(Mesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo) { if (!material->getTextureCoordFaces()) return nullptr; - auto* result = new StdpipTextureBag(); + auto* result = new StapipTextureBag(); result->texture = rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); @@ -160,14 +160,14 @@ StdpipTextureBag* StdPipeline::getTextureBag(Mesh* mesh, MeshMaterial* material, return result; } -StdpipLightingBag* StdPipeline::getLightingBag( +StapipLightingBag* Stapipeline::getLightingBag( Mesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, const StdpipOptions* options) const { + MeshFrame* frameTo, const StapipOptions* options) const { if (!material->getNormalFaces() || options == nullptr || options->lighting == nullptr) return nullptr; - auto* result = new StdpipLightingBag(true); + auto* result = new StapipLightingBag(true); result->lightMatrix = model; result->setLightsManually(colorsCache, @@ -189,8 +189,8 @@ StdpipLightingBag* StdPipeline::getLightingBag( return result; } -void StdPipeline::setLightingColorsCache( - StdpipLightingOptions* lightingOptions) { +void Stapipeline::setLightingColorsCache( + StapipLightingOptions* lightingOptions) { for (int i = 0; i < 3; i++) { colorsCache[i] = reinterpret_cast(lightingOptions->directionalColors[i]); @@ -198,7 +198,7 @@ void StdPipeline::setLightingColorsCache( colorsCache[3] = reinterpret_cast(*lightingOptions->ambientColor); } -void StdPipeline::deallocDrawBags(StdpipBag* bag, +void Stapipeline::deallocDrawBags(StapipBag* bag, MeshMaterial* material) const { if (bag->color->many) { delete[] bag->color->many; diff --git a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.cpp deleted file mode 100644 index b102150..0000000 --- a/engine/src/renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#include "renderer/3d/pipeline/std/core/path1/stdpip_programs_repository.hpp" - -namespace Tyra { - -StdpipProgramsRepository::StdpipProgramsRepository() {} - -StdpipProgramsRepository::~StdpipProgramsRepository() {} - -StdpipVU1Program* StdpipProgramsRepository::getProgram( - const StdpipProgramName& name) { - switch (name) { - case StdpipProgramName::StdpipAsIsColor: - return &asIsColor; - case StdpipProgramName::StdpipCullColor: - return &cullColor; - - case StdpipProgramName::StdpipAsIsDirLights: - return &asIsLightingColor; - case StdpipProgramName::StdpipCullDirLights: - return &cullLightingColor; - - case StdpipProgramName::StdpipAsIsTextureDirLights: - return &asIsLightingTextureColor; - case StdpipProgramName::StdpipCullTextureDirLights: - return &cullLightingTextureColor; - - case StdpipProgramName::StdpipAsIsTextureColor: - return &asIsTextureColor; - case StdpipProgramName::StdpipCullTextureColor: - return &cullTextureColor; - - default: - TYRA_TRAP("Unknown VU1 program name"); - return &cullLightingTextureColor; - } -} - -} // namespace Tyra diff --git a/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp b/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp index 95e687f..25f5458 100644 --- a/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp +++ b/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp @@ -18,7 +18,7 @@ #include "src/renderer/core/paths/path1/programs/vcl_sml.i" #include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/std/core/path1/programs/stdpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" --enter --endenter diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index 3f59399..d78df49 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -13,7 +13,7 @@ #include #include #include "renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp" -#include "renderer/3d/pipeline/std/std_pipeline.hpp" +#include "renderer/3d/pipeline/static/static_pipeline.hpp" namespace Tyra { @@ -39,8 +39,8 @@ class H4570 : public Game { Vec4 cameraPosition, cameraLookAt; MinecraftPipeline mcPip; - StdPipeline stdPip; - StdpipOptions* renderOptions; + Stapipeline stapip; + StapipOptions* renderOptions; Texture* blocksTex; u32 blocksCount; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 7bccfc4..d63d4fc 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -18,7 +18,7 @@ H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} Mesh* getWarrior(Renderer* renderer); -StdpipOptions* getRenderingOptions(); +StapipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); void H4570::init() { @@ -65,7 +65,7 @@ void H4570::init() { FileUtils::fromCwd("blocks.png")); mcPip.init(&engine->renderer.core); - stdPip.init(&engine->renderer.core); + stapip.init(&engine->renderer.core); picture = get2DPicture(&engine->renderer); @@ -137,12 +137,12 @@ void H4570::loop() { // engine->renderer.renderer2D.render(picture); - engine->renderer.renderer3D.usePipeline(&stdPip); + engine->renderer.renderer3D.usePipeline(&stapip); { - stdPip.render(warrior, renderOptions); - // stdPip.render(warrior2, renderOptions); - // stdPip.render(warrior3, renderOptions); - // stdPip.render(warrior4, renderOptions); + stapip.render(warrior, renderOptions); + // stapip.render(warrior2, renderOptions); + // stapip.render(warrior3, renderOptions); + // stapip.render(warrior4, renderOptions); } engine->renderer.renderer3D.usePipeline(&mcPip); @@ -179,8 +179,8 @@ Sprite* get2DPicture(Renderer* renderer) { return sprite; } -StdpipOptions* getRenderingOptions() { - auto* options = new StdpipOptions(); +StapipOptions* getRenderingOptions() { + auto* options = new StapipOptions(); auto* ambientColor = new Color(32.0F, 32.0F, 32.0F, 32.0F); auto* directionalColors = new Color[3]; @@ -189,12 +189,12 @@ StdpipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StdpipLightingOptions(); // Memory leak! + auto* lightingOptions = new StapipLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StdpipShadingGouraud; + options->shadingType = Tyra::StapipShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; diff --git a/samples/wellinator/inc/wellinator.hpp b/samples/wellinator/inc/wellinator.hpp index 236516a..db3b3b9 100644 --- a/samples/wellinator/inc/wellinator.hpp +++ b/samples/wellinator/inc/wellinator.hpp @@ -13,7 +13,7 @@ #include #include #include "renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp" -#include "renderer/3d/pipeline/std/std_pipeline.hpp" +#include "renderer/3d/pipeline/static/static_pipeline.hpp" namespace Tyra { @@ -36,8 +36,8 @@ class Wellinator : public Game { Vec4 cameraPosition, cameraLookAt; MinecraftPipeline mcPip; - StdPipeline stdPip; - StdpipOptions* renderOptions; + Stapipeline stapip; + StapipOptions* renderOptions; Texture* blocksTex; u32 blocksCount; diff --git a/samples/wellinator/src/wellinator.cpp b/samples/wellinator/src/wellinator.cpp index 4504c30..829fde4 100644 --- a/samples/wellinator/src/wellinator.cpp +++ b/samples/wellinator/src/wellinator.cpp @@ -18,7 +18,7 @@ Wellinator::Wellinator(Engine* t_engine) { engine = t_engine; } Wellinator::~Wellinator() {} Mesh* getWarrior(Renderer* renderer); -StdpipOptions* getRenderingOptions(); +StapipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); void Wellinator::init() { @@ -42,7 +42,7 @@ void Wellinator::init() { FileUtils::fromCwd("blocks.png")); mcPip.init(&engine->renderer.core); - stdPip.init(&engine->renderer.core); + stapip.init(&engine->renderer.core); picture = get2DPicture(&engine->renderer); @@ -116,8 +116,8 @@ void Wellinator::loop() { // warrior->setPosition(*nextPos); - engine->renderer.renderer3D.usePipeline(&stdPip); - { stdPip.render(warrior, renderOptions); } + engine->renderer.renderer3D.usePipeline(&stapip); + { stapip.render(warrior, renderOptions); } engine->renderer.renderer3D.usePipeline(&mcPip); { mcPip.render(blocks, blocksCount, blocksTex, false); } @@ -150,8 +150,8 @@ Sprite* get2DPicture(Renderer* renderer) { return sprite; } -StdpipOptions* getRenderingOptions() { - auto* options = new StdpipOptions(); +StapipOptions* getRenderingOptions() { + auto* options = new StapipOptions(); auto* ambientColor = new Color(32.0F, 32.0F, 32.0F, 128.0F); auto* directionalColors = new Color[3]; @@ -160,12 +160,12 @@ StdpipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StdpipLightingOptions(); // Memory leak! + auto* lightingOptions = new StapipLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StdpipShadingGouraud; + options->shadingType = Tyra::StapipShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; From ecfaef1b8522f366b56d919aa1de0519bfe3c141 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 19:53:28 +0200 Subject: [PATCH 03/33] mesh -> dynamicmesh --- .../{mesh.hpp => dynamic/dynamic_mesh.hpp} | 28 ++++++------ .../dynamic_mesh_anim_state.hpp} | 2 +- .../dynamic_mesh_frame.hpp} | 10 ++--- .../dynamic_mesh_material.hpp} | 15 ++++--- .../dynamic_mesh_material_frame.hpp} | 11 ++--- .../3d/pipeline/static/static_pipeline.hpp | 31 +++++++------ .../core/texture/texture_repository.hpp | 7 +-- .../{mesh.cpp => dynamic/dynamic_mesh.cpp} | 39 ++++++++-------- .../dynamic_mesh_frame.cpp} | 15 ++++--- .../dynamic_mesh_material.cpp} | 32 ++++++------- .../dynamic_mesh_material_frame.cpp} | 13 +++--- .../3d/pipeline/static/static_pipeline.cpp | 45 ++++++++++--------- .../core/texture/texture_repository.cpp | 2 +- samples/h4570/inc/h4570.hpp | 8 ++-- samples/h4570/src/h4570.cpp | 12 ++--- samples/wellinator/inc/wellinator.hpp | 2 +- samples/wellinator/src/wellinator.cpp | 6 +-- 17 files changed, 148 insertions(+), 130 deletions(-) rename engine/inc/renderer/3d/mesh/{mesh.hpp => dynamic/dynamic_mesh.hpp} (81%) rename engine/inc/renderer/3d/mesh/{mesh_anim_state.hpp => dynamic/dynamic_mesh_anim_state.hpp} (95%) rename engine/inc/renderer/3d/mesh/{mesh_frame.hpp => dynamic/dynamic_mesh_frame.hpp} (86%) rename engine/inc/renderer/3d/mesh/{mesh_material.hpp => dynamic/dynamic_mesh_material.hpp} (77%) rename engine/inc/renderer/3d/mesh/{mesh_material_frame.hpp => dynamic/dynamic_mesh_material_frame.hpp} (64%) rename engine/src/renderer/3d/mesh/{mesh.cpp => dynamic/dynamic_mesh.cpp} (75%) rename engine/src/renderer/3d/mesh/{mesh_frame.cpp => dynamic/dynamic_mesh_frame.cpp} (88%) rename engine/src/renderer/3d/mesh/{mesh_material.cpp => dynamic/dynamic_mesh_material.cpp} (80%) rename engine/src/renderer/3d/mesh/{mesh_material_frame.cpp => dynamic/dynamic_mesh_material_frame.cpp} (70%) diff --git a/engine/inc/renderer/3d/mesh/mesh.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp similarity index 81% rename from engine/inc/renderer/3d/mesh/mesh.hpp rename to engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp index 9b48ee0..d373c2e 100644 --- a/engine/inc/renderer/3d/mesh/mesh.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp @@ -11,17 +11,17 @@ #pragma once #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "./mesh_frame.hpp" -#include "./mesh_material_frame.hpp" -#include "./mesh_anim_state.hpp" +#include "./dynamic_mesh_frame.hpp" +#include "./dynamic_mesh_material_frame.hpp" +#include "./dynamic_mesh_anim_state.hpp" namespace Tyra { -class Mesh { +class DynamicMesh { public: - explicit Mesh(const MeshBuilderData& data); - explicit Mesh(const Mesh& mesh); - ~Mesh(); + explicit DynamicMesh(const MeshBuilderData& data); + explicit DynamicMesh(const DynamicMesh& mesh); + ~DynamicMesh(); /** Translation matrix */ M4x4 translation; @@ -47,17 +47,17 @@ class Mesh { } /** Returns material, which is a mesh "subgroup". */ - MeshMaterial* getMaterial(const u32& i) const { return materials[i]; } + DynamicMeshMaterial* getMaterial(const u32& i) const { return materials[i]; } const u32& getMaterialsCount() const { return materialsCount; } - const MeshAnimState& getAnimState() const { return animState; } + const DynamicMeshAnimState& getAnimState() const { return animState; } /** Count of all vertices. */ u32 getVertexCount() { return frames[0]->getVertexCount(); } /** Returns single frame. */ - MeshFrame* getFrame(const u32& i) const { return frames[i]; } + DynamicMeshFrame* getFrame(const u32& i) const { return frames[i]; } /** Count of frames. Static object (not animated) will have only 1 frame. */ const u32& getFramesCount() const { return framesCount; } @@ -78,7 +78,7 @@ class Mesh { // * Returns material, which is a mesh "subgroup". // * NULL if not found. // */ - // MeshMaterial* getMaterialById(const u32& t_id) const; + // DynamicMeshMaterial* getMaterialById(const u32& t_id) const; /** @returns bounding box object of current frame. */ const BBox& getCurrentBoundingBox() const { @@ -111,11 +111,11 @@ class Mesh { private: void initMesh(); - MeshAnimState animState; + DynamicMeshAnimState animState; u8 _isMother; u32 id, framesCount, materialsCount; - MeshFrame** frames; - MeshMaterial** materials; + DynamicMeshFrame** frames; + DynamicMeshMaterial** materials; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/mesh_anim_state.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_anim_state.hpp similarity index 95% rename from engine/inc/renderer/3d/mesh/mesh_anim_state.hpp rename to engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_anim_state.hpp index 4a02964..25a5e25 100644 --- a/engine/inc/renderer/3d/mesh/mesh_anim_state.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_anim_state.hpp @@ -25,6 +25,6 @@ typedef struct { u32 animType; u32 currentFrame; u32 nextFrame; -} MeshAnimState; +} DynamicMeshAnimState; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/mesh_frame.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp similarity index 86% rename from engine/inc/renderer/3d/mesh/mesh_frame.hpp rename to engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp index 9aa09a4..7be0bf8 100644 --- a/engine/inc/renderer/3d/mesh/mesh_frame.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp @@ -10,17 +10,17 @@ #pragma once -#include "renderer/3d/mesh/mesh_material.hpp" +#include "./dynamic_mesh_material.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" #include "renderer/3d/bbox/bbox.hpp" namespace Tyra { -class MeshFrame { +class DynamicMeshFrame { public: - explicit MeshFrame(const MeshBuilderData& data, const u32& index); - explicit MeshFrame(const MeshFrame& frame); - ~MeshFrame(); + explicit DynamicMeshFrame(const MeshBuilderData& data, const u32& index); + explicit DynamicMeshFrame(const DynamicMeshFrame& frame); + ~DynamicMeshFrame(); const u32& getId() const { return id; } const u32& getVertexCount() const { return vertexCount; } diff --git a/engine/inc/renderer/3d/mesh/mesh_material.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp similarity index 77% rename from engine/inc/renderer/3d/mesh/mesh_material.hpp rename to engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp index af5d83a..12f11d5 100644 --- a/engine/inc/renderer/3d/mesh/mesh_material.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp @@ -12,15 +12,16 @@ #include "debug/debug.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "renderer/3d/mesh/mesh_material_frame.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp" namespace Tyra { -class MeshMaterial { +class DynamicMeshMaterial { public: - explicit MeshMaterial(const MeshBuilderData& data, const u32& materialIndex); - explicit MeshMaterial(const MeshMaterial& material); - ~MeshMaterial(); + explicit DynamicMeshMaterial(const MeshBuilderData& data, + const u32& materialIndex); + explicit DynamicMeshMaterial(const DynamicMeshMaterial& material); + ~DynamicMeshMaterial(); Color singleColor; @@ -34,7 +35,7 @@ class MeshMaterial { u32* getTextureCoordFaces() const { return textureCoordFaces; } u32* getNormalFaces() const { return normalFaces; } u32* getColorFaces() const { return normalFaces; } - MeshMaterialFrame* getFrames() const { return *frames; } + DynamicMeshMaterialFrame* getFrames() const { return *frames; } const BBox& getBBox(const u32& frame) const; @@ -46,7 +47,7 @@ class MeshMaterial { std::string getPrint(const char* name = nullptr) const; private: - MeshMaterialFrame** frames; + DynamicMeshMaterialFrame** frames; std::string _name; u8 _isMother, singleColorFlag; diff --git a/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp similarity index 64% rename from engine/inc/renderer/3d/mesh/mesh_material_frame.hpp rename to engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp index 5cc3922..5427ad4 100644 --- a/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp @@ -14,12 +14,13 @@ namespace Tyra { -class MeshMaterialFrame { +class DynamicMeshMaterialFrame { public: - explicit MeshMaterialFrame(const MeshBuilderData& data, const u32& frameIndex, - const u32& materialIndex); - explicit MeshMaterialFrame(const MeshMaterialFrame& frame); - ~MeshMaterialFrame(); + explicit DynamicMeshMaterialFrame(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex); + explicit DynamicMeshMaterialFrame(const DynamicMeshMaterialFrame& frame); + ~DynamicMeshMaterialFrame(); const u32& getId() const { return id; } const u8& isMother() const { return _isMother; } diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 67681ad..c0e4286 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -14,7 +14,7 @@ #include "../renderer_3d_pipeline.hpp" #include "./stapip_options.hpp" #include "renderer/core/renderer_core.hpp" -#include "renderer/3d/mesh/mesh.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" #include "./core/static_pipeline_core.hpp" namespace Tyra { @@ -32,26 +32,31 @@ class Stapipeline : public Renderer3DPipeline { * Render 3D data via "meshes". * This render() method is a bridge to core.renderer3D.render() method. */ - void render(Mesh* mesh, const StapipOptions* options = nullptr); + void render(DynamicMesh* mesh, const StapipOptions* options = nullptr); private: StapipelineCore core; RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(Mesh* mesh, MeshMaterial* material, StapipBag* bag, - MeshFrame* frameFrom, MeshFrame* frameTo) const; - StapipInfoBag* getInfoBag(Mesh* mesh, const StapipOptions* options, + void addVertices(DynamicMesh* mesh, DynamicMeshMaterial* material, + StapipBag* bag, DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo) const; + StapipInfoBag* getInfoBag(DynamicMesh* mesh, const StapipOptions* options, M4x4* model) const; - StapipColorBag* getColorBag(Mesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo) const; - StapipTextureBag* getTextureBag(Mesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo); - StapipLightingBag* getLightingBag(Mesh* mesh, MeshMaterial* material, - M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, + StapipColorBag* getColorBag(DynamicMesh* mesh, DynamicMeshMaterial* material, + DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo) const; + StapipTextureBag* getTextureBag(DynamicMesh* mesh, + DynamicMeshMaterial* material, + DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo); + StapipLightingBag* getLightingBag(DynamicMesh* mesh, + DynamicMeshMaterial* material, M4x4* model, + DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo, const StapipOptions* options) const; - void deallocDrawBags(StapipBag* bag, MeshMaterial* material) const; + void deallocDrawBags(StapipBag* bag, DynamicMeshMaterial* material) const; void setLightingColorsCache(StapipLightingOptions* lightingOptions); }; diff --git a/engine/inc/renderer/core/texture/texture_repository.hpp b/engine/inc/renderer/core/texture/texture_repository.hpp index 9ff627d..93aa353 100644 --- a/engine/inc/renderer/core/texture/texture_repository.hpp +++ b/engine/inc/renderer/core/texture/texture_repository.hpp @@ -14,7 +14,7 @@ #include #include #include "./models/texture.hpp" -#include "renderer/3d/mesh/mesh.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" #include "loaders/texture/base/texture_loader_selector.hpp" #include @@ -93,12 +93,13 @@ class TextureRepository { /** * Add linked textures in given path for mesh material names. */ - void addByMesh(Mesh* mesh, const char* directory, const char* extension); + void addByMesh(DynamicMesh* mesh, const char* directory, + const char* extension); /** * Add linked textures in given path for mesh material names. */ - inline void addByMesh(Mesh* mesh, const std::string& directory, + inline void addByMesh(DynamicMesh* mesh, const std::string& directory, const char* extension) { addByMesh(mesh, directory.c_str(), extension); } diff --git a/engine/src/renderer/3d/mesh/mesh.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp similarity index 75% rename from engine/src/renderer/3d/mesh/mesh.cpp rename to engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp index 78d30e8..44fa9a7 100644 --- a/engine/src/renderer/3d/mesh/mesh.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp @@ -11,11 +11,11 @@ #include #include "math/m4x4.hpp" -#include "renderer/3d/mesh/mesh.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" namespace Tyra { -Mesh::Mesh(const MeshBuilderData& data) { +DynamicMesh::DynamicMesh(const MeshBuilderData& data) { id = rand() % 1000000; framesCount = data.framesCount; @@ -24,14 +24,14 @@ Mesh::Mesh(const MeshBuilderData& data) { materialsCount = data.materialsCount; TYRA_ASSERT(materialsCount > 0, "Materials count must be greater than 0"); - frames = new MeshFrame*[framesCount]; + frames = new DynamicMeshFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new MeshFrame(data, i); + frames[i] = new DynamicMeshFrame(data, i); } - materials = new MeshMaterial*[materialsCount]; + materials = new DynamicMeshMaterial*[materialsCount]; for (u32 i = 0; i < materialsCount; i++) { - materials[i] = new MeshMaterial(data, i); + materials[i] = new DynamicMeshMaterial(data, i); } translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); @@ -41,20 +41,20 @@ Mesh::Mesh(const MeshBuilderData& data) { _isMother = true; } -Mesh::Mesh(const Mesh& mesh) { +DynamicMesh::DynamicMesh(const DynamicMesh& mesh) { id = rand() % 1000000; framesCount = mesh.framesCount; materialsCount = mesh.materialsCount; - frames = new MeshFrame*[framesCount]; + frames = new DynamicMeshFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new MeshFrame(*mesh.frames[i]); + frames[i] = new DynamicMeshFrame(*mesh.frames[i]); } - materials = new MeshMaterial*[materialsCount]; + materials = new DynamicMeshMaterial*[materialsCount]; for (u32 i = 0; i < materialsCount; i++) { - materials[i] = new MeshMaterial(*mesh.materials[i]); + materials[i] = new DynamicMeshMaterial(*mesh.materials[i]); } translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); @@ -64,7 +64,7 @@ Mesh::Mesh(const Mesh& mesh) { _isMother = false; } -Mesh::~Mesh() { +DynamicMesh::~DynamicMesh() { for (u32 i = 0; i < framesCount; i++) { delete frames[i]; } @@ -77,9 +77,11 @@ Mesh::~Mesh() { } } -M4x4 Mesh::getModelMatrix() const { return translation * rotation * scale; } +M4x4 DynamicMesh::getModelMatrix() const { + return translation * rotation * scale; +} -void Mesh::initMesh() { +void DynamicMesh::initMesh() { animState.startFrame = 0; animState.endFrame = 0; animState.interpolation = 0.0F; @@ -91,7 +93,8 @@ void Mesh::initMesh() { animState.speed = 0.1F; } -void Mesh::playAnimation(const u32& t_startFrame, const u32& t_endFrame) { +void DynamicMesh::playAnimation(const u32& t_startFrame, + const u32& t_endFrame) { TYRA_ASSERT(framesCount > 0, "Cant play animation, because no mesh data was loaded!"); TYRA_ASSERT(framesCount != 1, @@ -107,8 +110,8 @@ void Mesh::playAnimation(const u32& t_startFrame, const u32& t_endFrame) { animState.nextFrame = t_startFrame; } -void Mesh::playAnimation(const u32& t_startFrame, const u32& t_endFrame, - const u32& t_stayFrame) { +void DynamicMesh::playAnimation(const u32& t_startFrame, const u32& t_endFrame, + const u32& t_stayFrame) { TYRA_ASSERT(framesCount > 0, "Cant play animation, because no mesh data was loaded!"); TYRA_ASSERT(framesCount != 1, @@ -123,7 +126,7 @@ void Mesh::playAnimation(const u32& t_startFrame, const u32& t_endFrame, animState.nextFrame = t_startFrame; } -void Mesh::animate() { +void DynamicMesh::animate() { animState.interpolation += animState.speed; if (animState.interpolation >= 1.0F) { animState.interpolation = 0.0F; diff --git a/engine/src/renderer/3d/mesh/mesh_frame.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp similarity index 88% rename from engine/src/renderer/3d/mesh/mesh_frame.cpp rename to engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp index 4e5219b..dcc4f0e 100644 --- a/engine/src/renderer/3d/mesh/mesh_frame.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp @@ -14,11 +14,12 @@ #include #include "math/vec4.hpp" #include "renderer/models/color.hpp" -#include "renderer/3d/mesh/mesh_frame.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp" namespace Tyra { -MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) { +DynamicMeshFrame::DynamicMeshFrame(const MeshBuilderData& data, + const u32& index) { TYRA_ASSERT(index < data.framesCount && index >= 0, "Provided index \"", index, "\" is out of range"); @@ -62,7 +63,7 @@ MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) { _isMother = true; } -MeshFrame::MeshFrame(const MeshFrame& frame) { +DynamicMeshFrame::DynamicMeshFrame(const DynamicMeshFrame& frame) { id = rand() % 1000000; vertices = frame.vertices; @@ -80,7 +81,7 @@ MeshFrame::MeshFrame(const MeshFrame& frame) { _isMother = false; } -MeshFrame::~MeshFrame() { +DynamicMeshFrame::~DynamicMeshFrame() { if (_isMother) { delete[] vertices; if (normals) delete[] normals; @@ -90,17 +91,17 @@ MeshFrame::~MeshFrame() { } } -void MeshFrame::print() const { +void DynamicMeshFrame::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void MeshFrame::print(const char* name) const { +void DynamicMeshFrame::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string MeshFrame::getPrint(const char* name) const { +std::string DynamicMeshFrame::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; diff --git a/engine/src/renderer/3d/mesh/mesh_material.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp similarity index 80% rename from engine/src/renderer/3d/mesh/mesh_material.cpp rename to engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp index d0087df..4809ac1 100644 --- a/engine/src/renderer/3d/mesh/mesh_material.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp @@ -12,12 +12,12 @@ #include #include #include -#include "renderer/3d/mesh/mesh_material.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp" namespace Tyra { -MeshMaterial::MeshMaterial(const MeshBuilderData& data, - const u32& materialIndex) +DynamicMeshMaterial::DynamicMeshMaterial(const MeshBuilderData& data, + const u32& materialIndex) : singleColor(false) { TYRA_ASSERT(materialIndex < data.materialsCount && materialIndex >= 0, "Provided index \"", materialIndex, "\" is out of range"); @@ -57,18 +57,18 @@ MeshMaterial::MeshMaterial(const MeshBuilderData& data, TYRA_ASSERT(facesCount > 0, "Faces count must be greater than 0"); _name = data.materials[materialIndex]->name; - TYRA_ASSERT(_name.length() > 0, "MeshMaterial name cannot be empty"); + TYRA_ASSERT(_name.length() > 0, "DynamicMeshMaterial name cannot be empty"); framesCount = data.framesCount; - frames = new MeshMaterialFrame*[framesCount]; + frames = new DynamicMeshMaterialFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new MeshMaterialFrame(data, i, materialIndex); + frames[i] = new DynamicMeshMaterialFrame(data, i, materialIndex); } _isMother = true; } -MeshMaterial::MeshMaterial(const MeshMaterial& mesh) { +DynamicMeshMaterial::DynamicMeshMaterial(const DynamicMeshMaterial& mesh) { id = rand() % 1000000; vertexFaces = mesh.vertexFaces; @@ -82,15 +82,15 @@ MeshMaterial::MeshMaterial(const MeshMaterial& mesh) { singleColor.set(128.0F, 128.0F, 128.0F, 128.0F); - frames = new MeshMaterialFrame*[framesCount]; + frames = new DynamicMeshMaterialFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new MeshMaterialFrame(*mesh.frames[i]); + frames[i] = new DynamicMeshMaterialFrame(*mesh.frames[i]); } _isMother = false; } -MeshMaterial::~MeshMaterial() { +DynamicMeshMaterial::~DynamicMeshMaterial() { if (_isMother) { delete[] vertexFaces; if (textureCoordFaces) delete[] textureCoordFaces; @@ -104,11 +104,11 @@ MeshMaterial::~MeshMaterial() { delete[] frames; } -const BBox& MeshMaterial::getBBox(const u32& frame) const { +const BBox& DynamicMeshMaterial::getBBox(const u32& frame) const { return frames[frame]->getBBox(); } -void MeshMaterial::setSingleColorFlag(const u8& flag) { +void DynamicMeshMaterial::setSingleColorFlag(const u8& flag) { TYRA_ASSERT( colorFaces != nullptr, "Colors and color faces are required to use color-per-vertex mode"); @@ -116,22 +116,22 @@ void MeshMaterial::setSingleColorFlag(const u8& flag) { singleColorFlag = flag; } -void MeshMaterial::print() const { +void DynamicMeshMaterial::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void MeshMaterial::print(const char* name) const { +void DynamicMeshMaterial::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string MeshMaterial::getPrint(const char* name) const { +std::string DynamicMeshMaterial::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "MeshMaterial("; + res << "DynamicMeshMaterial("; } res << std::endl; diff --git a/engine/src/renderer/3d/mesh/mesh_material_frame.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp similarity index 70% rename from engine/src/renderer/3d/mesh/mesh_material_frame.cpp rename to engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp index f4e8519..a4840e9 100644 --- a/engine/src/renderer/3d/mesh/mesh_material_frame.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp @@ -13,13 +13,13 @@ #include #include "renderer/models/color.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "renderer/3d/mesh/mesh_material_frame.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp" namespace Tyra { -MeshMaterialFrame::MeshMaterialFrame(const MeshBuilderData& data, - const u32& frameIndex, - const u32& materialIndex) { +DynamicMeshMaterialFrame::DynamicMeshMaterialFrame(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { TYRA_ASSERT(frameIndex < data.framesCount && frameIndex >= 0, "Provided index \"", frameIndex, "\" is out of range"); TYRA_ASSERT(materialIndex < data.materialsCount && materialIndex >= 0, @@ -34,7 +34,8 @@ MeshMaterialFrame::MeshMaterialFrame(const MeshBuilderData& data, _isMother = true; } -MeshMaterialFrame::MeshMaterialFrame(const MeshMaterialFrame& frame) { +DynamicMeshMaterialFrame::DynamicMeshMaterialFrame( + const DynamicMeshMaterialFrame& frame) { id = rand() % 1000000; bbox = frame.bbox; @@ -42,7 +43,7 @@ MeshMaterialFrame::MeshMaterialFrame(const MeshMaterialFrame& frame) { _isMother = false; } -MeshMaterialFrame::~MeshMaterialFrame() { +DynamicMeshMaterialFrame::~DynamicMeshMaterialFrame() { if (_isMother) { delete bbox; } diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 26eb90f..8e8c59f 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -23,16 +23,17 @@ void Stapipeline::init(RendererCore* t_core) { void Stapipeline::onUse() { core.reinitStandardVU1Programs(); } -void Stapipeline::render(Mesh* mesh, const StapipOptions* options) { +void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { auto model = mesh->getModelMatrix(); - MeshFrame* frameFrom = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getCurrentAnimationFrame()) - : mesh->getFrame(0); + DynamicMeshFrame* frameFrom = + mesh->getFramesCount() > 0 + ? mesh->getFrame(mesh->getCurrentAnimationFrame()) + : mesh->getFrame(0); - MeshFrame* frameTo = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getNextAnimationFrame()) - : nullptr; + DynamicMeshFrame* frameTo = + mesh->getFramesCount() > 0 ? mesh->getFrame(mesh->getNextAnimationFrame()) + : nullptr; auto* infoBag = getInfoBag(mesh, options, &model); @@ -65,9 +66,9 @@ void Stapipeline::render(Mesh* mesh, const StapipOptions* options) { delete infoBag; } -void Stapipeline::addVertices(Mesh* mesh, MeshMaterial* material, - StapipBag* bag, MeshFrame* frameFrom, - MeshFrame* frameTo) const { +void Stapipeline::addVertices(DynamicMesh* mesh, DynamicMeshMaterial* material, + StapipBag* bag, DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo) const { bag->count = material->getFacesCount(); bag->vertices = new Vec4[bag->count]; @@ -83,7 +84,8 @@ void Stapipeline::addVertices(Mesh* mesh, MeshMaterial* material, } } -StapipInfoBag* Stapipeline::getInfoBag(Mesh* mesh, const StapipOptions* options, +StapipInfoBag* Stapipeline::getInfoBag(DynamicMesh* mesh, + const StapipOptions* options, M4x4* model) const { auto* result = new StapipInfoBag(); @@ -104,9 +106,10 @@ StapipInfoBag* Stapipeline::getInfoBag(Mesh* mesh, const StapipOptions* options, return result; } -StapipColorBag* Stapipeline::getColorBag(Mesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) const { +StapipColorBag* Stapipeline::getColorBag(DynamicMesh* mesh, + DynamicMeshMaterial* material, + DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo) const { auto* result = new StapipColorBag(); if (material->isSingleColorActivated()) { @@ -131,9 +134,10 @@ StapipColorBag* Stapipeline::getColorBag(Mesh* mesh, MeshMaterial* material, return result; } -StapipTextureBag* Stapipeline::getTextureBag(Mesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) { +StapipTextureBag* Stapipeline::getTextureBag(DynamicMesh* mesh, + DynamicMeshMaterial* material, + DynamicMeshFrame* frameFrom, + DynamicMeshFrame* frameTo) { if (!material->getTextureCoordFaces()) return nullptr; auto* result = new StapipTextureBag(); @@ -161,8 +165,9 @@ StapipTextureBag* Stapipeline::getTextureBag(Mesh* mesh, MeshMaterial* material, } StapipLightingBag* Stapipeline::getLightingBag( - Mesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, const StapipOptions* options) const { + DynamicMesh* mesh, DynamicMeshMaterial* material, M4x4* model, + DynamicMeshFrame* frameFrom, DynamicMeshFrame* frameTo, + const StapipOptions* options) const { if (!material->getNormalFaces() || options == nullptr || options->lighting == nullptr) return nullptr; @@ -199,7 +204,7 @@ void Stapipeline::setLightingColorsCache( } void Stapipeline::deallocDrawBags(StapipBag* bag, - MeshMaterial* material) const { + DynamicMeshMaterial* material) const { if (bag->color->many) { delete[] bag->color->many; } diff --git a/engine/src/renderer/core/texture/texture_repository.cpp b/engine/src/renderer/core/texture/texture_repository.cpp index d9a71b9..18b5bfd 100644 --- a/engine/src/renderer/core/texture/texture_repository.cpp +++ b/engine/src/renderer/core/texture/texture_repository.cpp @@ -42,7 +42,7 @@ Texture* TextureRepository::add(const char* fullpath) { return texture; } -void TextureRepository::addByMesh(Mesh* mesh, const char* directory, +void TextureRepository::addByMesh(DynamicMesh* mesh, const char* directory, const char* extension) { auto& loader = texLoaderSelector.getLoaderByExtension(extension); diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index d78df49..e776d72 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -28,10 +28,10 @@ class H4570 : public Game { private: Engine* engine; - Mesh* warrior; - Mesh* warrior2; - Mesh* warrior3; - Mesh* warrior4; + DynamicMesh* warrior; + DynamicMesh* warrior2; + DynamicMesh* warrior3; + DynamicMesh* warrior4; Sprite* picture; audsrv_adpcm_t* adpcmSample; Timer adpcmTimer; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index d63d4fc..9c0dfc6 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -17,7 +17,7 @@ namespace Tyra { H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} -Mesh* getWarrior(Renderer* renderer); +DynamicMesh* getWarrior(Renderer* renderer); StapipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); @@ -38,19 +38,19 @@ void H4570::init() { auto* warriorTex = engine->renderer.core.texture.repository.getBySpriteOrMesh( warrior->getMaterial(0)->getId()); - warrior2 = new Mesh(*warrior); + warrior2 = new DynamicMesh(*warrior); warrior2->translation.translateX(-3.0F); warriorTex->addLink(warrior2->getMaterial(0)->getId()); warrior2->playAnimation(0, warrior2->getFramesCount() - 1); warrior2->setAnimSpeed(0.10F); - warrior3 = new Mesh(*warrior); + warrior3 = new DynamicMesh(*warrior); warrior3->translation.translateX(-6.0F); warriorTex->addLink(warrior3->getMaterial(0)->getId()); warrior3->playAnimation(0, warrior3->getFramesCount() - 1); warrior3->setAnimSpeed(0.7F); - warrior4 = new Mesh(*warrior); + warrior4 = new DynamicMesh(*warrior); warrior4->translation.translateX(3.0F); warriorTex->addLink(warrior4->getMaterial(0)->getId()); warrior4->playAnimation(0, warrior4->getFramesCount() - 1); @@ -151,10 +151,10 @@ void H4570::loop() { engine->renderer.endFrame(); } -Mesh* getWarrior(Renderer* renderer) { +DynamicMesh* getWarrior(Renderer* renderer) { MD2Loader loader; auto* data = loader.load(FileUtils::fromCwd("warrior.md2"), .08F, false); - auto* result = new Mesh(*data); + auto* result = new DynamicMesh(*data); // result->translation.translateZ(-30.0F); delete data; diff --git a/samples/wellinator/inc/wellinator.hpp b/samples/wellinator/inc/wellinator.hpp index db3b3b9..faa0f49 100644 --- a/samples/wellinator/inc/wellinator.hpp +++ b/samples/wellinator/inc/wellinator.hpp @@ -28,7 +28,7 @@ class Wellinator : public Game { private: Engine* engine; - Mesh* warrior; + DynamicMesh* warrior; Sprite* picture; audsrv_adpcm_t* adpcmSample; Timer adpcmTimer; diff --git a/samples/wellinator/src/wellinator.cpp b/samples/wellinator/src/wellinator.cpp index 829fde4..f47ecae 100644 --- a/samples/wellinator/src/wellinator.cpp +++ b/samples/wellinator/src/wellinator.cpp @@ -17,7 +17,7 @@ namespace Tyra { Wellinator::Wellinator(Engine* t_engine) { engine = t_engine; } Wellinator::~Wellinator() {} -Mesh* getWarrior(Renderer* renderer); +DynamicMesh* getWarrior(Renderer* renderer); StapipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); @@ -125,10 +125,10 @@ void Wellinator::loop() { engine->renderer.endFrame(); } -Mesh* getWarrior(Renderer* renderer) { +DynamicMesh* getWarrior(Renderer* renderer) { MD2Loader loader; auto* data = loader.load(FileUtils::fromCwd("warrior.md2"), .08F, false); - auto* result = new Mesh(*data); + auto* result = new DynamicMesh(*data); result->translation.translateZ(-30.0F); delete data; renderer->core.texture.repository.addByMesh(result, FileUtils::getCwd(), From c56c3d76dbac1cefd2b7f3a89f783a5cf9ecc568 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 20:08:57 +0200 Subject: [PATCH 04/33] mesh base --- engine/inc/math/m4x4.hpp | 1 + engine/inc/math/plane.hpp | 2 + engine/inc/math/vec2.hpp | 1 - engine/inc/math/vec4.hpp | 3 -- .../renderer/3d/mesh/dynamic/dynamic_mesh.hpp | 16 ++------ engine/inc/renderer/3d/mesh/mesh.hpp | 38 +++++++++++++++++++ .../pipeline/static/core/stapip_qbuffer.hpp | 1 - .../inc/renderer/core/3d/bbox/core_bbox.hpp | 1 + .../core/3d/renderer_3d_frustum_planes.hpp | 2 +- engine/src/math/m4x4.cpp | 2 +- engine/src/math/plane.cpp | 3 +- engine/src/math/vec2.cpp | 1 + engine/src/math/vec4.cpp | 3 ++ .../renderer/3d/mesh/dynamic/dynamic_mesh.cpp | 4 -- .../3d/mesh/dynamic/dynamic_mesh_frame.cpp | 1 + .../3d/mesh/dynamic/dynamic_mesh_material.cpp | 1 + engine/src/renderer/3d/mesh/mesh.cpp | 20 ++++++++++ .../core/bag/packaging/stapip_bag_package.cpp | 1 + .../packaging/stapip_bag_packages_bbox.cpp | 1 + .../pipeline/static/core/bag/stapip_bag.cpp | 3 +- .../pipeline/static/core/stapip_qbuffer.cpp | 2 + .../src/renderer/core/3d/bbox/core_bbox.cpp | 1 + .../core/3d/renderer_3d_frustum_planes.cpp | 3 +- engine/src/renderer/models/color.cpp | 2 + 24 files changed, 86 insertions(+), 27 deletions(-) create mode 100644 engine/inc/renderer/3d/mesh/mesh.hpp create mode 100644 engine/src/renderer/3d/mesh/mesh.cpp diff --git a/engine/inc/math/m4x4.hpp b/engine/inc/math/m4x4.hpp index efb9a74..994e627 100644 --- a/engine/inc/math/m4x4.hpp +++ b/engine/inc/math/m4x4.hpp @@ -12,6 +12,7 @@ #include "math/vec4.hpp" #include "math/math.hpp" +#include namespace Tyra { diff --git a/engine/inc/math/plane.hpp b/engine/inc/math/plane.hpp index a9c802d..68a57c3 100644 --- a/engine/inc/math/plane.hpp +++ b/engine/inc/math/plane.hpp @@ -10,6 +10,8 @@ #pragma once +#include "./vec4.hpp" +#include namespace Tyra { diff --git a/engine/inc/math/vec2.hpp b/engine/inc/math/vec2.hpp index 9f479ae..bace816 100644 --- a/engine/inc/math/vec2.hpp +++ b/engine/inc/math/vec2.hpp @@ -15,7 +15,6 @@ extern "C" { #include } -#include #include #include "math/math.hpp" diff --git a/engine/inc/math/vec4.hpp b/engine/inc/math/vec4.hpp index 35c1df6..673d280 100644 --- a/engine/inc/math/vec4.hpp +++ b/engine/inc/math/vec4.hpp @@ -16,9 +16,6 @@ extern "C" { } #include -#include -#include -#include #include #include "math/math.hpp" diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp index d373c2e..e0a1f3a 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp @@ -14,26 +14,16 @@ #include "./dynamic_mesh_frame.hpp" #include "./dynamic_mesh_material_frame.hpp" #include "./dynamic_mesh_anim_state.hpp" +#include "../mesh.hpp" namespace Tyra { -class DynamicMesh { +class DynamicMesh : public Mesh { public: explicit DynamicMesh(const MeshBuilderData& data); explicit DynamicMesh(const DynamicMesh& mesh); ~DynamicMesh(); - /** Translation matrix */ - M4x4 translation; - - /** Rotation matrix */ - M4x4 rotation; - - /** Scale matrix */ - M4x4 scale; - - const u32& getId() const { return id; } - const u8& isMother() const { return _isMother; } /** Get position from translation matrix */ @@ -113,7 +103,7 @@ class DynamicMesh { void initMesh(); DynamicMeshAnimState animState; u8 _isMother; - u32 id, framesCount, materialsCount; + u32 framesCount, materialsCount; DynamicMeshFrame** frames; DynamicMeshMaterial** materials; }; diff --git a/engine/inc/renderer/3d/mesh/mesh.hpp b/engine/inc/renderer/3d/mesh/mesh.hpp new file mode 100644 index 0000000..5d3834e --- /dev/null +++ b/engine/inc/renderer/3d/mesh/mesh.hpp @@ -0,0 +1,38 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "math/m4x4.hpp" +#include + +namespace Tyra { + +class Mesh { + public: + explicit Mesh(); + ~Mesh(); + + /** Translation matrix */ + M4x4 translation; + + /** Rotation matrix */ + M4x4 rotation; + + /** Scale matrix */ + M4x4 scale; + + const u32& getId() const { return id; } + + protected: + u32 id; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp index 30b01f1..e1a7e16 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp @@ -12,7 +12,6 @@ #include #include -#include #include "debug/debug.hpp" #include "./bag/packaging/stapip_bag_package.hpp" #include "./bag/stapip_bag.hpp" diff --git a/engine/inc/renderer/core/3d/bbox/core_bbox.hpp b/engine/inc/renderer/core/3d/bbox/core_bbox.hpp index 7e0c4b1..f1e5d23 100644 --- a/engine/inc/renderer/core/3d/bbox/core_bbox.hpp +++ b/engine/inc/renderer/core/3d/bbox/core_bbox.hpp @@ -11,6 +11,7 @@ #pragma once #include +#include #include "./core_bbox_frustum.hpp" #include "math/m4x4.hpp" #include "math/plane.hpp" diff --git a/engine/inc/renderer/core/3d/renderer_3d_frustum_planes.hpp b/engine/inc/renderer/core/3d/renderer_3d_frustum_planes.hpp index 3b4ab6d..94ee7b8 100644 --- a/engine/inc/renderer/core/3d/renderer_3d_frustum_planes.hpp +++ b/engine/inc/renderer/core/3d/renderer_3d_frustum_planes.hpp @@ -10,7 +10,7 @@ #pragma once -#include +#include #include "renderer/renderer_settings.hpp" #include "./camera_info_3d.hpp" #include "math/plane.hpp" diff --git a/engine/src/math/m4x4.cpp b/engine/src/math/m4x4.cpp index bf61b01..d87910e 100644 --- a/engine/src/math/m4x4.cpp +++ b/engine/src/math/m4x4.cpp @@ -9,7 +9,7 @@ */ #include -#include +#include #include #include "math/m4x4.hpp" diff --git a/engine/src/math/plane.cpp b/engine/src/math/plane.cpp index d0b97d8..696d813 100644 --- a/engine/src/math/plane.cpp +++ b/engine/src/math/plane.cpp @@ -8,8 +8,9 @@ # Sandro Sobczyński */ -#include #include "math/vec4.hpp" +#include +#include #include "math/plane.hpp" namespace Tyra { diff --git a/engine/src/math/vec2.cpp b/engine/src/math/vec2.cpp index 68613dc..808180d 100644 --- a/engine/src/math/vec2.cpp +++ b/engine/src/math/vec2.cpp @@ -9,6 +9,7 @@ */ #include "math/vec2.hpp" +#include namespace Tyra { diff --git a/engine/src/math/vec4.cpp b/engine/src/math/vec4.cpp index d53320a..8d7d9ef 100644 --- a/engine/src/math/vec4.cpp +++ b/engine/src/math/vec4.cpp @@ -9,6 +9,9 @@ */ #include "math/vec4.hpp" +#include +#include +#include namespace Tyra { diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp index 44fa9a7..e14c030 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp @@ -16,8 +16,6 @@ namespace Tyra { DynamicMesh::DynamicMesh(const MeshBuilderData& data) { - id = rand() % 1000000; - framesCount = data.framesCount; TYRA_ASSERT(framesCount > 0, "Frames count must be greater than 0"); @@ -42,8 +40,6 @@ DynamicMesh::DynamicMesh(const MeshBuilderData& data) { } DynamicMesh::DynamicMesh(const DynamicMesh& mesh) { - id = rand() % 1000000; - framesCount = mesh.framesCount; materialsCount = mesh.materialsCount; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp index dcc4f0e..b0286d3 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp @@ -11,6 +11,7 @@ #include "debug/debug.hpp" #include +#include #include #include "math/vec4.hpp" #include "renderer/models/color.hpp" diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp index 4809ac1..e8bec87 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include "renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/mesh/mesh.cpp b/engine/src/renderer/3d/mesh/mesh.cpp new file mode 100644 index 0000000..395622f --- /dev/null +++ b/engine/src/renderer/3d/mesh/mesh.cpp @@ -0,0 +1,20 @@ + +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/mesh/mesh.hpp" + +namespace Tyra { + +Mesh::Mesh() { id = rand() % 1000000; } + +Mesh::~Mesh() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp index 0d5ebb2..3c9e834 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp index 3629d7a..ec269c4 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp" diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp index 24230a0..051caf0 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp @@ -8,8 +8,9 @@ # Sandro Sobczyński */ -#include #include "renderer/3d/pipeline/static/core/bag/stapip_bag.hpp" +#include +#include namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp index 89740ff..a40a9cf 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp @@ -9,6 +9,8 @@ */ #include "renderer/3d/pipeline/static/core/stapip_qbuffer.hpp" +#include +#include namespace Tyra { diff --git a/engine/src/renderer/core/3d/bbox/core_bbox.cpp b/engine/src/renderer/core/3d/bbox/core_bbox.cpp index 7341784..35537ab 100644 --- a/engine/src/renderer/core/3d/bbox/core_bbox.cpp +++ b/engine/src/renderer/core/3d/bbox/core_bbox.cpp @@ -10,6 +10,7 @@ #include #include +#include #include "renderer/core/3d/bbox/core_bbox.hpp" namespace Tyra { diff --git a/engine/src/renderer/core/3d/renderer_3d_frustum_planes.cpp b/engine/src/renderer/core/3d/renderer_3d_frustum_planes.cpp index cb6185f..a539dc8 100644 --- a/engine/src/renderer/core/3d/renderer_3d_frustum_planes.cpp +++ b/engine/src/renderer/core/3d/renderer_3d_frustum_planes.cpp @@ -8,8 +8,9 @@ # Sandro Sobczyński */ -#include #include "debug/debug.hpp" +#include +#include #include "renderer/core/3d/renderer_3d_frustum_planes.hpp" namespace Tyra { diff --git a/engine/src/renderer/models/color.cpp b/engine/src/renderer/models/color.cpp index a48ab4d..2eccaeb 100644 --- a/engine/src/renderer/models/color.cpp +++ b/engine/src/renderer/models/color.cpp @@ -9,6 +9,8 @@ */ #include "renderer/models/color.hpp" +#include +#include namespace Tyra { From f249936981d9fc45a5b6eea1f5099325e4447e5d Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 20:32:30 +0200 Subject: [PATCH 05/33] dynamic mesh functions --- .../renderer/3d/mesh/dynamic/dynamic_mesh.hpp | 32 ++++--------------- engine/inc/renderer/3d/mesh/mesh.hpp | 17 ++++++++-- .../renderer/3d/mesh/dynamic/dynamic_mesh.cpp | 16 ++-------- engine/src/renderer/3d/mesh/mesh.cpp | 8 ++++- 4 files changed, 30 insertions(+), 43 deletions(-) diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp index e0a1f3a..90a0a53 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp @@ -24,30 +24,22 @@ class DynamicMesh : public Mesh { explicit DynamicMesh(const DynamicMesh& mesh); ~DynamicMesh(); - const u8& isMother() const { return _isMother; } - - /** Get position from translation matrix */ - Vec4* getPosition() { - return reinterpret_cast(&translation.data[3 * 4]); - } - - void setPosition(const Vec4& v) { - TYRA_ASSERT(v.w == 1.0F, "Vec4 must be homogeneous"); - reinterpret_cast(&translation.data[3 * 4])->set(v); - } - /** Returns material, which is a mesh "subgroup". */ DynamicMeshMaterial* getMaterial(const u32& i) const { return materials[i]; } + DynamicMeshMaterial** getMaterials() { return materials; } + const u32& getMaterialsCount() const { return materialsCount; } const DynamicMeshAnimState& getAnimState() const { return animState; } /** Count of all vertices. */ - u32 getVertexCount() { return frames[0]->getVertexCount(); } + inline u32 getVertexCount() { return frames[0]->getVertexCount(); } /** Returns single frame. */ - DynamicMeshFrame* getFrame(const u32& i) const { return frames[i]; } + DynamicMeshFrame* getFrame(const u32& i) { return frames[i]; } + + DynamicMeshFrame** getFrames() { return frames; } /** Count of frames. Static object (not animated) will have only 1 frame. */ const u32& getFramesCount() const { return framesCount; } @@ -62,22 +54,11 @@ class DynamicMesh : public Mesh { const u32& getStayAnimationFrame() const { return animState.stayFrame; } - M4x4 getModelMatrix() const; - - // /** - // * Returns material, which is a mesh "subgroup". - // * NULL if not found. - // */ - // DynamicMeshMaterial* getMaterialById(const u32& t_id) const; - /** @returns bounding box object of current frame. */ const BBox& getCurrentBoundingBox() const { return frames[animState.currentFrame]->getBBox(); } - /** Check if are there any frames */ - u8 isDataLoaded() const { return framesCount > 0; } - /** Loop in one frame */ void playAnimation(const u32& t_frame) { playAnimation(t_frame, t_frame); } @@ -102,7 +83,6 @@ class DynamicMesh : public Mesh { private: void initMesh(); DynamicMeshAnimState animState; - u8 _isMother; u32 framesCount, materialsCount; DynamicMeshFrame** frames; DynamicMeshMaterial** materials; diff --git a/engine/inc/renderer/3d/mesh/mesh.hpp b/engine/inc/renderer/3d/mesh/mesh.hpp index 5d3834e..d68ce9b 100644 --- a/engine/inc/renderer/3d/mesh/mesh.hpp +++ b/engine/inc/renderer/3d/mesh/mesh.hpp @@ -17,7 +17,7 @@ namespace Tyra { class Mesh { public: - explicit Mesh(); + Mesh(const u8& isMother); ~Mesh(); /** Translation matrix */ @@ -29,9 +29,22 @@ class Mesh { /** Scale matrix */ M4x4 scale; - const u32& getId() const { return id; } + inline const u32& getId() const { return id; } + inline const u8& isMother() const { return _isMother; } + M4x4 getModelMatrix() const; + + /** Get position from translation matrix */ + inline Vec4* getPosition() { + return reinterpret_cast(&translation.data[3 * 4]); + } + + inline void setPosition(const Vec4& v) { + TYRA_ASSERT(v.w == 1.0F, "Vec4 must be homogeneous"); + reinterpret_cast(&translation.data[3 * 4])->set(v); + } protected: + u8 _isMother; u32 id; }; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp index e14c030..c467a88 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp @@ -15,7 +15,7 @@ namespace Tyra { -DynamicMesh::DynamicMesh(const MeshBuilderData& data) { +DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(true) { framesCount = data.framesCount; TYRA_ASSERT(framesCount > 0, "Frames count must be greater than 0"); @@ -32,14 +32,10 @@ DynamicMesh::DynamicMesh(const MeshBuilderData& data) { materials[i] = new DynamicMeshMaterial(data, i); } - translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); - initMesh(); - - _isMother = true; } -DynamicMesh::DynamicMesh(const DynamicMesh& mesh) { +DynamicMesh::DynamicMesh(const DynamicMesh& mesh) : Mesh(false) { framesCount = mesh.framesCount; materialsCount = mesh.materialsCount; @@ -53,11 +49,7 @@ DynamicMesh::DynamicMesh(const DynamicMesh& mesh) { materials[i] = new DynamicMeshMaterial(*mesh.materials[i]); } - translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); - initMesh(); - - _isMother = false; } DynamicMesh::~DynamicMesh() { @@ -73,10 +65,6 @@ DynamicMesh::~DynamicMesh() { } } -M4x4 DynamicMesh::getModelMatrix() const { - return translation * rotation * scale; -} - void DynamicMesh::initMesh() { animState.startFrame = 0; animState.endFrame = 0; diff --git a/engine/src/renderer/3d/mesh/mesh.cpp b/engine/src/renderer/3d/mesh/mesh.cpp index 395622f..4b90116 100644 --- a/engine/src/renderer/3d/mesh/mesh.cpp +++ b/engine/src/renderer/3d/mesh/mesh.cpp @@ -13,7 +13,13 @@ namespace Tyra { -Mesh::Mesh() { id = rand() % 1000000; } +Mesh::Mesh(const u8& isMother) { + id = rand() % 1000000; + _isMother = isMother; + translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); +} + +M4x4 Mesh::getModelMatrix() const { return translation * rotation * scale; } Mesh::~Mesh() {} From 34c553af0469212cd4efd0aac59e5d38f4cff755 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 21:42:11 +0200 Subject: [PATCH 06/33] static mesh finish --- ROADMAP.txt | 1 - .../renderer/3d/mesh/dynamic/dynamic_mesh.hpp | 25 +++------- engine/inc/renderer/3d/mesh/mesh.hpp | 21 +++++--- .../dynamic_mesh_frame.hpp => mesh_frame.hpp} | 10 ++-- ...ic_mesh_material.hpp => mesh_material.hpp} | 17 +++---- ...rial_frame.hpp => mesh_material_frame.hpp} | 12 ++--- .../renderer/3d/mesh/static/static_mesh.hpp | 34 +++++++++++++ .../3d/pipeline/static/static_pipeline.hpp | 25 ++++------ .../renderer/3d/mesh/dynamic/dynamic_mesh.cpp | 41 +++++----------- engine/src/renderer/3d/mesh/mesh.cpp | 49 +++++++++++++++++-- .../dynamic_mesh_frame.cpp => mesh_frame.cpp} | 15 +++--- ...ic_mesh_material.cpp => mesh_material.cpp} | 32 ++++++------ ...rial_frame.cpp => mesh_material_frame.cpp} | 13 +++-- .../renderer/3d/mesh/static/static_mesh.cpp | 27 ++++++++++ .../3d/pipeline/static/static_pipeline.cpp | 37 +++++++------- 15 files changed, 213 insertions(+), 146 deletions(-) rename engine/inc/renderer/3d/mesh/{dynamic/dynamic_mesh_frame.hpp => mesh_frame.hpp} (86%) rename engine/inc/renderer/3d/mesh/{dynamic/dynamic_mesh_material.hpp => mesh_material.hpp} (77%) rename engine/inc/renderer/3d/mesh/{dynamic/dynamic_mesh_material_frame.hpp => mesh_material_frame.hpp} (64%) create mode 100644 engine/inc/renderer/3d/mesh/static/static_mesh.hpp rename engine/src/renderer/3d/mesh/{dynamic/dynamic_mesh_frame.cpp => mesh_frame.cpp} (89%) rename engine/src/renderer/3d/mesh/{dynamic/dynamic_mesh_material.cpp => mesh_material.cpp} (80%) rename engine/src/renderer/3d/mesh/{dynamic/dynamic_mesh_material_frame.cpp => mesh_material_frame.cpp} (70%) create mode 100644 engine/src/renderer/3d/mesh/static/static_mesh.cpp diff --git a/ROADMAP.txt b/ROADMAP.txt index 62ff70f..192e2e4 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,7 +1,6 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [Renderer] Mesh, StaticMesh, AnimMesh - [Renderer] dynamicRenderer, dbufferring during mesh unrolling, simple clip - [Renderer] staticRenderer -> remove animation, dbufferring during mesh unrolling, full plane clip - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp index 90a0a53..42fb100 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp @@ -11,8 +11,8 @@ #pragma once #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "./dynamic_mesh_frame.hpp" -#include "./dynamic_mesh_material_frame.hpp" +#include "../mesh_frame.hpp" +#include "../mesh_material_frame.hpp" #include "./dynamic_mesh_anim_state.hpp" #include "../mesh.hpp" @@ -24,22 +24,12 @@ class DynamicMesh : public Mesh { explicit DynamicMesh(const DynamicMesh& mesh); ~DynamicMesh(); - /** Returns material, which is a mesh "subgroup". */ - DynamicMeshMaterial* getMaterial(const u32& i) const { return materials[i]; } - - DynamicMeshMaterial** getMaterials() { return materials; } - - const u32& getMaterialsCount() const { return materialsCount; } - const DynamicMeshAnimState& getAnimState() const { return animState; } - /** Count of all vertices. */ - inline u32 getVertexCount() { return frames[0]->getVertexCount(); } - /** Returns single frame. */ - DynamicMeshFrame* getFrame(const u32& i) { return frames[i]; } + MeshFrame* getFrame(const u32& i) { return frames[i]; } - DynamicMeshFrame** getFrames() { return frames; } + MeshFrame** getFrames() { return frames; } /** Count of frames. Static object (not animated) will have only 1 frame. */ const u32& getFramesCount() const { return framesCount; } @@ -81,11 +71,10 @@ class DynamicMesh : public Mesh { const u8& isStayAnimationSet() const { return animState.isStayFrameSet; } private: - void initMesh(); + void initAnimation(); DynamicMeshAnimState animState; - u32 framesCount, materialsCount; - DynamicMeshFrame** frames; - DynamicMeshMaterial** materials; + u32 framesCount; + MeshFrame** frames; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/mesh.hpp b/engine/inc/renderer/3d/mesh/mesh.hpp index d68ce9b..d90ace5 100644 --- a/engine/inc/renderer/3d/mesh/mesh.hpp +++ b/engine/inc/renderer/3d/mesh/mesh.hpp @@ -11,13 +11,16 @@ #pragma once #include "math/m4x4.hpp" +#include "./mesh_material.hpp" #include +#include "debug/debug.hpp" namespace Tyra { class Mesh { public: - Mesh(const u8& isMother); + explicit Mesh(const MeshBuilderData& data); + explicit Mesh(const Mesh& mesh); ~Mesh(); /** Translation matrix */ @@ -38,14 +41,20 @@ class Mesh { return reinterpret_cast(&translation.data[3 * 4]); } - inline void setPosition(const Vec4& v) { - TYRA_ASSERT(v.w == 1.0F, "Vec4 must be homogeneous"); - reinterpret_cast(&translation.data[3 * 4])->set(v); - } + void setPosition(const Vec4& v); + + /** Returns material, which is a mesh "subgroup". */ + MeshMaterial* getMaterial(const u32& i) const { return materials[i]; } + + MeshMaterial** getMaterials() { return materials; } + + const u32& getMaterialsCount() const { return materialsCount; } protected: + void init(); u8 _isMother; - u32 id; + u32 id, materialsCount; + MeshMaterial** materials; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp b/engine/inc/renderer/3d/mesh/mesh_frame.hpp similarity index 86% rename from engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp rename to engine/inc/renderer/3d/mesh/mesh_frame.hpp index 7be0bf8..1acdb57 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_frame.hpp @@ -10,17 +10,17 @@ #pragma once -#include "./dynamic_mesh_material.hpp" +#include "./mesh_material.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" #include "renderer/3d/bbox/bbox.hpp" namespace Tyra { -class DynamicMeshFrame { +class MeshFrame { public: - explicit DynamicMeshFrame(const MeshBuilderData& data, const u32& index); - explicit DynamicMeshFrame(const DynamicMeshFrame& frame); - ~DynamicMeshFrame(); + explicit MeshFrame(const MeshBuilderData& data, const u32& index); + explicit MeshFrame(const MeshFrame& frame); + ~MeshFrame(); const u32& getId() const { return id; } const u32& getVertexCount() const { return vertexCount; } diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp b/engine/inc/renderer/3d/mesh/mesh_material.hpp similarity index 77% rename from engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp rename to engine/inc/renderer/3d/mesh/mesh_material.hpp index 12f11d5..1a7253f 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_material.hpp @@ -12,16 +12,15 @@ #include "debug/debug.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp" +#include "./mesh_material_frame.hpp" namespace Tyra { -class DynamicMeshMaterial { +class MeshMaterial { public: - explicit DynamicMeshMaterial(const MeshBuilderData& data, - const u32& materialIndex); - explicit DynamicMeshMaterial(const DynamicMeshMaterial& material); - ~DynamicMeshMaterial(); + explicit MeshMaterial(const MeshBuilderData& data, const u32& materialIndex); + explicit MeshMaterial(const MeshMaterial& material); + ~MeshMaterial(); Color singleColor; @@ -30,15 +29,13 @@ class DynamicMeshMaterial { const u32& getFacesCount() const { return facesCount; } const u8& isMother() const { return _isMother; } const u8& isSingleColorActivated() const { return singleColorFlag; } - u32* getVertexFaces() const { return vertexFaces; } u32* getTextureCoordFaces() const { return textureCoordFaces; } u32* getNormalFaces() const { return normalFaces; } u32* getColorFaces() const { return normalFaces; } - DynamicMeshMaterialFrame* getFrames() const { return *frames; } + MeshMaterialFrame* getFrames() const { return *frames; } const BBox& getBBox(const u32& frame) const; - void setSingleColorFlag(const u8& flag); void print() const; @@ -47,7 +44,7 @@ class DynamicMeshMaterial { std::string getPrint(const char* name = nullptr) const; private: - DynamicMeshMaterialFrame** frames; + MeshMaterialFrame** frames; std::string _name; u8 _isMother, singleColorFlag; diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp b/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp similarity index 64% rename from engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp rename to engine/inc/renderer/3d/mesh/mesh_material_frame.hpp index 5427ad4..d2fa17c 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp @@ -10,17 +10,17 @@ #pragma once +#include "loaders/3d/builder/mesh_builder_data.hpp" #include "./renderer/3d/bbox/bbox.hpp" namespace Tyra { -class DynamicMeshMaterialFrame { +class MeshMaterialFrame { public: - explicit DynamicMeshMaterialFrame(const MeshBuilderData& data, - const u32& frameIndex, - const u32& materialIndex); - explicit DynamicMeshMaterialFrame(const DynamicMeshMaterialFrame& frame); - ~DynamicMeshMaterialFrame(); + explicit MeshMaterialFrame(const MeshBuilderData& data, const u32& frameIndex, + const u32& materialIndex); + explicit MeshMaterialFrame(const MeshMaterialFrame& frame); + ~MeshMaterialFrame(); const u32& getId() const { return id; } const u8& isMother() const { return _isMother; } diff --git a/engine/inc/renderer/3d/mesh/static/static_mesh.hpp b/engine/inc/renderer/3d/mesh/static/static_mesh.hpp new file mode 100644 index 0000000..3b5275d --- /dev/null +++ b/engine/inc/renderer/3d/mesh/static/static_mesh.hpp @@ -0,0 +1,34 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "../mesh.hpp" +#include "../mesh_frame.hpp" +#include "../mesh_material.hpp" + +namespace Tyra { + +class StaticMesh : public Mesh { + public: + StaticMesh(const MeshBuilderData& data); + StaticMesh(const StaticMesh& mesh); + ~StaticMesh(); + + MeshFrame* getFrame() { return frame; } + + /** @returns bounding box object of current frame. */ + const BBox& getBoundingBox() const { return frame->getBBox(); } + + private: + MeshFrame* frame; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index c0e4286..070e3a6 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -39,24 +39,19 @@ class Stapipeline : public Renderer3DPipeline { RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(DynamicMesh* mesh, DynamicMeshMaterial* material, - StapipBag* bag, DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo) const; + void addVertices(DynamicMesh* mesh, MeshMaterial* material, StapipBag* bag, + MeshFrame* frameFrom, MeshFrame* frameTo) const; StapipInfoBag* getInfoBag(DynamicMesh* mesh, const StapipOptions* options, M4x4* model) const; - StapipColorBag* getColorBag(DynamicMesh* mesh, DynamicMeshMaterial* material, - DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo) const; - StapipTextureBag* getTextureBag(DynamicMesh* mesh, - DynamicMeshMaterial* material, - DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo); - StapipLightingBag* getLightingBag(DynamicMesh* mesh, - DynamicMeshMaterial* material, M4x4* model, - DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo, + StapipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, + MeshFrame* frameFrom, MeshFrame* frameTo) const; + StapipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, + MeshFrame* frameFrom, MeshFrame* frameTo); + StapipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, + M4x4* model, MeshFrame* frameFrom, + MeshFrame* frameTo, const StapipOptions* options) const; - void deallocDrawBags(StapipBag* bag, DynamicMeshMaterial* material) const; + void deallocDrawBags(StapipBag* bag, MeshMaterial* material) const; void setLightingColorsCache(StapipLightingOptions* lightingOptions); }; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp index c467a88..0df1454 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp +++ b/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh.cpp @@ -15,41 +15,28 @@ namespace Tyra { -DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(true) { +DynamicMesh::DynamicMesh(const MeshBuilderData& data) : Mesh(data) { + TYRA_ASSERT(framesCount > 1, "Frames count must be greater than 1"); + framesCount = data.framesCount; - TYRA_ASSERT(framesCount > 0, "Frames count must be greater than 0"); - materialsCount = data.materialsCount; - TYRA_ASSERT(materialsCount > 0, "Materials count must be greater than 0"); - - frames = new DynamicMeshFrame*[framesCount]; + frames = new MeshFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new DynamicMeshFrame(data, i); + frames[i] = new MeshFrame(data, i); } - materials = new DynamicMeshMaterial*[materialsCount]; - for (u32 i = 0; i < materialsCount; i++) { - materials[i] = new DynamicMeshMaterial(data, i); - } - - initMesh(); + initAnimation(); } -DynamicMesh::DynamicMesh(const DynamicMesh& mesh) : Mesh(false) { +DynamicMesh::DynamicMesh(const DynamicMesh& mesh) : Mesh(mesh) { framesCount = mesh.framesCount; - materialsCount = mesh.materialsCount; - frames = new DynamicMeshFrame*[framesCount]; + frames = new MeshFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new DynamicMeshFrame(*mesh.frames[i]); + frames[i] = new MeshFrame(*mesh.frames[i]); } - materials = new DynamicMeshMaterial*[materialsCount]; - for (u32 i = 0; i < materialsCount; i++) { - materials[i] = new DynamicMeshMaterial(*mesh.materials[i]); - } - - initMesh(); + initAnimation(); } DynamicMesh::~DynamicMesh() { @@ -57,15 +44,9 @@ DynamicMesh::~DynamicMesh() { delete frames[i]; } delete[] frames; - - for (u32 i = 0; i < materialsCount; i++) { - delete materials[i]; - - delete[] materials; - } } -void DynamicMesh::initMesh() { +void DynamicMesh::initAnimation() { animState.startFrame = 0; animState.endFrame = 0; animState.interpolation = 0.0F; diff --git a/engine/src/renderer/3d/mesh/mesh.cpp b/engine/src/renderer/3d/mesh/mesh.cpp index 4b90116..942b425 100644 --- a/engine/src/renderer/3d/mesh/mesh.cpp +++ b/engine/src/renderer/3d/mesh/mesh.cpp @@ -13,14 +13,53 @@ namespace Tyra { -Mesh::Mesh(const u8& isMother) { - id = rand() % 1000000; - _isMother = isMother; - translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); +Mesh::Mesh(const MeshBuilderData& data) { + init(); + + TYRA_ASSERT(data.materialsCount > 0, + "Materials count must be greater than 0"); + + materialsCount = data.materialsCount; + materials = new MeshMaterial*[materialsCount]; + + for (u32 i = 0; i < materialsCount; i++) { + materials[i] = new MeshMaterial(data, i); + } + + _isMother = true; +} + +Mesh::Mesh(const Mesh& mesh) { + init(); + + materialsCount = mesh.materialsCount; + materials = new MeshMaterial*[materialsCount]; + + for (u32 i = 0; i < materialsCount; i++) { + materials[i] = new MeshMaterial(*mesh.materials[i]); + } + + _isMother = false; } M4x4 Mesh::getModelMatrix() const { return translation * rotation * scale; } -Mesh::~Mesh() {} +Mesh::~Mesh() { + for (u32 i = 0; i < materialsCount; i++) { + delete materials[i]; + } + delete[] materials; +} + +void Mesh::init() { + id = rand() % 1000000; + materialsCount = 0; + translation.translate(Vec4(0.0F, 0.0F, 0.0F, 1.0F)); +} + +void Mesh::setPosition(const Vec4& v) { + TYRA_ASSERT(v.w == 1.0F, "Vec4 must be homogeneous"); + reinterpret_cast(&translation.data[3 * 4])->set(v); +} } // namespace Tyra diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp b/engine/src/renderer/3d/mesh/mesh_frame.cpp similarity index 89% rename from engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp rename to engine/src/renderer/3d/mesh/mesh_frame.cpp index b0286d3..0d47b2e 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_frame.cpp +++ b/engine/src/renderer/3d/mesh/mesh_frame.cpp @@ -15,12 +15,11 @@ #include #include "math/vec4.hpp" #include "renderer/models/color.hpp" -#include "renderer/3d/mesh/dynamic/dynamic_mesh_frame.hpp" +#include "renderer/3d/mesh/mesh_frame.hpp" namespace Tyra { -DynamicMeshFrame::DynamicMeshFrame(const MeshBuilderData& data, - const u32& index) { +MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) { TYRA_ASSERT(index < data.framesCount && index >= 0, "Provided index \"", index, "\" is out of range"); @@ -64,7 +63,7 @@ DynamicMeshFrame::DynamicMeshFrame(const MeshBuilderData& data, _isMother = true; } -DynamicMeshFrame::DynamicMeshFrame(const DynamicMeshFrame& frame) { +MeshFrame::MeshFrame(const MeshFrame& frame) { id = rand() % 1000000; vertices = frame.vertices; @@ -82,7 +81,7 @@ DynamicMeshFrame::DynamicMeshFrame(const DynamicMeshFrame& frame) { _isMother = false; } -DynamicMeshFrame::~DynamicMeshFrame() { +MeshFrame::~MeshFrame() { if (_isMother) { delete[] vertices; if (normals) delete[] normals; @@ -92,17 +91,17 @@ DynamicMeshFrame::~DynamicMeshFrame() { } } -void DynamicMeshFrame::print() const { +void MeshFrame::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void DynamicMeshFrame::print(const char* name) const { +void MeshFrame::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string DynamicMeshFrame::getPrint(const char* name) const { +std::string MeshFrame::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp b/engine/src/renderer/3d/mesh/mesh_material.cpp similarity index 80% rename from engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp rename to engine/src/renderer/3d/mesh/mesh_material.cpp index e8bec87..e791505 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material.cpp +++ b/engine/src/renderer/3d/mesh/mesh_material.cpp @@ -13,12 +13,12 @@ #include #include #include -#include "renderer/3d/mesh/dynamic/dynamic_mesh_material.hpp" +#include "renderer/3d/mesh/mesh_material.hpp" namespace Tyra { -DynamicMeshMaterial::DynamicMeshMaterial(const MeshBuilderData& data, - const u32& materialIndex) +MeshMaterial::MeshMaterial(const MeshBuilderData& data, + const u32& materialIndex) : singleColor(false) { TYRA_ASSERT(materialIndex < data.materialsCount && materialIndex >= 0, "Provided index \"", materialIndex, "\" is out of range"); @@ -58,18 +58,18 @@ DynamicMeshMaterial::DynamicMeshMaterial(const MeshBuilderData& data, TYRA_ASSERT(facesCount > 0, "Faces count must be greater than 0"); _name = data.materials[materialIndex]->name; - TYRA_ASSERT(_name.length() > 0, "DynamicMeshMaterial name cannot be empty"); + TYRA_ASSERT(_name.length() > 0, "MeshMaterial name cannot be empty"); framesCount = data.framesCount; - frames = new DynamicMeshMaterialFrame*[framesCount]; + frames = new MeshMaterialFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new DynamicMeshMaterialFrame(data, i, materialIndex); + frames[i] = new MeshMaterialFrame(data, i, materialIndex); } _isMother = true; } -DynamicMeshMaterial::DynamicMeshMaterial(const DynamicMeshMaterial& mesh) { +MeshMaterial::MeshMaterial(const MeshMaterial& mesh) { id = rand() % 1000000; vertexFaces = mesh.vertexFaces; @@ -83,15 +83,15 @@ DynamicMeshMaterial::DynamicMeshMaterial(const DynamicMeshMaterial& mesh) { singleColor.set(128.0F, 128.0F, 128.0F, 128.0F); - frames = new DynamicMeshMaterialFrame*[framesCount]; + frames = new MeshMaterialFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { - frames[i] = new DynamicMeshMaterialFrame(*mesh.frames[i]); + frames[i] = new MeshMaterialFrame(*mesh.frames[i]); } _isMother = false; } -DynamicMeshMaterial::~DynamicMeshMaterial() { +MeshMaterial::~MeshMaterial() { if (_isMother) { delete[] vertexFaces; if (textureCoordFaces) delete[] textureCoordFaces; @@ -105,11 +105,11 @@ DynamicMeshMaterial::~DynamicMeshMaterial() { delete[] frames; } -const BBox& DynamicMeshMaterial::getBBox(const u32& frame) const { +const BBox& MeshMaterial::getBBox(const u32& frame) const { return frames[frame]->getBBox(); } -void DynamicMeshMaterial::setSingleColorFlag(const u8& flag) { +void MeshMaterial::setSingleColorFlag(const u8& flag) { TYRA_ASSERT( colorFaces != nullptr, "Colors and color faces are required to use color-per-vertex mode"); @@ -117,22 +117,22 @@ void DynamicMeshMaterial::setSingleColorFlag(const u8& flag) { singleColorFlag = flag; } -void DynamicMeshMaterial::print() const { +void MeshMaterial::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void DynamicMeshMaterial::print(const char* name) const { +void MeshMaterial::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string DynamicMeshMaterial::getPrint(const char* name) const { +std::string MeshMaterial::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "DynamicMeshMaterial("; + res << "MeshMaterial("; } res << std::endl; diff --git a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp b/engine/src/renderer/3d/mesh/mesh_material_frame.cpp similarity index 70% rename from engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp rename to engine/src/renderer/3d/mesh/mesh_material_frame.cpp index a4840e9..f4e8519 100644 --- a/engine/src/renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.cpp +++ b/engine/src/renderer/3d/mesh/mesh_material_frame.cpp @@ -13,13 +13,13 @@ #include #include "renderer/models/color.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" -#include "renderer/3d/mesh/dynamic/dynamic_mesh_material_frame.hpp" +#include "renderer/3d/mesh/mesh_material_frame.hpp" namespace Tyra { -DynamicMeshMaterialFrame::DynamicMeshMaterialFrame(const MeshBuilderData& data, - const u32& frameIndex, - const u32& materialIndex) { +MeshMaterialFrame::MeshMaterialFrame(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { TYRA_ASSERT(frameIndex < data.framesCount && frameIndex >= 0, "Provided index \"", frameIndex, "\" is out of range"); TYRA_ASSERT(materialIndex < data.materialsCount && materialIndex >= 0, @@ -34,8 +34,7 @@ DynamicMeshMaterialFrame::DynamicMeshMaterialFrame(const MeshBuilderData& data, _isMother = true; } -DynamicMeshMaterialFrame::DynamicMeshMaterialFrame( - const DynamicMeshMaterialFrame& frame) { +MeshMaterialFrame::MeshMaterialFrame(const MeshMaterialFrame& frame) { id = rand() % 1000000; bbox = frame.bbox; @@ -43,7 +42,7 @@ DynamicMeshMaterialFrame::DynamicMeshMaterialFrame( _isMother = false; } -DynamicMeshMaterialFrame::~DynamicMeshMaterialFrame() { +MeshMaterialFrame::~MeshMaterialFrame() { if (_isMother) { delete bbox; } diff --git a/engine/src/renderer/3d/mesh/static/static_mesh.cpp b/engine/src/renderer/3d/mesh/static/static_mesh.cpp new file mode 100644 index 0000000..e324d1d --- /dev/null +++ b/engine/src/renderer/3d/mesh/static/static_mesh.cpp @@ -0,0 +1,27 @@ + +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/mesh/static/static_mesh.hpp" + +namespace Tyra { + +StaticMesh::StaticMesh(const MeshBuilderData& data) : Mesh(data) { + TYRA_ASSERT(data.framesCount == 1, "Static meshes must have only one frame"); + frame = new MeshFrame(data, 0); +} + +StaticMesh::StaticMesh(const StaticMesh& mesh) : Mesh(mesh) { + frame = new MeshFrame(*mesh.frame); +} + +StaticMesh::~StaticMesh() { delete frame; } + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 8e8c59f..87a2e33 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -26,14 +26,13 @@ void Stapipeline::onUse() { core.reinitStandardVU1Programs(); } void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { auto model = mesh->getModelMatrix(); - DynamicMeshFrame* frameFrom = - mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getCurrentAnimationFrame()) - : mesh->getFrame(0); + MeshFrame* frameFrom = mesh->getFramesCount() > 0 + ? mesh->getFrame(mesh->getCurrentAnimationFrame()) + : mesh->getFrame(0); - DynamicMeshFrame* frameTo = - mesh->getFramesCount() > 0 ? mesh->getFrame(mesh->getNextAnimationFrame()) - : nullptr; + MeshFrame* frameTo = mesh->getFramesCount() > 0 + ? mesh->getFrame(mesh->getNextAnimationFrame()) + : nullptr; auto* infoBag = getInfoBag(mesh, options, &model); @@ -66,9 +65,9 @@ void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { delete infoBag; } -void Stapipeline::addVertices(DynamicMesh* mesh, DynamicMeshMaterial* material, - StapipBag* bag, DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo) const { +void Stapipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, + StapipBag* bag, MeshFrame* frameFrom, + MeshFrame* frameTo) const { bag->count = material->getFacesCount(); bag->vertices = new Vec4[bag->count]; @@ -107,9 +106,9 @@ StapipInfoBag* Stapipeline::getInfoBag(DynamicMesh* mesh, } StapipColorBag* Stapipeline::getColorBag(DynamicMesh* mesh, - DynamicMeshMaterial* material, - DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo) const { + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) const { auto* result = new StapipColorBag(); if (material->isSingleColorActivated()) { @@ -135,9 +134,9 @@ StapipColorBag* Stapipeline::getColorBag(DynamicMesh* mesh, } StapipTextureBag* Stapipeline::getTextureBag(DynamicMesh* mesh, - DynamicMeshMaterial* material, - DynamicMeshFrame* frameFrom, - DynamicMeshFrame* frameTo) { + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) { if (!material->getTextureCoordFaces()) return nullptr; auto* result = new StapipTextureBag(); @@ -165,8 +164,8 @@ StapipTextureBag* Stapipeline::getTextureBag(DynamicMesh* mesh, } StapipLightingBag* Stapipeline::getLightingBag( - DynamicMesh* mesh, DynamicMeshMaterial* material, M4x4* model, - DynamicMeshFrame* frameFrom, DynamicMeshFrame* frameTo, + DynamicMesh* mesh, MeshMaterial* material, M4x4* model, + MeshFrame* frameFrom, MeshFrame* frameTo, const StapipOptions* options) const { if (!material->getNormalFaces() || options == nullptr || options->lighting == nullptr) @@ -204,7 +203,7 @@ void Stapipeline::setLightingColorsCache( } void Stapipeline::deallocDrawBags(StapipBag* bag, - DynamicMeshMaterial* material) const { + MeshMaterial* material) const { if (bag->color->many) { delete[] bag->color->many; } From 95c01afa0146920a4a73f5522a1403d3d423ed0d Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 21:49:38 +0200 Subject: [PATCH 07/33] dynamic pipeline base --- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 37 ++++++ .../3d/pipeline/dynamic/dynpip_options.hpp | 21 ++++ .../core/bag/packaging/stapip_bag_package.hpp | 14 +-- .../bag/packaging/stapip_bag_packager.hpp | 16 +-- .../packaging/stapip_bag_packages_bbox.hpp | 8 +- .../pipeline/static/core/bag/stapip_bag.hpp | 16 +-- .../static/core/bag/stapip_color_bag.hpp | 6 +- .../static/core/bag/stapip_info_bag.hpp | 8 +- .../static/core/bag/stapip_lighting_bag.hpp | 10 +- .../static/core/bag/stapip_texture_bag.hpp | 6 +- .../as_is/stapip_as_is_c_vu1_program.hpp | 8 +- .../as_is/stapip_as_is_d_vu1_program.hpp | 8 +- .../as_is/stapip_as_is_tc_vu1_program.hpp | 8 +- .../as_is/stapip_as_is_td_vu1_program.hpp | 8 +- .../cull/stapip_cull_c_vu1_program.hpp | 8 +- .../cull/stapip_cull_d_vu1_program.hpp | 8 +- .../cull/stapip_cull_tc_vu1_program.hpp | 8 +- .../cull/stapip_cull_td_vu1_program.hpp | 8 +- .../pipeline/static/core/stapip_clipper.hpp | 10 +- .../static/core/stapip_program_name.hpp | 18 +-- .../static/core/stapip_program_type.hpp | 10 +- .../core/stapip_programs_repository.hpp | 24 ++-- .../pipeline/static/core/stapip_qbuffer.hpp | 22 ++-- .../static/core/stapip_qbuffer_renderer.hpp | 40 +++--- .../static/core/stapip_vu1_program.hpp | 16 +-- .../static/core/static_pipeline_core.hpp | 18 +-- .../static/stapip_lighting_options.hpp | 6 +- .../3d/pipeline/static/stapip_options.hpp | 10 +- .../pipeline/static/stapip_shading_type.hpp | 6 +- .../3d/pipeline/static/static_pipeline.hpp | 28 ++--- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 25 ++++ .../core/bag/packaging/stapip_bag_package.cpp | 12 +- .../bag/packaging/stapip_bag_packager.cpp | 24 ++-- .../packaging/stapip_bag_packages_bbox.cpp | 24 ++-- .../pipeline/static/core/bag/stapip_bag.cpp | 16 +-- .../static/core/bag/stapip_color_bag.cpp | 4 +- .../static/core/bag/stapip_info_bag.cpp | 6 +- .../static/core/bag/stapip_lighting_bag.cpp | 28 ++--- .../static/core/bag/stapip_texture_bag.cpp | 4 +- .../programs/as_is/stapip_as_is_c_vu1.vclpp | 4 +- .../as_is/stapip_as_is_c_vu1_program.cpp | 18 +-- .../programs/as_is/stapip_as_is_d_vu1.vclpp | 4 +- .../as_is/stapip_as_is_d_vu1_program.cpp | 18 +-- .../programs/as_is/stapip_as_is_tc_vu1.vclpp | 4 +- .../as_is/stapip_as_is_tc_vu1_program.cpp | 18 +-- .../programs/as_is/stapip_as_is_td_vu1.vclpp | 4 +- .../as_is/stapip_as_is_td_vu1_program.cpp | 18 +-- .../programs/cull/stapip_cull_c_vu1.vclpp | 4 +- .../cull/stapip_cull_c_vu1_program.cpp | 18 +-- .../programs/cull/stapip_cull_d_vu1.vclpp | 4 +- .../cull/stapip_cull_d_vu1_program.cpp | 18 +-- .../programs/cull/stapip_cull_tc_vu1.vclpp | 4 +- .../cull/stapip_cull_tc_vu1_program.cpp | 18 +-- .../programs/cull/stapip_cull_td_vu1.vclpp | 4 +- .../cull/stapip_cull_td_vu1_program.cpp | 18 +-- .../pipeline/static/core/stapip_clipper.cpp | 18 +-- .../core/stapip_programs_repository.cpp | 24 ++-- .../pipeline/static/core/stapip_qbuffer.cpp | 34 ++--- .../static/core/stapip_qbuffer_renderer.cpp | 118 +++++++++--------- .../static/core/stapip_vu1_program.cpp | 18 +-- .../static/core/static_pipeline_core.cpp | 24 ++-- .../3d/pipeline/static/static_pipeline.cpp | 62 ++++----- samples/h4570/inc/h4570.hpp | 4 +- samples/h4570/src/h4570.cpp | 10 +- samples/wellinator/inc/wellinator.hpp | 4 +- samples/wellinator/src/wellinator.cpp | 10 +- 66 files changed, 571 insertions(+), 488 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp new file mode 100644 index 0000000..d86ecdb --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -0,0 +1,37 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include "../renderer_3d_pipeline.hpp" +#include "./dynpip_options.hpp" +#include "renderer/core/renderer_core.hpp" +#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" + +namespace Tyra { + +class DynamicPipeline : public Renderer3DPipeline { + public: + DynamicPipeline(); + ~DynamicPipeline(); + + void init(RendererCore* core); + + void onUse(); + + /** + * Render 3D data via "meshes". + * This render() method is a bridge to core.render() method. + */ + void render(DynamicMesh* mesh, const DynPipOptions* options = nullptr); +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp new file mode 100644 index 0000000..f355b0d --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp @@ -0,0 +1,21 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +namespace Tyra { + +class DynPipOptions { + public: + DynPipOptions() {} + ~DynPipOptions() {} +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp index 5225c05..0ab35e3 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.hpp @@ -15,12 +15,12 @@ namespace Tyra { -class StapipBagPackage { +class StaPipBagPackage { public: - StapipBagPackage(); - ~StapipBagPackage(); + StaPipBagPackage(); + ~StaPipBagPackage(); - StapipBag* bag; + StaPipBag* bag; Vec4* vertices; Vec4* sts; @@ -32,12 +32,12 @@ class StapipBagPackage { CoreBBoxFrustum isInFrustum; /** - * We are creating StapipBagPackagesBBox which checks CoreBBoxBBox for every + * We are creating StaPipBagPackagesBBox which checks CoreBBoxBBox for every * maxVertCount / 3. So this variable is index of starting - * StapipBagPackagesBBox's CoreBBoxBBox. If package have <= maxVertCount / 3 + * StaPipBagPackagesBBox's CoreBBoxBBox. If package have <= maxVertCount / 3 * verts, we will need only single (starting) bbox. if package have * maxVertCount verts, we will calculate CoreBBoxBBox from 3 - * StapipBagPackagesBBox's bboxes. + * StaPipBagPackagesBBox's bboxes. */ u32 indexOf1By3BBox; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp index 9b90f9c..848bb9c 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp @@ -19,13 +19,13 @@ namespace Tyra { -class StapipBagPackager { +class StaPipBagPackager { public: - StapipBagPackager(); - ~StapipBagPackager(); + StaPipBagPackager(); + ~StaPipBagPackager(); void init(Renderer3DFrustumPlanes* frustumPlanes); - void setRenderBBox(StapipBagPackagesBBox* bbox) { renderBBox = bbox; } + void setRenderBBox(StaPipBagPackagesBBox* bbox) { renderBBox = bbox; } void setMaxVertCount(const u32& count); /** @@ -33,20 +33,20 @@ class StapipBagPackager { * * @param size Max maxVertCount verts (VU1 buffer size) */ - StapipBagPackage* create(u16* o_size, StapipBag* data, u16 size); + StaPipBagPackage* create(u16* o_size, StaPipBag* data, u16 size); /** * @brief Split render package to smaller packages * * @param size Max maxVertCount verts (VU1 buffer size) */ - StapipBagPackage* create(u16* o_size, const StapipBagPackage& pkg, u16 size); + StaPipBagPackage* create(u16* o_size, const StaPipBagPackage& pkg, u16 size); - CoreBBoxFrustum checkFrustum(const StapipBagPackage& pkg); + CoreBBoxFrustum checkFrustum(const StaPipBagPackage& pkg); private: u32 maxVertCount; Renderer3DFrustumPlanes* frustumPlanes; - StapipBagPackagesBBox* renderBBox; + StaPipBagPackagesBBox* renderBBox; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp index 9356690..94ddd1f 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.hpp @@ -18,13 +18,13 @@ namespace Tyra { * Splits all 3D input vertices into 16vert parts and creates child bboxes for * it */ -class StapipBagPackagesBBox { +class StaPipBagPackagesBBox { public: - StapipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, + StaPipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, const u32& t_maxVertCount); - StapipBagPackagesBBox(Vec4* t_vertices, const u32& t_counts, + StaPipBagPackagesBBox(Vec4* t_vertices, const u32& t_counts, const u32& t_maxVertCount); - ~StapipBagPackagesBBox(); + ~StaPipBagPackagesBBox(); void setMaxVertCount(const u32& count); diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp index fd8be94..c3cc7af 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp @@ -25,16 +25,16 @@ namespace Tyra { * Supports frustum culling, clipping, lighting, * texture and single color / many colors. */ -class StapipBag { +class StaPipBag { public: - StapipBag(); - ~StapipBag(); + StaPipBag(); + ~StaPipBag(); /** Mandatory. Object info. */ - StapipInfoBag* info; + StaPipInfoBag* info; /** Mandatory. Object color(s). */ - StapipColorBag* color; + StaPipColorBag* color; /** Mandatory. Vertex count. */ u32 count; @@ -43,15 +43,15 @@ class StapipBag { Vec4* vertices; /** Optional. Texture coordinates and image. */ - StapipTextureBag* texture; + StaPipTextureBag* texture; /** Optional. Object lighting. */ - StapipLightingBag* lighting; + StaPipLightingBag* lighting; /** * @param maxVertCount This parameter is available in renderer API. */ - StapipBagPackagesBBox calculateBbox(const u32& maxVertCount); + StaPipBagPackagesBBox calculateBbox(const u32& maxVertCount); void print() const; void print(const char* name) const; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp index e17761b..4106cd4 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_color_bag.hpp @@ -17,10 +17,10 @@ namespace Tyra { /** * @brief Color data. At least one color data is required (single/many). */ -class StapipColorBag { +class StaPipColorBag { public: - StapipColorBag(); - ~StapipColorBag(); + StaPipColorBag(); + ~StaPipColorBag(); /** Optional. Single color for all vertices. */ Color* single; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp index 5afaa30..ba79e59 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp @@ -17,15 +17,15 @@ namespace Tyra { -class StapipInfoBag { +class StaPipInfoBag { public: - StapipInfoBag(); - ~StapipInfoBag(); + StaPipInfoBag(); + ~StaPipInfoBag(); /** Mandatory. Model matrix */ M4x4* model; - StapipShadingType shadingType; + StaPipShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp index 5c9444b..1eebdb5 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp @@ -16,12 +16,12 @@ namespace Tyra { -enum StapipLightingBagMode { Auto, Manual }; +enum StaPipLightingBagMode { Auto, Manual }; -class StapipLightingBag { +class StaPipLightingBag { public: - explicit StapipLightingBag(const bool& manual = false); - ~StapipLightingBag(); + explicit StaPipLightingBag(const bool& manual = false); + ~StaPipLightingBag(); Vec4* normals; M4x4* lightMatrix; @@ -47,7 +47,7 @@ class StapipLightingBag { void deallocate(); void forceDeallocate(); u8 isAllocated; - StapipLightingBagMode mode; + StaPipLightingBagMode mode; Vec4* lightColors; Vec4* lightDirections; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp index 4f73dde..b940fe7 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.hpp @@ -15,10 +15,10 @@ namespace Tyra { -class StapipTextureBag { +class StaPipTextureBag { public: - StapipTextureBag(); - ~StapipTextureBag(); + StaPipTextureBag(); + ~StaPipTextureBag(); /** Mandatory. Texture coordinates per vertex. */ Vec4* coordinates; diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp index 79a5d77..1b7d45c 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp @@ -16,15 +16,15 @@ namespace Tyra { -class StapipAsIsCVU1Program : public StapipVU1Program { +class StaPipAsIsCVU1Program : public StaPipVU1Program { public: - StapipAsIsCVU1Program(); - ~StapipAsIsCVU1Program(); + StaPipAsIsCVU1Program(); + ~StaPipAsIsCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp index f1af9d1..59aa838 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipAsIsDVU1Program : public StapipVU1Program { +class StaPipAsIsDVU1Program : public StaPipVU1Program { public: - StapipAsIsDVU1Program(); - ~StapipAsIsDVU1Program(); + StaPipAsIsDVU1Program(); + ~StaPipAsIsDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp index b2827d0..b026174 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipAsIsTCVU1Program : public StapipVU1Program { +class StaPipAsIsTCVU1Program : public StaPipVU1Program { public: - StapipAsIsTCVU1Program(); - ~StapipAsIsTCVU1Program(); + StaPipAsIsTCVU1Program(); + ~StaPipAsIsTCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp index c1e4147..2d98e3b 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipAsIsTDVU1Program : public StapipVU1Program { +class StaPipAsIsTDVU1Program : public StaPipVU1Program { public: - StapipAsIsTDVU1Program(); - ~StapipAsIsTDVU1Program(); + StaPipAsIsTDVU1Program(); + ~StaPipAsIsTDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp index 5cb6489..ff4bb4a 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipCullCVU1Program : public StapipVU1Program { +class StaPipCullCVU1Program : public StaPipVU1Program { public: - StapipCullCVU1Program(); - ~StapipCullCVU1Program(); + StaPipCullCVU1Program(); + ~StaPipCullCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp index 7463374..c1d35d7 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipCullDVU1Program : public StapipVU1Program { +class StaPipCullDVU1Program : public StaPipVU1Program { public: - StapipCullDVU1Program(); - ~StapipCullDVU1Program(); + StaPipCullDVU1Program(); + ~StaPipCullDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp index 6419e0c..b8d35d3 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipCullTCVU1Program : public StapipVU1Program { +class StaPipCullTCVU1Program : public StaPipVU1Program { public: - StapipCullTCVU1Program(); - ~StapipCullTCVU1Program(); + StaPipCullTCVU1Program(); + ~StaPipCullTCVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp index 1007c90..cc0406d 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp @@ -16,14 +16,14 @@ namespace Tyra { -class StapipCullTDVU1Program : public StapipVU1Program { +class StaPipCullTDVU1Program : public StaPipVU1Program { public: - StapipCullTDVU1Program(); - ~StapipCullTDVU1Program(); + StaPipCullTDVU1Program(); + ~StaPipCullTDVU1Program(); std::string getStringName() const; void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const; + StaPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp index 79a03ac..79f9a4a 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp @@ -25,11 +25,11 @@ namespace Tyra { * To be honest clipping algorithm should be moved to VU1 and "AsIs" VU1 program * should be renamed to "Clip" - I don't want to do it now, too much time. */ -class StapipClipper { +class StaPipClipper { public: - StapipClipper(); - ~StapipClipper(); - void clip(StapipQBuffer* buffer); + StaPipClipper(); + ~StaPipClipper(); + void clip(StaPipQBuffer* buffer); void init(const RendererSettings& settings); void setMaxVertCount(const u32& count); void setMVP(M4x4* mvp); @@ -41,7 +41,7 @@ class StapipClipper { void perspectiveDivide(std::vector* vertices); void moveDataToBuffer(const std::vector& vertices, - StapipQBuffer* buffer); + StaPipQBuffer* buffer); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp index 1927a3b..363463e 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp @@ -12,20 +12,20 @@ namespace Tyra { -enum StapipProgramName { +enum StaPipProgramName { StdipUndefinedProgram, - StapipCullColor, - StapipAsIsColor, + StaPipCullColor, + StaPipAsIsColor, - StapipCullDirLights, - StapipAsIsDirLights, + StaPipCullDirLights, + StaPipAsIsDirLights, - StapipCullTextureDirLights, - StapipAsIsTextureDirLights, + StaPipCullTextureDirLights, + StaPipAsIsTextureDirLights, - StapipCullTextureColor, - StapipAsIsTextureColor, + StaPipCullTextureColor, + StaPipAsIsTextureColor, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp index 55bb7b2..cde8d83 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_type.hpp @@ -12,11 +12,11 @@ namespace Tyra { -enum StapipProgramType { - StapipVU1Color, - StapipVU1DirLights, - StapipVU1TextureDirLights, - StapipVU1TextureColor, +enum StaPipProgramType { + StaPipVU1Color, + StaPipVU1DirLights, + StaPipVU1TextureDirLights, + StaPipVU1TextureColor, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp index 35a36f6..92550e1 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp @@ -27,22 +27,22 @@ namespace Tyra { -class StapipProgramsRepository { +class StaPipProgramsRepository { public: - StapipProgramsRepository(); - ~StapipProgramsRepository(); + StaPipProgramsRepository(); + ~StaPipProgramsRepository(); - StapipVU1Program* getProgram(const StapipProgramName& name); + StaPipVU1Program* getProgram(const StaPipProgramName& name); private: - StapipAsIsCVU1Program asIsColor; - StapipCullCVU1Program cullColor; - StapipAsIsDVU1Program asIsLightingColor; - StapipCullDVU1Program cullLightingColor; - StapipAsIsTDVU1Program asIsLightingTextureColor; - StapipCullTDVU1Program cullLightingTextureColor; - StapipAsIsTCVU1Program asIsTextureColor; - StapipCullTCVU1Program cullTextureColor; + StaPipAsIsCVU1Program asIsColor; + StaPipCullCVU1Program cullColor; + StaPipAsIsDVU1Program asIsLightingColor; + StaPipCullDVU1Program cullLightingColor; + StaPipAsIsTDVU1Program asIsLightingTextureColor; + StaPipCullTDVU1Program cullLightingTextureColor; + StaPipAsIsTCVU1Program asIsTextureColor; + StaPipCullTCVU1Program cullTextureColor; VU1DrawFinish drawFinish; }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp index e1a7e16..e873e63 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer.hpp @@ -18,10 +18,10 @@ namespace Tyra { -class StapipQBuffer { +class StaPipQBuffer { public: - StapipQBuffer(); - ~StapipQBuffer(); + StaPipQBuffer(); + ~StaPipQBuffer(); void setMaxVertCount(const u32& count); @@ -29,27 +29,27 @@ class StapipQBuffer { * @brief Dont allocate any dynamic data in buffer. * Just copy pointers to input data. */ - void fillByPointer(const StapipBagPackage& pkg); + void fillByPointer(const StaPipBagPackage& pkg); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopyMax(const StapipBagPackage& pkg1, const StapipBagPackage& pkg2, - const StapipBagPackage& pkg3); + void fillByCopyMax(const StaPipBagPackage& pkg1, const StaPipBagPackage& pkg2, + const StaPipBagPackage& pkg3); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopy1By2(const StapipBagPackage& pkg1, - const StapipBagPackage& pkg2); + void fillByCopy1By2(const StaPipBagPackage& pkg1, + const StaPipBagPackage& pkg2); /** * @brief Allocate dynamic data in buffer * And copy input data to it. */ - void fillByCopy1By3(const StapipBagPackage& pkg); + void fillByCopy1By3(const StaPipBagPackage& pkg); /** * @brief Deallocate dynamic data if it was allocated and allocate new data @@ -60,7 +60,7 @@ class StapipQBuffer { bool any() const; - StapipBag* bag; + StaPipBag* bag; Vec4* vertices; Vec4* sts; @@ -76,7 +76,7 @@ class StapipQBuffer { private: u32 maxVertCount; void deallocateDynamicData(); - void allocateDynamicData(u16 size, StapipBag* bag); + void allocateDynamicData(u16 size, StaPipBag* bag); u8 _isDynamicallyAllocated, _stAllocated, _colorAllocated, _normalAllocated; }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp index 6d0a41e..1dfba35 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp @@ -28,10 +28,10 @@ namespace Tyra { -class StapipQBufferRenderer { +class StaPipQBufferRenderer { public: - StapipQBufferRenderer(); - ~StapipQBufferRenderer(); + StaPipQBufferRenderer(); + ~StaPipQBufferRenderer(); void init(RendererCore* t_core); @@ -39,26 +39,26 @@ class StapipQBufferRenderer { void setClipperMVP(M4x4* mvp) { clipper.setMVP(mvp); } - StapipQBuffer* getBuffer(); + StaPipQBuffer* getBuffer(); - void sendObjectData(StapipBag* bag, M4x4* mvp, + void sendObjectData(StaPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const; void setMaxVertCount(const u32& count); - void setInfo(StapipInfoBag* bag); + void setInfo(StaPipInfoBag* bag); /** Fast render with culling */ - void cull(StapipQBuffer* buffer); + void cull(StaPipQBuffer* buffer); /** Slower render with clipping */ - void clip(StapipQBuffer* buffer); + void clip(StaPipQBuffer* buffer); void clearLastProgramName(); - StapipVU1Program* getCullProgramByBag(const StapipBag* bag); + StaPipVU1Program* getCullProgramByBag(const StaPipBag* bag); - StapipVU1Program* getCullProgramByParams(const bool& isLightingEnabled, + StaPipVU1Program* getCullProgramByParams(const bool& isLightingEnabled, const bool& isTextureEnabled); const u16& getBufferSize() { return bufferSize; } @@ -69,27 +69,27 @@ class StapipQBufferRenderer { void uploadPrograms(); void setDoubleBuffer(); - StapipVU1Program* getProgramByName(const StapipProgramName& name); - void addBufferDataToPacket(StapipVU1Program* program, StapipQBuffer* buffer); + StaPipVU1Program* getProgramByName(const StaPipProgramName& name); + void addBufferDataToPacket(StaPipVU1Program* program, StaPipQBuffer* buffer); void sendPacket(); - StapipVU1Program* getAsIsProgramByBag(const StapipBag* bag); - StapipVU1Program* getCullProgramByType(const StapipProgramType& programType); - StapipProgramType getDrawProgramTypeByBag(const StapipBag* bag) const; - StapipProgramType getDrawProgramTypeByParams( + StaPipVU1Program* getAsIsProgramByBag(const StaPipBag* bag); + StaPipVU1Program* getCullProgramByType(const StaPipProgramType& programType); + StaPipProgramType getDrawProgramTypeByBag(const StaPipBag* bag) const; + StaPipProgramType getDrawProgramTypeByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) const; packet2_t* packets[2]; packet2_t* programsPacket; - StapipQBuffer buffers[2]; + StaPipQBuffer buffers[2]; packet2_t* currentPacket; packet2_t* staticDataPacket; packet2_t* objectDataPacket; RendererCore* rendererCore; - StapipProgramName lastProgramName; + StaPipProgramName lastProgramName; Path1* path1; - StapipClipper clipper; - StapipProgramsRepository repository; + StaPipClipper clipper; + StaPipProgramsRepository repository; u16 bufferSize; u8 context; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp index 5842e52..b4b5eb4 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_vu1_program.hpp @@ -17,33 +17,33 @@ namespace Tyra { -class StapipVU1Program : public VU1Program { +class StaPipVU1Program : public VU1Program { public: - StapipVU1Program(const StapipProgramName& name, u32* start, u32* end, + StaPipVU1Program(const StaPipProgramName& name, u32* start, u32* end, const u32& t_reglist, const u8& t_reglistCount, const u8& t_elementsPerVertex); - ~StapipVU1Program(); + ~StaPipVU1Program(); u32& getReglist(); - const StapipProgramName& getName() const; + const StaPipProgramName& getName() const; u16 getMaxVertCount(const bool& singleColorEnabled, const u16& vu1DBufferSize) const; - void addBufferDataToPacket(packet2_t* packet, StapipQBuffer* buffer, + void addBufferDataToPacket(packet2_t* packet, StaPipQBuffer* buffer, prim_t* prim); protected: - StapipProgramName name; + StaPipProgramName name; u8 reglistCount, elementsPerVertex; u32 destinationAddress, reglist; virtual void addProgramQBufferDataToPacket(packet2_t* packet, - StapipQBuffer* qbuffer) const = 0; + StaPipQBuffer* qbuffer) const = 0; private: - void addStandardBufferDataToPacket(packet2_t* packet, StapipQBuffer* buffer, + void addStandardBufferDataToPacket(packet2_t* packet, StaPipQBuffer* buffer, prim_t* prim); }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp index 3079ceb..6cfb27b 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp @@ -19,15 +19,15 @@ namespace Tyra { -class StapipelineCore { +class StaPipelineCore { public: - StapipelineCore(); - ~StapipelineCore(); + StaPipelineCore(); + ~StaPipelineCore(); void init(RendererCore* t_core); /** Render 3D data via "bags" */ - void render(StapipBag* data, StapipBagPackagesBBox* bbox = nullptr); + void render(StaPipBag* data, StaPipBagPackagesBBox* bbox = nullptr); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isSingleColor, @@ -35,7 +35,7 @@ class StapipelineCore { const bool& isTextureEnabled); /** Get max vert count of VU1 qbuffer (for optimizations) */ - u32 getMaxVertCountByBag(const StapipBag* bag); + u32 getMaxVertCountByBag(const StaPipBag* bag); /** * - Uploads standard VU1 programs. @@ -50,10 +50,10 @@ class StapipelineCore { RendererCore* rendererCore; void setMaxVertCount(const u32& count); - StapipBagPackager packager; - StapipQBufferRenderer qbufferRenderer; - void renderPkgs(StapipBagPackage* packages, u16 count); - void renderSubpkgs(StapipBagPackage* packages, u16 count); + StaPipBagPackager packager; + StaPipQBufferRenderer qbufferRenderer; + void renderPkgs(StaPipBagPackage* packages, u16 count); + void renderSubpkgs(StaPipBagPackage* packages, u16 count); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp index 0bc1e4a..039e681 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp @@ -15,10 +15,10 @@ namespace Tyra { -class StapipLightingOptions { +class StaPipLightingOptions { public: - StapipLightingOptions() {} - ~StapipLightingOptions() {} + StaPipLightingOptions() {} + ~StaPipLightingOptions() {} /** * Mandatory. diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index 13d2797..2630ce0 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -15,18 +15,18 @@ namespace Tyra { -class StapipOptions { +class StaPipOptions { public: - StapipOptions() {} - ~StapipOptions() {} + StaPipOptions() {} + ~StaPipOptions() {} - StapipShadingType shadingType; + StaPipShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; /** Optional */ - StapipLightingOptions* lighting; + StaPipLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp index 6068900..544242b 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp @@ -12,9 +12,9 @@ namespace Tyra { -enum StapipShadingType { - StapipShadingFlat, - StapipShadingGouraud, +enum StaPipShadingType { + StaPipShadingFlat, + StaPipShadingGouraud, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 070e3a6..6647910 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -19,10 +19,10 @@ namespace Tyra { -class Stapipeline : public Renderer3DPipeline { +class StaticPipeline : public Renderer3DPipeline { public: - Stapipeline(); - ~Stapipeline(); + StaticPipeline(); + ~StaticPipeline(); void init(RendererCore* core); @@ -30,30 +30,30 @@ class Stapipeline : public Renderer3DPipeline { /** * Render 3D data via "meshes". - * This render() method is a bridge to core.renderer3D.render() method. + * This render() method is a bridge to core.render() method. */ - void render(DynamicMesh* mesh, const StapipOptions* options = nullptr); + void render(DynamicMesh* mesh, const StaPipOptions* options = nullptr); private: - StapipelineCore core; + StaPipelineCore core; RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(DynamicMesh* mesh, MeshMaterial* material, StapipBag* bag, + void addVertices(DynamicMesh* mesh, MeshMaterial* material, StaPipBag* bag, MeshFrame* frameFrom, MeshFrame* frameTo) const; - StapipInfoBag* getInfoBag(DynamicMesh* mesh, const StapipOptions* options, + StaPipInfoBag* getInfoBag(DynamicMesh* mesh, const StaPipOptions* options, M4x4* model) const; - StapipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, + StaPipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo) const; - StapipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, + StaPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo); - StapipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, + StaPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, - const StapipOptions* options) const; - void deallocDrawBags(StapipBag* bag, MeshMaterial* material) const; + const StaPipOptions* options) const; + void deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const; - void setLightingColorsCache(StapipLightingOptions* lightingOptions); + void setLightingColorsCache(StaPipLightingOptions* lightingOptions); }; } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp new file mode 100644 index 0000000..8b74c7a --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -0,0 +1,25 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp" + +namespace Tyra { + +DynamicPipeline::DynamicPipeline() {} + +DynamicPipeline::~DynamicPipeline() {} + +void DynamicPipeline::init(RendererCore* t_core) {} + +void DynamicPipeline::onUse() {} + +void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp index 3c9e834..1f953f8 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_package.cpp @@ -16,7 +16,7 @@ namespace Tyra { -StapipBagPackage::StapipBagPackage() { +StaPipBagPackage::StaPipBagPackage() { size = 0; bag = nullptr; vertices = nullptr; @@ -24,24 +24,24 @@ StapipBagPackage::StapipBagPackage() { normals = nullptr; colors = nullptr; } -StapipBagPackage::~StapipBagPackage() {} +StaPipBagPackage::~StaPipBagPackage() {} -void StapipBagPackage::print() const { +void StaPipBagPackage::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StapipBagPackage::print(const char* name) const { +void StaPipBagPackage::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StapipBagPackage::getPrint(const char* name) const { +std::string StaPipBagPackage::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StapipBagPackage("; + res << "StaPipBagPackage("; } res << std::fixed << std::setprecision(2); res << std::endl; diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp index 6cb0af3..f484702 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp @@ -15,10 +15,10 @@ namespace Tyra { -StapipBagPackager::StapipBagPackager() {} -StapipBagPackager::~StapipBagPackager() {} +StaPipBagPackager::StaPipBagPackager() {} +StaPipBagPackager::~StaPipBagPackager() {} -void StapipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { +void StaPipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { frustumPlanes = t_frustumPlanes; } @@ -27,13 +27,13 @@ void StapipBagPackager::init(Renderer3DFrustumPlanes* t_frustumPlanes) { * * @param size Max maxVertCount verts (VU1 buffer size) */ -StapipBagPackage* StapipBagPackager::create(u16* o_size, StapipBag* data, +StaPipBagPackage* StaPipBagPackager::create(u16* o_size, StaPipBag* data, u16 size) { - TYRA_ASSERT(size <= maxVertCount, "StapipBagPackage can have max ", + TYRA_ASSERT(size <= maxVertCount, "StaPipBagPackage can have max ", maxVertCount, " verts. Provided \"", size, "\""); *o_size = ceil(data->count / static_cast(size)); - StapipBagPackage* result = new StapipBagPackage[*o_size]; + StaPipBagPackage* result = new StaPipBagPackage[*o_size]; for (u16 i = 0; i < *o_size; i++) { result[i].bag = data; @@ -65,14 +65,14 @@ StapipBagPackage* StapipBagPackager::create(u16* o_size, StapipBag* data, * * @param size Max maxVertCount verts (VU1 buffer size) */ -StapipBagPackage* StapipBagPackager::create(u16* o_count, - const StapipBagPackage& pkg, +StaPipBagPackage* StaPipBagPackager::create(u16* o_count, + const StaPipBagPackage& pkg, u16 size) { - TYRA_ASSERT(size <= maxVertCount, "StapipBagPackage can have max ", + TYRA_ASSERT(size <= maxVertCount, "StaPipBagPackage can have max ", maxVertCount, " verts. Provided \"", size, "\""); *o_count = ceil(pkg.size / static_cast(size)); - auto* result = new StapipBagPackage[*o_count]; + auto* result = new StaPipBagPackage[*o_count]; for (u16 i = 0; i < *o_count; i++) { result[i].bag = pkg.bag; @@ -99,7 +99,7 @@ StapipBagPackage* StapipBagPackager::create(u16* o_count, return result; } -CoreBBoxFrustum StapipBagPackager::checkFrustum(const StapipBagPackage& pkg) { +CoreBBoxFrustum StaPipBagPackager::checkFrustum(const StaPipBagPackage& pkg) { if (pkg.size <= (maxVertCount / 3)) { // Is subpackage auto& bbox = renderBBox->getChildBBox1By3(pkg.indexOf1By3BBox); return bbox.clipIsInFrustum(frustumPlanes->getAll(), *pkg.bag->info->model); @@ -112,7 +112,7 @@ CoreBBoxFrustum StapipBagPackager::checkFrustum(const StapipBagPackage& pkg) { } } -void StapipBagPackager::setMaxVertCount(const u32& count) { +void StaPipBagPackager::setMaxVertCount(const u32& count) { maxVertCount = count; } diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp index ec269c4..c802719 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packages_bbox.cpp @@ -18,7 +18,7 @@ namespace Tyra { -StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, +StaPipBagPackagesBBox::StaPipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, const u32& t_facesCount, const u32& t_maxVertCount) { u32 splitPartSize = t_maxVertCount / 3; @@ -35,7 +35,7 @@ StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, u32* t_faces, mainBBox = new RenderBBox(*bboxParts, 0, partsCount); } -StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, +StaPipBagPackagesBBox::StaPipBagPackagesBBox(Vec4* t_vertices, const u32& t_count, const u32& t_maxVertCount) { u32 splitPartSize = t_maxVertCount / 3; @@ -52,40 +52,40 @@ StapipBagPackagesBBox::StapipBagPackagesBBox(Vec4* t_vertices, mainBBox = new RenderBBox(*bboxParts, 0, partsCount); } -const RenderBBox& StapipBagPackagesBBox::getChildBBox1By3( +const RenderBBox& StaPipBagPackagesBBox::getChildBBox1By3( const u32& index) const { TYRA_ASSERT(index < partsCount, "Index out of range. Provided index: ", index); return static_cast(bboxParts->at(index)); } -RenderBBox* StapipBagPackagesBBox::getMainBBox() { return mainBBox; } +RenderBBox* StaPipBagPackagesBBox::getMainBBox() { return mainBBox; } -const u32& StapipBagPackagesBBox::getPartsCount() const { return partsCount; } +const u32& StaPipBagPackagesBBox::getPartsCount() const { return partsCount; } -const u32& StapipBagPackagesBBox::getVertexCount() const { return vertexCount; } +const u32& StaPipBagPackagesBBox::getVertexCount() const { return vertexCount; } -RenderBBox StapipBagPackagesBBox::createChildBBox(const u32& index, +RenderBBox StaPipBagPackagesBBox::createChildBBox(const u32& index, const u16& partsSize) const { return RenderBBox(*bboxParts, index, partsSize); } -void StapipBagPackagesBBox::print() const { +void StaPipBagPackagesBBox::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StapipBagPackagesBBox::print(const char* name) const { +void StaPipBagPackagesBBox::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StapipBagPackagesBBox::getPrint(const char* name) const { +std::string StaPipBagPackagesBBox::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StapipBagPackagesBBox("; + res << "StaPipBagPackagesBBox("; } res << std::fixed << std::setprecision(2); res << std::endl; @@ -106,7 +106,7 @@ std::string StapipBagPackagesBBox::getPrint(const char* name) const { return res.str(); } -StapipBagPackagesBBox::~StapipBagPackagesBBox() { +StaPipBagPackagesBBox::~StaPipBagPackagesBBox() { delete bboxParts; delete mainBBox; } diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp index 051caf0..fe989fd 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp @@ -14,37 +14,37 @@ namespace Tyra { -StapipBag::StapipBag() { +StaPipBag::StaPipBag() { info = nullptr; color = nullptr; texture = nullptr; lighting = nullptr; } -StapipBag::~StapipBag() {} +StaPipBag::~StaPipBag() {} -StapipBagPackagesBBox StapipBag::calculateBbox(const u32& maxVertCount) { +StaPipBagPackagesBBox StaPipBag::calculateBbox(const u32& maxVertCount) { TYRA_ASSERT(vertices != nullptr, "Vertices are required to calculate bbox"); TYRA_ASSERT(count > 0, "Count must be greater than 0 to calculate bbox"); - return StapipBagPackagesBBox(vertices, count, maxVertCount); + return StaPipBagPackagesBBox(vertices, count, maxVertCount); } -void StapipBag::print() const { +void StaPipBag::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StapipBag::print(const char* name) const { +void StaPipBag::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StapipBag::getPrint(const char* name) const { +std::string StaPipBag::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; } else { - res << "StapipBag("; + res << "StaPipBag("; } res << std::fixed << std::setprecision(4); res << std::endl; diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp index 470f120..e428735 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_color_bag.cpp @@ -12,11 +12,11 @@ namespace Tyra { -StapipColorBag::StapipColorBag() { +StaPipColorBag::StaPipColorBag() { single = nullptr; many = nullptr; } -StapipColorBag::~StapipColorBag() {} +StaPipColorBag::~StaPipColorBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp index 4f55491..9dd6b34 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp @@ -12,13 +12,13 @@ namespace Tyra { -StapipInfoBag::StapipInfoBag() { - shadingType = StapipShadingFlat; +StaPipInfoBag::StaPipInfoBag() { + shadingType = StaPipShadingFlat; blendingEnabled = true; antiAliasingEnabled = false; model = nullptr; } -StapipInfoBag::~StapipInfoBag() {} +StaPipInfoBag::~StaPipInfoBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp index 126156a..4f56e2e 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp @@ -13,7 +13,7 @@ namespace Tyra { -StapipLightingBag::StapipLightingBag(const bool& manual) { +StaPipLightingBag::StaPipLightingBag(const bool& manual) { isAllocated = false; mode = Auto; normals = nullptr; @@ -27,24 +27,24 @@ StapipLightingBag::StapipLightingBag(const bool& manual) { } } -StapipLightingBag::~StapipLightingBag() { deallocate(); } +StaPipLightingBag::~StaPipLightingBag() { deallocate(); } -void StapipLightingBag::setAmbientColor(const Color& color) { +void StaPipLightingBag::setAmbientColor(const Color& color) { TYRA_ASSERT(mode != Manual, "Ambient color cannot be set in manual mode"); lightColors[3].set(reinterpret_cast(color)); } -void StapipLightingBag::setDirectionalLightColors(Color* colors, +void StaPipLightingBag::setDirectionalLightColors(Color* colors, const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightColor(colors[i], i); } -void StapipLightingBag::setDirectionalLightDirections(Vec4* directions, +void StaPipLightingBag::setDirectionalLightDirections(Vec4* directions, const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightDirection(directions[i], i); } -void StapipLightingBag::setDirectionalLightColor(const Color& color, +void StaPipLightingBag::setDirectionalLightColor(const Color& color, const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); @@ -52,7 +52,7 @@ void StapipLightingBag::setDirectionalLightColor(const Color& color, lightColors[index].set(reinterpret_cast(color)); } -void StapipLightingBag::setDirectionalLightDirection(const Vec4& direction, +void StaPipLightingBag::setDirectionalLightDirection(const Vec4& direction, const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); @@ -61,19 +61,19 @@ void StapipLightingBag::setDirectionalLightDirection(const Vec4& direction, lightDirections[index].set(direction); } -void StapipLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { +void StaPipLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { deallocate(); lightColors = colors; lightDirections = directions; mode = Manual; } -void StapipLightingBag::disableManualMode() { +void StaPipLightingBag::disableManualMode() { allocate(); mode = Auto; } -void StapipLightingBag::allocate() { +void StaPipLightingBag::allocate() { if (isAllocated) return; lightColors = new Vec4[4]; @@ -92,27 +92,27 @@ void StapipLightingBag::allocate() { isAllocated = true; } -void StapipLightingBag::deallocate() { +void StaPipLightingBag::deallocate() { if (!isAllocated) return; forceDeallocate(); } -void StapipLightingBag::forceDeallocate() { +void StaPipLightingBag::forceDeallocate() { forceDeallocateColors(); forceDeallocateDirections(); isAllocated = false; } -void StapipLightingBag::forceDeallocateColors() { +void StaPipLightingBag::forceDeallocateColors() { if (lightColors != nullptr) { delete[] lightColors; lightColors = nullptr; } } -void StapipLightingBag::forceDeallocateDirections() { +void StaPipLightingBag::forceDeallocateDirections() { if (lightDirections != nullptr) { delete[] lightDirections; lightDirections = nullptr; diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp index 0826b5b..b643c48 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_texture_bag.cpp @@ -12,11 +12,11 @@ namespace Tyra { -StapipTextureBag::StapipTextureBag() { +StaPipTextureBag::StaPipTextureBag() { coordinates = nullptr; texture = nullptr; } -StapipTextureBag::~StapipTextureBag() {} +StaPipTextureBag::~StaPipTextureBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp index 6267f3f..ea6ced3 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1As_Is_C +.name StaPipVU1As_Is_C .vu .init_vf_all .init_vi_all @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StapipVU1AsIsC +#vuprog StaPipVU1AsIsC LoadTyraStaticData{ gifSetTag } LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp index 245fa43..608a3c8 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp @@ -11,25 +11,25 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.hpp" -extern u32 StapipVU1As_Is_C_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1As_Is_C_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_C_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_C_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipAsIsCVU1Program::StapipAsIsCVU1Program() - : StapipVU1Program(StapipAsIsColor, &StapipVU1As_Is_C_CodeStart, - &StapipVU1As_Is_C_CodeEnd, +StaPipAsIsCVU1Program::StaPipAsIsCVU1Program() + : StaPipVU1Program(StaPipAsIsColor, &StaPipVU1As_Is_C_CodeStart, + &StaPipVU1As_Is_C_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} -StapipAsIsCVU1Program::~StapipAsIsCVU1Program() {} +StaPipAsIsCVU1Program::~StaPipAsIsCVU1Program() {} -std::string StapipAsIsCVU1Program::getStringName() const { +std::string StaPipAsIsCVU1Program::getStringName() const { return std::string("As is - C"); } -void StapipAsIsCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipAsIsCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp index 43a2a5d..9e6a540 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1As_Is_D +.name StaPipVU1As_Is_D .vu .init_vf_all .init_vi_all @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StapipVU1AsIsD +#vuprog StaPipVU1AsIsD LoadTyraStaticData{ gifSetTag } LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp index 8f8a81b..b348ff4 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp @@ -11,25 +11,25 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.hpp" -extern u32 StapipVU1As_Is_D_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1As_Is_D_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_D_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_D_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipAsIsDVU1Program::StapipAsIsDVU1Program() - : StapipVU1Program(StapipAsIsDirLights, &StapipVU1As_Is_D_CodeStart, - &StapipVU1As_Is_D_CodeEnd, +StaPipAsIsDVU1Program::StaPipAsIsDVU1Program() + : StaPipVU1Program(StaPipAsIsDirLights, &StaPipVU1As_Is_D_CodeStart, + &StaPipVU1As_Is_D_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} -StapipAsIsDVU1Program::~StapipAsIsDVU1Program() {} +StaPipAsIsDVU1Program::~StaPipAsIsDVU1Program() {} -std::string StapipAsIsDVU1Program::getStringName() const { +std::string StaPipAsIsDVU1Program::getStringName() const { return std::string("As is - LC"); } -void StapipAsIsDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipAsIsDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp index 2355a16..f21145b 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1As_Is_TC +.name StaPipVU1As_Is_TC .vu .init_vf_all .init_vi_all @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StapipVU1AsIsTC +#vuprog StaPipVU1AsIsTC LoadTyraStaticData{ gifSetTag } LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp index 1bf94d7..ccc8970 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp @@ -11,26 +11,26 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.hpp" -extern u32 StapipVU1As_Is_TC_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1As_Is_TC_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_TC_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_TC_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipAsIsTCVU1Program::StapipAsIsTCVU1Program() - : StapipVU1Program(StapipAsIsTextureColor, &StapipVU1As_Is_TC_CodeStart, - &StapipVU1As_Is_TC_CodeEnd, +StaPipAsIsTCVU1Program::StaPipAsIsTCVU1Program() + : StaPipVU1Program(StaPipAsIsTextureColor, &StaPipVU1As_Is_TC_CodeStart, + &StaPipVU1As_Is_TC_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 3) {} -StapipAsIsTCVU1Program::~StapipAsIsTCVU1Program() {} +StaPipAsIsTCVU1Program::~StaPipAsIsTCVU1Program() {} -std::string StapipAsIsTCVU1Program::getStringName() const { +std::string StaPipAsIsTCVU1Program::getStringName() const { return std::string("As is - TC"); } -void StapipAsIsTCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipAsIsTCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp index 758df0d..b6fe30f 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1As_Is_TD +.name StaPipVU1As_Is_TD .vu .init_vf_all .init_vi_all @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StapipVU1AsIsTD +#vuprog StaPipVU1AsIsTD LoadTyraStaticData{ gifSetTag } LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp index 4e47a2c..9127976 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp @@ -11,26 +11,26 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.hpp" -extern u32 StapipVU1As_Is_TD_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1As_Is_TD_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_TD_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1As_Is_TD_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipAsIsTDVU1Program::StapipAsIsTDVU1Program() - : StapipVU1Program(StapipAsIsTextureDirLights, &StapipVU1As_Is_TD_CodeStart, - &StapipVU1As_Is_TD_CodeEnd, +StaPipAsIsTDVU1Program::StaPipAsIsTDVU1Program() + : StaPipVU1Program(StaPipAsIsTextureDirLights, &StaPipVU1As_Is_TD_CodeStart, + &StaPipVU1As_Is_TD_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 4) {} -StapipAsIsTDVU1Program::~StapipAsIsTDVU1Program() {} +StaPipAsIsTDVU1Program::~StaPipAsIsTDVU1Program() {} -std::string StapipAsIsTDVU1Program::getStringName() const { +std::string StaPipAsIsTDVU1Program::getStringName() const { return std::string("As is - LTC"); } -void StapipAsIsTDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipAsIsTDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp index 247f84a..63c7d1e 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1Cull_C +.name StaPipVU1Cull_C .vu .init_vf_all .init_vi_all @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StapipVU1CullC +#vuprog StaPipVU1CullC ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp index b7c781a..1870679 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp @@ -11,24 +11,24 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.hpp" -extern u32 StapipVU1Cull_C_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1Cull_C_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_C_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_C_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipCullCVU1Program::StapipCullCVU1Program() - : StapipVU1Program( - StapipCullColor, &StapipVU1Cull_C_CodeStart, &StapipVU1Cull_C_CodeEnd, +StaPipCullCVU1Program::StaPipCullCVU1Program() + : StaPipVU1Program( + StaPipCullColor, &StaPipVU1Cull_C_CodeStart, &StaPipVU1Cull_C_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} -StapipCullCVU1Program::~StapipCullCVU1Program() {} +StaPipCullCVU1Program::~StaPipCullCVU1Program() {} -std::string StapipCullCVU1Program::getStringName() const { +std::string StaPipCullCVU1Program::getStringName() const { return std::string("Cull - C"); } -void StapipCullCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipCullCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp index ed49143..0e40535 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1Cull_D +.name StaPipVU1Cull_D .vu .init_vf_all .init_vi_all @@ -28,7 +28,7 @@ --enter --endenter -#vuprog StapipVU1CullD +#vuprog StaPipVU1CullD ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp index bac5d8f..68782d5 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp @@ -11,25 +11,25 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.hpp" -extern u32 StapipVU1Cull_D_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1Cull_D_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_D_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_D_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipCullDVU1Program::StapipCullDVU1Program() - : StapipVU1Program(StapipCullDirLights, &StapipVU1Cull_D_CodeStart, - &StapipVU1Cull_D_CodeEnd, +StaPipCullDVU1Program::StaPipCullDVU1Program() + : StaPipVU1Program(StaPipCullDirLights, &StaPipVU1Cull_D_CodeStart, + &StaPipVU1Cull_D_CodeEnd, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} -StapipCullDVU1Program::~StapipCullDVU1Program() {} +StaPipCullDVU1Program::~StaPipCullDVU1Program() {} -std::string StapipCullDVU1Program::getStringName() const { +std::string StaPipCullDVU1Program::getStringName() const { return std::string("Cull - LC"); } -void StapipCullDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipCullDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp index f1a9b2a..d67c796 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1Cull_TC +.name StaPipVU1Cull_TC .vu .init_vf_all .init_vi_all @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StapipVU1CullTC +#vuprog StaPipVU1CullTC ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp index d64d609..fb14961 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp @@ -11,26 +11,26 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.hpp" -extern u32 StapipVU1Cull_TC_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1Cull_TC_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_TC_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_TC_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipCullTCVU1Program::StapipCullTCVU1Program() - : StapipVU1Program(StapipCullTextureColor, &StapipVU1Cull_TC_CodeStart, - &StapipVU1Cull_TC_CodeEnd, +StaPipCullTCVU1Program::StaPipCullTCVU1Program() + : StaPipVU1Program(StaPipCullTextureColor, &StaPipVU1Cull_TC_CodeStart, + &StaPipVU1Cull_TC_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 3) {} -StapipCullTCVU1Program::~StapipCullTCVU1Program() {} +StaPipCullTCVU1Program::~StaPipCullTCVU1Program() {} -std::string StapipCullTCVU1Program::getStringName() const { +std::string StaPipCullTCVU1Program::getStringName() const { return std::string("Cull - TC"); } -void StapipCullTCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipCullTCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp index cf82eed..5377998 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp @@ -13,7 +13,7 @@ ;--------------------------------------------------------------- .syntax new -.name StapipVU1Cull_TD +.name StaPipVU1Cull_TD .vu .init_vf_all .init_vi_all @@ -29,7 +29,7 @@ --enter --endenter -#vuprog StapipVU1CullTD +#vuprog StaPipVU1CullTD ResetClipFlags{ } LoadTyraStaticData{ gifSetTag } diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp index c217f6d..9faa4f5 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp @@ -11,26 +11,26 @@ #include "debug/debug.hpp" #include "renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.hpp" -extern u32 StapipVU1Cull_TD_CodeStart __attribute__((section(".vudata"))); -extern u32 StapipVU1Cull_TD_CodeEnd __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_TD_CodeStart __attribute__((section(".vudata"))); +extern u32 StaPipVU1Cull_TD_CodeEnd __attribute__((section(".vudata"))); namespace Tyra { -StapipCullTDVU1Program::StapipCullTDVU1Program() - : StapipVU1Program(StapipCullTextureDirLights, &StapipVU1Cull_TD_CodeStart, - &StapipVU1Cull_TD_CodeEnd, +StaPipCullTDVU1Program::StaPipCullTDVU1Program() + : StaPipVU1Program(StaPipCullTextureDirLights, &StaPipVU1Cull_TD_CodeStart, + &StaPipVU1Cull_TD_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, 3, 4) {} -StapipCullTDVU1Program::~StapipCullTDVU1Program() {} +StaPipCullTDVU1Program::~StaPipCullTDVU1Program() {} -std::string StapipCullTDVU1Program::getStringName() const { +std::string StaPipCullTDVU1Program::getStringName() const { return std::string("Cull - LTC"); } -void StapipCullTDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, StapipQBuffer* qbuffer) const { +void StaPipCullTDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, StaPipQBuffer* qbuffer) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp index 1a4de98..447d966 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp @@ -12,18 +12,18 @@ namespace Tyra { -StapipClipper::StapipClipper() {} -StapipClipper::~StapipClipper() {} +StaPipClipper::StaPipClipper() {} +StaPipClipper::~StaPipClipper() {} -void StapipClipper::setMVP(M4x4* t_mvp) { mvp = t_mvp; } +void StaPipClipper::setMVP(M4x4* t_mvp) { mvp = t_mvp; } -void StapipClipper::init(const RendererSettings& settings) { +void StaPipClipper::init(const RendererSettings& settings) { algorithm.init(settings); } -void StapipClipper::setMaxVertCount(const u32& count) { maxVertCount = count; } +void StaPipClipper::setMaxVertCount(const u32& count) { maxVertCount = count; } -void StapipClipper::clip(StapipQBuffer* buffer) { +void StaPipClipper::clip(StaPipQBuffer* buffer) { TYRA_ASSERT(buffer->size <= maxVertCount / 3, "Buffer should have max ", maxVertCount / 3, " verts if we want to clip it."); @@ -64,14 +64,14 @@ void StapipClipper::clip(StapipQBuffer* buffer) { moveDataToBuffer(clippedVertices, buffer); } -void StapipClipper::perspectiveDivide(std::vector* vertices) { +void StaPipClipper::perspectiveDivide(std::vector* vertices) { for (u32 i = 0; i < vertices->size(); i++) { (*vertices)[i].position /= (*vertices)[i].position.w; } } -void StapipClipper::moveDataToBuffer( - const std::vector& vertices, StapipQBuffer* buffer) { +void StaPipClipper::moveDataToBuffer( + const std::vector& vertices, StaPipQBuffer* buffer) { buffer->reallocateManually(vertices.size()); for (u32 i = 0; i < vertices.size(); i++) { diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp index faf4439..1d30ebe 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp @@ -12,31 +12,31 @@ namespace Tyra { -StapipProgramsRepository::StapipProgramsRepository() {} +StaPipProgramsRepository::StaPipProgramsRepository() {} -StapipProgramsRepository::~StapipProgramsRepository() {} +StaPipProgramsRepository::~StaPipProgramsRepository() {} -StapipVU1Program* StapipProgramsRepository::getProgram( - const StapipProgramName& name) { +StaPipVU1Program* StaPipProgramsRepository::getProgram( + const StaPipProgramName& name) { switch (name) { - case StapipProgramName::StapipAsIsColor: + case StaPipProgramName::StaPipAsIsColor: return &asIsColor; - case StapipProgramName::StapipCullColor: + case StaPipProgramName::StaPipCullColor: return &cullColor; - case StapipProgramName::StapipAsIsDirLights: + case StaPipProgramName::StaPipAsIsDirLights: return &asIsLightingColor; - case StapipProgramName::StapipCullDirLights: + case StaPipProgramName::StaPipCullDirLights: return &cullLightingColor; - case StapipProgramName::StapipAsIsTextureDirLights: + case StaPipProgramName::StaPipAsIsTextureDirLights: return &asIsLightingTextureColor; - case StapipProgramName::StapipCullTextureDirLights: + case StaPipProgramName::StaPipCullTextureDirLights: return &cullLightingTextureColor; - case StapipProgramName::StapipAsIsTextureColor: + case StaPipProgramName::StaPipAsIsTextureColor: return &asIsTextureColor; - case StapipProgramName::StapipCullTextureColor: + case StaPipProgramName::StaPipCullTextureColor: return &cullTextureColor; default: diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp index a40a9cf..56ef9ae 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp @@ -14,7 +14,7 @@ namespace Tyra { -StapipQBuffer::StapipQBuffer() { +StaPipQBuffer::StaPipQBuffer() { size = 0; _isDynamicallyAllocated = false; _stAllocated = false; @@ -27,11 +27,11 @@ StapipQBuffer::StapipQBuffer() { normals = nullptr; } -StapipQBuffer::~StapipQBuffer() { deallocateDynamicData(); } +StaPipQBuffer::~StaPipQBuffer() { deallocateDynamicData(); } -void StapipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } +void StaPipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } -void StapipQBuffer::fillByPointer(const StapipBagPackage& pkg) { +void StaPipQBuffer::fillByPointer(const StaPipBagPackage& pkg) { TYRA_ASSERT(pkg.size <= maxVertCount, "VU1 buffer supports only ", maxVertCount, " verts. Provided: ", pkg.size); @@ -45,9 +45,9 @@ void StapipQBuffer::fillByPointer(const StapipBagPackage& pkg) { bag = pkg.bag; } -void StapipQBuffer::fillByCopyMax(const StapipBagPackage& pkg1, - const StapipBagPackage& pkg2, - const StapipBagPackage& pkg3) { +void StaPipQBuffer::fillByCopyMax(const StaPipBagPackage& pkg1, + const StaPipBagPackage& pkg2, + const StaPipBagPackage& pkg3) { TYRA_ASSERT(pkg1.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg1.size); TYRA_ASSERT(pkg2.size <= maxVertCount / 3, @@ -97,8 +97,8 @@ void StapipQBuffer::fillByCopyMax(const StapipBagPackage& pkg1, bag = pkg1.bag; } -void StapipQBuffer::fillByCopy1By2(const StapipBagPackage& pkg1, - const StapipBagPackage& pkg2) { +void StaPipQBuffer::fillByCopy1By2(const StaPipBagPackage& pkg1, + const StaPipBagPackage& pkg2) { TYRA_ASSERT(pkg1.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg1.size); TYRA_ASSERT(pkg2.size <= maxVertCount / 3, @@ -133,7 +133,7 @@ void StapipQBuffer::fillByCopy1By2(const StapipBagPackage& pkg1, bag = pkg1.bag; } -void StapipQBuffer::fillByCopy1By3(const StapipBagPackage& pkg) { +void StaPipQBuffer::fillByCopy1By3(const StaPipBagPackage& pkg) { TYRA_ASSERT(pkg.size <= maxVertCount / 3, "Wrong package size (1). Provided: ", pkg.size); @@ -155,13 +155,13 @@ void StapipQBuffer::fillByCopy1By3(const StapipBagPackage& pkg) { bag = pkg.bag; } -void StapipQBuffer::reallocateManually(const u16& t_size) { +void StaPipQBuffer::reallocateManually(const u16& t_size) { deallocateDynamicData(); allocateDynamicData(t_size, bag); size = t_size; } -void StapipQBuffer::deallocateDynamicData() { +void StaPipQBuffer::deallocateDynamicData() { if (_isDynamicallyAllocated) { delete[] vertices; @@ -186,7 +186,7 @@ void StapipQBuffer::deallocateDynamicData() { /** When we not receive maxVertCount vertices, we must align it by ourself. * Too bad - not efficient. */ -void StapipQBuffer::allocateDynamicData(u16 size, StapipBag* bag) { +void StaPipQBuffer::allocateDynamicData(u16 size, StaPipBag* bag) { TYRA_ASSERT(size <= maxVertCount, "Wrong size. Max buffer size in VU1 is ", maxVertCount, ". Provided: ", size); TYRA_ASSERT(!_isDynamicallyAllocated, "Buffer is already allocated"); @@ -211,19 +211,19 @@ void StapipQBuffer::allocateDynamicData(u16 size, StapipBag* bag) { _isDynamicallyAllocated = true; } -bool StapipQBuffer::any() const { return size > 0; } +bool StaPipQBuffer::any() const { return size > 0; } -void StapipQBuffer::print() const { +void StaPipQBuffer::print() const { auto text = getPrint(nullptr); printf("%s\n", text.c_str()); } -void StapipQBuffer::print(const char* name) const { +void StaPipQBuffer::print(const char* name) const { auto text = getPrint(name); printf("%s\n", text.c_str()); } -std::string StapipQBuffer::getPrint(const char* name) const { +std::string StaPipQBuffer::getPrint(const char* name) const { std::stringstream res; if (name) { res << name << "("; diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index d8d19ad..704d4a4 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -34,14 +34,14 @@ namespace Tyra { * */ -StapipQBufferRenderer::StapipQBufferRenderer() { +StaPipQBufferRenderer::StaPipQBufferRenderer() { context = 0; lastProgramName = StdipUndefinedProgram; staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); programsPacket = nullptr; } -StapipQBufferRenderer::~StapipQBufferRenderer() { +StaPipQBufferRenderer::~StaPipQBufferRenderer() { packet2_free(packets[0]); packet2_free(packets[1]); packet2_free(staticDataPacket); @@ -50,7 +50,7 @@ StapipQBufferRenderer::~StapipQBufferRenderer() { if (programsPacket) packet2_free(programsPacket); } -void StapipQBufferRenderer::init(RendererCore* t_core) { +void StaPipQBufferRenderer::init(RendererCore* t_core) { path1 = t_core->getPath1(); clipper.init(t_core->getSettings()); rendererCore = t_core; @@ -73,16 +73,16 @@ void StapipQBufferRenderer::init(RendererCore* t_core) { TYRA_LOG("Renderer3DQBufferRenderer initialized"); } -void StapipQBufferRenderer::reinitVU1() { +void StaPipQBufferRenderer::reinitVU1() { sendStaticData(); uploadPrograms(); setDoubleBuffer(); } -StapipQBuffer* StapipQBufferRenderer::getBuffer() { return &buffers[context]; } +StaPipQBuffer* StaPipQBufferRenderer::getBuffer() { return &buffers[context]; } -void StapipQBufferRenderer::sendObjectData( - StapipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { +void StaPipQBufferRenderer::sendObjectData( + StaPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { packet2_reset(objectDataPacket, false); packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_MVP_MATRIX_ADDR, mvp->data, 4, false); @@ -130,13 +130,13 @@ void StapipQBufferRenderer::sendObjectData( dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } -void StapipQBufferRenderer::setInfo(StapipInfoBag* bag) { +void StaPipQBufferRenderer::setInfo(StaPipInfoBag* bag) { rendererCore->gs.prim.antialiasing = bag->antiAliasingEnabled; rendererCore->gs.prim.blending = bag->blendingEnabled; rendererCore->gs.prim.shading = bag->shadingType; } -void StapipQBufferRenderer::sendStaticData() const { +void StaPipQBufferRenderer::sendStaticData() const { packet2_reset(staticDataPacket, false); packet2_utils_vu_open_unpack(staticDataPacket, VU1_SET_GIFTAG_ADDR, false); { packet2_utils_gif_add_set(staticDataPacket, 1); } @@ -147,27 +147,27 @@ void StapipQBufferRenderer::sendStaticData() const { dma_channel_send_packet2(staticDataPacket, DMA_CHANNEL_VIF1, true); } -void StapipQBufferRenderer::setProgramsCache() { +void StaPipQBufferRenderer::setProgramsCache() { VU1Program** programs = new VU1Program*[8]; - programs[0] = repository.getProgram(StapipCullColor); - programs[1] = repository.getProgram(StapipAsIsColor); - programs[2] = repository.getProgram(StapipCullDirLights); - programs[3] = repository.getProgram(StapipAsIsDirLights); - programs[4] = repository.getProgram(StapipCullTextureDirLights); - programs[5] = repository.getProgram(StapipAsIsTextureDirLights); - programs[6] = repository.getProgram(StapipCullTextureColor); - programs[7] = repository.getProgram(StapipAsIsTextureColor); + programs[0] = repository.getProgram(StaPipCullColor); + programs[1] = repository.getProgram(StaPipAsIsColor); + programs[2] = repository.getProgram(StaPipCullDirLights); + programs[3] = repository.getProgram(StaPipAsIsDirLights); + programs[4] = repository.getProgram(StaPipCullTextureDirLights); + programs[5] = repository.getProgram(StaPipAsIsTextureDirLights); + programs[6] = repository.getProgram(StaPipCullTextureColor); + programs[7] = repository.getProgram(StaPipAsIsTextureColor); programsPacket = path1->createProgramsCache(programs, 8, 0); delete[] programs; } -void StapipQBufferRenderer::uploadPrograms() { +void StaPipQBufferRenderer::uploadPrograms() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(programsPacket, DMA_CHANNEL_VIF1, true); dma_channel_wait(DMA_CHANNEL_VIF1, 0); } -void StapipQBufferRenderer::setDoubleBuffer() { +void StaPipQBufferRenderer::setDoubleBuffer() { u16 startingAddr = VU1_LAST_ITEM_ADDR + 1; const u16 bufferMaxSize = 1000; bufferSize = (bufferMaxSize - startingAddr) / 2; @@ -178,7 +178,7 @@ void StapipQBufferRenderer::setDoubleBuffer() { // buffer, to first addr of second buffer } -void StapipQBufferRenderer::cull(StapipQBuffer* buffer) { +void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) { if (buffer->size == 0) { return; } @@ -188,8 +188,8 @@ void StapipQBufferRenderer::cull(StapipQBuffer* buffer) { sendPacket(); } -// void StapipQBufferRenderer::sendFinishTag() { -// StapipQBufferRenderer way proposition +// void StaPipQBufferRenderer::sendFinishTag() { +// StaPipQBufferRenderer way proposition // auto program = path1->getProgramByName(Draw_Finish); // addBufferDataToPacket(program, nullptr); // sendPacket(); @@ -206,7 +206,7 @@ void StapipQBufferRenderer::cull(StapipQBuffer* buffer) { // packet2_free(packet2); // } -void StapipQBufferRenderer::clip(StapipQBuffer* buffer) { +void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { if (buffer->size == 0) { return; } @@ -220,12 +220,12 @@ void StapipQBufferRenderer::clip(StapipQBuffer* buffer) { } } -void StapipQBufferRenderer::clearLastProgramName() { +void StaPipQBufferRenderer::clearLastProgramName() { lastProgramName = StdipUndefinedProgram; } -void StapipQBufferRenderer::addBufferDataToPacket(StapipVU1Program* program, - StapipQBuffer* buffer) { +void StaPipQBufferRenderer::addBufferDataToPacket(StaPipVU1Program* program, + StaPipQBuffer* buffer) { currentPacket = packets[context]; packet2_reset(currentPacket, false); @@ -241,7 +241,7 @@ void StapipQBufferRenderer::addBufferDataToPacket(StapipVU1Program* program, packet2_utils_vu_add_end_tag(currentPacket); } -void StapipQBufferRenderer::sendPacket() { +void StaPipQBufferRenderer::sendPacket() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); @@ -249,72 +249,72 @@ void StapipQBufferRenderer::sendPacket() { context = !context; } -void StapipQBufferRenderer::setMaxVertCount(const u32& count) { +void StaPipQBufferRenderer::setMaxVertCount(const u32& count) { buffers[0].setMaxVertCount(count); buffers[1].setMaxVertCount(count); clipper.setMaxVertCount(count); } -StapipVU1Program* StapipQBufferRenderer::getAsIsProgramByBag( - const StapipBag* bag) { +StaPipVU1Program* StaPipQBufferRenderer::getAsIsProgramByBag( + const StaPipBag* bag) { auto programType = getDrawProgramTypeByBag(bag); - if (programType == StapipVU1TextureDirLights) - return getProgramByName(StapipAsIsTextureDirLights); - else if (programType == StapipVU1DirLights) - return getProgramByName(StapipAsIsDirLights); - else if (programType == StapipVU1TextureColor) - return getProgramByName(StapipAsIsTextureColor); + if (programType == StaPipVU1TextureDirLights) + return getProgramByName(StaPipAsIsTextureDirLights); + else if (programType == StaPipVU1DirLights) + return getProgramByName(StaPipAsIsDirLights); + else if (programType == StaPipVU1TextureColor) + return getProgramByName(StaPipAsIsTextureColor); else - return getProgramByName(StapipAsIsColor); + return getProgramByName(StaPipAsIsColor); } -StapipVU1Program* StapipQBufferRenderer::getCullProgramByBag( - const StapipBag* bag) { +StaPipVU1Program* StaPipQBufferRenderer::getCullProgramByBag( + const StaPipBag* bag) { auto programType = getDrawProgramTypeByBag(bag); return getCullProgramByType(programType); } -StapipVU1Program* StapipQBufferRenderer::getProgramByName( - const StapipProgramName& name) { +StaPipVU1Program* StaPipQBufferRenderer::getProgramByName( + const StaPipProgramName& name) { return repository.getProgram(name); } -StapipVU1Program* StapipQBufferRenderer::getCullProgramByParams( +StaPipVU1Program* StaPipQBufferRenderer::getCullProgramByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) { auto type = getDrawProgramTypeByParams(isLightingEnabled, isTextureEnabled); return getCullProgramByType(type); } -StapipVU1Program* StapipQBufferRenderer::getCullProgramByType( - const StapipProgramType& programType) { - if (programType == StapipVU1TextureDirLights) - return getProgramByName(StapipCullTextureDirLights); - else if (programType == StapipVU1DirLights) - return getProgramByName(StapipCullDirLights); - else if (programType == StapipVU1TextureColor) - return getProgramByName(StapipCullTextureColor); +StaPipVU1Program* StaPipQBufferRenderer::getCullProgramByType( + const StaPipProgramType& programType) { + if (programType == StaPipVU1TextureDirLights) + return getProgramByName(StaPipCullTextureDirLights); + else if (programType == StaPipVU1DirLights) + return getProgramByName(StaPipCullDirLights); + else if (programType == StaPipVU1TextureColor) + return getProgramByName(StaPipCullTextureColor); else - return getProgramByName(StapipCullColor); + return getProgramByName(StaPipCullColor); } -StapipProgramType StapipQBufferRenderer::getDrawProgramTypeByBag( - const StapipBag* bag) const { +StaPipProgramType StaPipQBufferRenderer::getDrawProgramTypeByBag( + const StaPipBag* bag) const { auto isLightingEnabled = bag->lighting != nullptr; auto isTextureEnabled = bag->texture != nullptr; return getDrawProgramTypeByParams(isLightingEnabled, isTextureEnabled); } -StapipProgramType StapipQBufferRenderer::getDrawProgramTypeByParams( +StaPipProgramType StaPipQBufferRenderer::getDrawProgramTypeByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) const { if (isLightingEnabled && isTextureEnabled) - return StapipVU1TextureDirLights; + return StaPipVU1TextureDirLights; else if (isLightingEnabled) - return StapipVU1DirLights; + return StaPipVU1DirLights; else if (isTextureEnabled) - return StapipVU1TextureColor; + return StaPipVU1TextureColor; else - return StapipVU1Color; + return StaPipVU1Color; } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp index 32f80a1..cceea14 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp @@ -12,7 +12,7 @@ namespace Tyra { -StapipVU1Program::StapipVU1Program(const StapipProgramName& t_name, +StaPipVU1Program::StaPipVU1Program(const StaPipProgramName& t_name, u32* t_start, u32* t_end, const u32& t_reglist, const u8& t_reglistCount, @@ -26,21 +26,21 @@ StapipVU1Program::StapipVU1Program(const StapipProgramName& t_name, programSize = calculateProgramSize(); } -StapipVU1Program::~StapipVU1Program() {} +StaPipVU1Program::~StaPipVU1Program() {} -const StapipProgramName& StapipVU1Program::getName() const { return name; } +const StaPipProgramName& StaPipVU1Program::getName() const { return name; } -u32& StapipVU1Program::getReglist() { return reglist; } +u32& StaPipVU1Program::getReglist() { return reglist; } -void StapipVU1Program::addBufferDataToPacket(packet2_t* packet, - StapipQBuffer* buffer, +void StaPipVU1Program::addBufferDataToPacket(packet2_t* packet, + StaPipQBuffer* buffer, prim_t* prim) { addStandardBufferDataToPacket(packet, buffer, prim); addProgramQBufferDataToPacket(packet, buffer); } -void StapipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, - StapipQBuffer* buffer, +void StaPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, + StaPipQBuffer* buffer, prim_t* prim) { if (buffer->bag->texture) prim->mapping = 1; @@ -61,7 +61,7 @@ void StapipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, packet2_utils_vu_close_unpack(packet); } -u16 StapipVU1Program::getMaxVertCount(const bool& singleColorEnabled, +u16 StaPipVU1Program::getMaxVertCount(const bool& singleColorEnabled, const u16& bufferSize) const { u16 res = bufferSize - 4; u8 colorElementsPerVertex = diff --git a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp index ca6936d..5da1095 100644 --- a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp @@ -22,26 +22,26 @@ namespace Tyra { -StapipelineCore::StapipelineCore() { maxVertCount = 0; } +StaPipelineCore::StaPipelineCore() { maxVertCount = 0; } -StapipelineCore::~StapipelineCore() {} +StaPipelineCore::~StaPipelineCore() {} -void StapipelineCore::init(RendererCore* t_core) { +void StaPipelineCore::init(RendererCore* t_core) { rendererCore = t_core; qbufferRenderer.init(t_core); packager.init(&rendererCore->renderer3D.frustumPlanes); } -void StapipelineCore::reinitStandardVU1Programs() { +void StaPipelineCore::reinitStandardVU1Programs() { qbufferRenderer.reinitVU1(); } -u32 StapipelineCore::getMaxVertCountByBag(const StapipBag* bag) { +u32 StaPipelineCore::getMaxVertCountByBag(const StaPipBag* bag) { return qbufferRenderer.getCullProgramByBag(bag)->getMaxVertCount( bag->color->many == nullptr, qbufferRenderer.getBufferSize()); } -u32 StapipelineCore::getMaxVertCountByParams(const bool& isSingleColor, +u32 StaPipelineCore::getMaxVertCountByParams(const bool& isSingleColor, const bool& isLightingEnabled, const bool& isTextureEnabled) { return qbufferRenderer @@ -49,7 +49,7 @@ u32 StapipelineCore::getMaxVertCountByParams(const bool& isSingleColor, ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); } -void StapipelineCore::render(StapipBag* bag, StapipBagPackagesBBox* bbox) { +void StaPipelineCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { if (bag->count <= 0) return; TYRA_ASSERT(bag->vertices != nullptr, @@ -71,7 +71,7 @@ void StapipelineCore::render(StapipBag* bag, StapipBagPackagesBBox* bbox) { !bag->texture || (bag->texture->texture && bag->texture->coordinates), "If you want texture, please provide texture and coordinates!"); - StapipBagPackagesBBox* renderBbox; + StaPipBagPackagesBBox* renderBbox; u32 maxVertCount = getMaxVertCountByBag(bag); @@ -79,7 +79,7 @@ void StapipelineCore::render(StapipBag* bag, StapipBagPackagesBBox* bbox) { if (!bbox) renderBbox = - new StapipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); + new StaPipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); else renderBbox = bbox; @@ -141,7 +141,7 @@ void StapipelineCore::render(StapipBag* bag, StapipBagPackagesBBox* bbox) { Verbose("Render finished"); } -void StapipelineCore::renderPkgs(StapipBagPackage* packages, u16 count) { +void StaPipelineCore::renderPkgs(StaPipBagPackage* packages, u16 count) { for (u16 i = 0; i < count; i++) { if (packages[i].isInFrustum == IN_FRUSTUM) { Verbose(i, " - package in frustum -> cull"); @@ -161,7 +161,7 @@ void StapipelineCore::renderPkgs(StapipBagPackage* packages, u16 count) { } } -void StapipelineCore::renderSubpkgs(StapipBagPackage* subpkgs, u16 count) { +void StaPipelineCore::renderSubpkgs(StaPipBagPackage* subpkgs, u16 count) { std::vector doneIndexes; std::vector loadedIndexes; @@ -218,7 +218,7 @@ void StapipelineCore::renderSubpkgs(StapipBagPackage* subpkgs, u16 count) { } } -void StapipelineCore::setMaxVertCount(const u32& count) { +void StaPipelineCore::setMaxVertCount(const u32& count) { maxVertCount = count; packager.setMaxVertCount(count); qbufferRenderer.setMaxVertCount(count); diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 87a2e33..834edf4 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -12,18 +12,18 @@ namespace Tyra { -Stapipeline::Stapipeline() { colorsCache = new Vec4[4]; } +StaticPipeline::StaticPipeline() { colorsCache = new Vec4[4]; } -Stapipeline::~Stapipeline() { delete[] colorsCache; } +StaticPipeline::~StaticPipeline() { delete[] colorsCache; } -void Stapipeline::init(RendererCore* t_core) { +void StaticPipeline::init(RendererCore* t_core) { rendererCore = t_core; core.init(t_core); } -void Stapipeline::onUse() { core.reinitStandardVU1Programs(); } +void StaticPipeline::onUse() { core.reinitStandardVU1Programs(); } -void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { +void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); MeshFrame* frameFrom = mesh->getFramesCount() > 0 @@ -49,7 +49,7 @@ void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { // material->isSingleColorActivated(), material->getNormalFaces(), // material->getTextureCoordFaces()); - StapipBag bag; + StaPipBag bag; addVertices(mesh, material, &bag, frameFrom, frameTo); bag.info = infoBag; bag.color = getColorBag(mesh, material, frameFrom, frameTo); @@ -65,9 +65,9 @@ void Stapipeline::render(DynamicMesh* mesh, const StapipOptions* options) { delete infoBag; } -void Stapipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, - StapipBag* bag, MeshFrame* frameFrom, - MeshFrame* frameTo) const { +void StaticPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, + StaPipBag* bag, MeshFrame* frameFrom, + MeshFrame* frameTo) const { bag->count = material->getFacesCount(); bag->vertices = new Vec4[bag->count]; @@ -83,10 +83,10 @@ void Stapipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, } } -StapipInfoBag* Stapipeline::getInfoBag(DynamicMesh* mesh, - const StapipOptions* options, - M4x4* model) const { - auto* result = new StapipInfoBag(); +StaPipInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, + const StaPipOptions* options, + M4x4* model) const { + auto* result = new StaPipInfoBag(); if (options) { result->antiAliasingEnabled = options->antiAliasingEnabled; @@ -96,7 +96,7 @@ StapipInfoBag* Stapipeline::getInfoBag(DynamicMesh* mesh, } else { result->antiAliasingEnabled = false; result->blendingEnabled = true; - result->shadingType = StapipShadingFlat; + result->shadingType = StaPipShadingFlat; result->noClipChecks = true; } @@ -105,11 +105,11 @@ StapipInfoBag* Stapipeline::getInfoBag(DynamicMesh* mesh, return result; } -StapipColorBag* Stapipeline::getColorBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) const { - auto* result = new StapipColorBag(); +StaPipColorBag* StaticPipeline::getColorBag(DynamicMesh* mesh, + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) const { + auto* result = new StaPipColorBag(); if (material->isSingleColorActivated()) { result->single = &material->singleColor; @@ -133,13 +133,13 @@ StapipColorBag* Stapipeline::getColorBag(DynamicMesh* mesh, return result; } -StapipTextureBag* Stapipeline::getTextureBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) { +StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) { if (!material->getTextureCoordFaces()) return nullptr; - auto* result = new StapipTextureBag(); + auto* result = new StaPipTextureBag(); result->texture = rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); @@ -163,15 +163,15 @@ StapipTextureBag* Stapipeline::getTextureBag(DynamicMesh* mesh, return result; } -StapipLightingBag* Stapipeline::getLightingBag( +StaPipLightingBag* StaticPipeline::getLightingBag( DynamicMesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, - const StapipOptions* options) const { + const StaPipOptions* options) const { if (!material->getNormalFaces() || options == nullptr || options->lighting == nullptr) return nullptr; - auto* result = new StapipLightingBag(true); + auto* result = new StaPipLightingBag(true); result->lightMatrix = model; result->setLightsManually(colorsCache, @@ -193,8 +193,8 @@ StapipLightingBag* Stapipeline::getLightingBag( return result; } -void Stapipeline::setLightingColorsCache( - StapipLightingOptions* lightingOptions) { +void StaticPipeline::setLightingColorsCache( + StaPipLightingOptions* lightingOptions) { for (int i = 0; i < 3; i++) { colorsCache[i] = reinterpret_cast(lightingOptions->directionalColors[i]); @@ -202,8 +202,8 @@ void Stapipeline::setLightingColorsCache( colorsCache[3] = reinterpret_cast(*lightingOptions->ambientColor); } -void Stapipeline::deallocDrawBags(StapipBag* bag, - MeshMaterial* material) const { +void StaticPipeline::deallocDrawBags(StaPipBag* bag, + MeshMaterial* material) const { if (bag->color->many) { delete[] bag->color->many; } diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index e776d72..8d62c75 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -39,8 +39,8 @@ class H4570 : public Game { Vec4 cameraPosition, cameraLookAt; MinecraftPipeline mcPip; - Stapipeline stapip; - StapipOptions* renderOptions; + StaticPipeline stapip; + StaPipOptions* renderOptions; Texture* blocksTex; u32 blocksCount; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 9c0dfc6..b0a0ece 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -18,7 +18,7 @@ H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} DynamicMesh* getWarrior(Renderer* renderer); -StapipOptions* getRenderingOptions(); +StaPipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); void H4570::init() { @@ -179,8 +179,8 @@ Sprite* get2DPicture(Renderer* renderer) { return sprite; } -StapipOptions* getRenderingOptions() { - auto* options = new StapipOptions(); +StaPipOptions* getRenderingOptions() { + auto* options = new StaPipOptions(); auto* ambientColor = new Color(32.0F, 32.0F, 32.0F, 32.0F); auto* directionalColors = new Color[3]; @@ -189,12 +189,12 @@ StapipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StapipLightingOptions(); // Memory leak! + auto* lightingOptions = new StaPipLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StapipShadingGouraud; + options->shadingType = Tyra::StaPipShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; diff --git a/samples/wellinator/inc/wellinator.hpp b/samples/wellinator/inc/wellinator.hpp index faa0f49..ed115e3 100644 --- a/samples/wellinator/inc/wellinator.hpp +++ b/samples/wellinator/inc/wellinator.hpp @@ -36,8 +36,8 @@ class Wellinator : public Game { Vec4 cameraPosition, cameraLookAt; MinecraftPipeline mcPip; - Stapipeline stapip; - StapipOptions* renderOptions; + StaticPipeline stapip; + StaPipOptions* renderOptions; Texture* blocksTex; u32 blocksCount; diff --git a/samples/wellinator/src/wellinator.cpp b/samples/wellinator/src/wellinator.cpp index f47ecae..05482e6 100644 --- a/samples/wellinator/src/wellinator.cpp +++ b/samples/wellinator/src/wellinator.cpp @@ -18,7 +18,7 @@ Wellinator::Wellinator(Engine* t_engine) { engine = t_engine; } Wellinator::~Wellinator() {} DynamicMesh* getWarrior(Renderer* renderer); -StapipOptions* getRenderingOptions(); +StaPipOptions* getRenderingOptions(); Sprite* get2DPicture(Renderer* renderer); void Wellinator::init() { @@ -150,8 +150,8 @@ Sprite* get2DPicture(Renderer* renderer) { return sprite; } -StapipOptions* getRenderingOptions() { - auto* options = new StapipOptions(); +StaPipOptions* getRenderingOptions() { + auto* options = new StaPipOptions(); auto* ambientColor = new Color(32.0F, 32.0F, 32.0F, 128.0F); auto* directionalColors = new Color[3]; @@ -160,12 +160,12 @@ StapipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StapipLightingOptions(); // Memory leak! + auto* lightingOptions = new StaPipLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StapipShadingGouraud; + options->shadingType = Tyra::StaPipShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; From a5e1a2816469904b3e83e3c0572a4f71f012bb57 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 22:42:14 +0200 Subject: [PATCH 08/33] dynpip files --- .../pipeline/dynamic/dynpip_program_name.hpp | 24 ++++++ .../dynamic/dynpip_programs_repository.hpp | 37 ++++++++ .../3d/pipeline/dynamic/dynpip_qbuffer.hpp | 21 +++++ .../pipeline/dynamic/dynpip_vu1_program.hpp | 50 +++++++++++ .../programs/dynpip_c_vu1_program.hpp} | 11 +-- .../dynamic/programs/dynpip_d_vu1_program.hpp | 29 +++++++ .../programs/dynpip_tc_vu1_program.hpp | 29 +++++++ .../programs/dynpip_td_vu1_program.hpp | 29 +++++++ .../programs/dynpip_vu1_shared_defines.h | 24 ++++++ .../minecraft/programs/as_is/mcpip_clip.hpp | 16 ++-- .../bag/packaging/stapip_bag_packager.hpp | 2 +- .../pipeline/static/core/stapip_clipper.hpp | 8 +- .../static/core/stapip_program_name.hpp | 2 +- .../core/stapip_programs_repository.hpp | 11 +-- .../clipper/ee_clip_algorithm.hpp} | 26 +++--- .../clipper/ee_clip_vertex.hpp} | 2 +- .../dynamic/dynpip_programs_repository.cpp | 37 ++++++++ .../3d/pipeline/dynamic/dynpip_qbuffer.cpp | 21 +++++ .../pipeline/dynamic/dynpip_vu1_program.cpp | 86 +++++++++++++++++++ .../programs/as_is/mcpip_as_is_vu1.vclpp | 2 +- .../minecraft/programs/as_is/mcpip_clip.cpp | 10 +-- .../programs/cull/mcpip_cull_vu1.vclpp | 2 +- .../pipeline/shared_macros}/tyra_macros.i | 0 .../pipeline/shared_macros}/vcl_sml.i | 0 .../programs/as_is/stapip_as_is_c_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_d_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_tc_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_td_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_c_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_d_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_tc_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_td_vu1.vclpp | 4 +- .../pipeline/static/core/stapip_clipper.cpp | 20 ++--- .../core/stapip_programs_repository.cpp | 10 +-- .../static/core/stapip_qbuffer_renderer.cpp | 4 +- .../clipper/ee_clip_algorithm.cpp} | 36 ++++---- .../programs/draw_finish/draw_finish.vclpp | 45 ---------- .../programs/draw_finish/vu1_draw_finish.cpp | 37 -------- 38 files changed, 481 insertions(+), 182 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp rename engine/inc/renderer/{core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp => 3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp} (60%) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h rename engine/inc/renderer/core/{paths/path1/clipper/path1_ee_clip_algorithm.hpp => 3d/clipper/ee_clip_algorithm.hpp} (54%) rename engine/inc/renderer/core/{paths/path1/clipper/path1_clip_vertex.hpp => 3d/clipper/ee_clip_vertex.hpp} (94%) create mode 100644 engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp rename engine/src/renderer/{core/paths/path1/programs => 3d/pipeline/shared_macros}/tyra_macros.i (100%) rename engine/src/renderer/{core/paths/path1/programs => 3d/pipeline/shared_macros}/vcl_sml.i (100%) rename engine/src/renderer/core/{paths/path1/clipper/path1_ee_clip_algorithm.cpp => 3d/clipper/ee_clip_algorithm.cpp} (70%) delete mode 100644 engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp delete mode 100644 engine/src/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.cpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp new file mode 100644 index 0000000..ee5a08a --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp @@ -0,0 +1,24 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +namespace Tyra { + +enum DynPipProgramName { + DynPipUndefinedProgram, + + DynPipColor, + DynPipDirLights, + DynPipTextureDirLights, + DynPipTextureColor, +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp new file mode 100644 index 0000000..6b7a442 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp @@ -0,0 +1,37 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "debug/debug.hpp" +#include "renderer/core/paths/path1/vu1_program.hpp" + +#include "./programs/dynpip_c_vu1_program.hpp" +#include "./programs/dynpip_d_vu1_program.hpp" +#include "./programs/dynpip_td_vu1_program.hpp" +#include "./programs/dynpip_tc_vu1_program.hpp" + +namespace Tyra { + +class DynPipProgramsRepository { + public: + DynPipProgramsRepository(); + ~DynPipProgramsRepository(); + + DynPipVU1Program* getProgram(const DynPipProgramName& name); + + private: + DynPipCVU1Program color; + DynPipDVU1Program dirLights; + DynPipTDVU1Program textureDirLights; + DynPipTCVU1Program textureColor; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp new file mode 100644 index 0000000..606ae99 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp @@ -0,0 +1,21 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +namespace Tyra { + +class DynPipQBuffer { + public: + DynPipQBuffer(); + ~DynPipQBuffer(); +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp new file mode 100644 index 0000000..054f862 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp @@ -0,0 +1,50 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "./dynpip_program_name.hpp" +#include "renderer/core/paths/path1/vu1_program.hpp" +#include "./programs/dynpip_vu1_shared_defines.h" +#include "./dynpip_qbuffer.hpp" + +namespace Tyra { + +class DynPipVU1Program : public VU1Program { + public: + DynPipVU1Program(const DynPipProgramName& name, u32* start, u32* end, + const u32& t_reglist, const u8& t_reglistCount, + const u8& t_elementsPerVertex); + ~DynPipVU1Program(); + + u32& getReglist(); + + const DynPipProgramName& getName() const; + + u16 getMaxVertCount(const bool& singleColorEnabled, + const u16& vu1DBufferSize) const; + + void addBufferDataToPacket(packet2_t* packet, DynPipQBuffer* buffer, + prim_t* prim); + + protected: + DynPipProgramName name; + u8 reglistCount, elementsPerVertex; + u32 destinationAddress, reglist; + + virtual void addProgramQBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* qbuffer) const = 0; + + private: + void addStandardBufferDataToPacket(packet2_t* packet, DynPipQBuffer* buffer, + prim_t* prim); +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp similarity index 60% rename from engine/inc/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp index 538549b..2a2aa07 100644 --- a/engine/inc/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp @@ -12,17 +12,18 @@ #include #include -#include "../../vu1_program.hpp" +#include "../dynpip_vu1_program.hpp" namespace Tyra { -class VU1DrawFinish : public VU1Program { +class DynPipCVU1Program : public DynPipVU1Program { public: - VU1DrawFinish(); - ~VU1DrawFinish(); + DynPipCVU1Program(); + ~DynPipCVU1Program(); std::string getStringName() const; - void addTag(packet2_t* packet, prim_t* prim) const; + void addProgramQBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* qbuffer) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp new file mode 100644 index 0000000..f74b531 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp @@ -0,0 +1,29 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "../dynpip_vu1_program.hpp" + +namespace Tyra { + +class DynPipDVU1Program : public DynPipVU1Program { + public: + DynPipDVU1Program(); + ~DynPipDVU1Program(); + + std::string getStringName() const; + void addProgramQBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* qbuffer) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp new file mode 100644 index 0000000..5cef343 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp @@ -0,0 +1,29 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "../dynpip_vu1_program.hpp" + +namespace Tyra { + +class DynPipTCVU1Program : public DynPipVU1Program { + public: + DynPipTCVU1Program(); + ~DynPipTCVU1Program(); + + std::string getStringName() const; + void addProgramQBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* qbuffer) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp new file mode 100644 index 0000000..192caab --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp @@ -0,0 +1,29 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "../dynpip_vu1_program.hpp" + +namespace Tyra { + +class DynPipTDVU1Program : public DynPipVU1Program { + public: + DynPipTDVU1Program(); + ~DynPipTDVU1Program(); + + std::string getStringName() const; + void addProgramQBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* qbuffer) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h new file mode 100644 index 0000000..fab2116 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h @@ -0,0 +1,24 @@ +// +// ______ ____ ___ +// | \/ ____| |___| +// | | | \ | | +//----------------------------------------------------------------------- +// Copyright 2022, tyra - https://github.com/h4570/tyra +// Licenced under Apache License 2.0 +// Sandro Sobczyński +// + +// Updated once per mesh +// #define VU1_MVP_MATRIX_ADDR 0 +// #define VU1_LIGHTS_MATRIX_ADDR 4 +// #define VU1_SINGLE_COLOR_ADDR 7 +// #define VU1_OPTIONS_ADDR 8 +// #define VU1_LOD_ADDR 9 +// #define VU1_CLUT_ADDR 10 +// #define VU1_LIGHTS_DIRS_ADDR 11 +// #define VU1_LIGHTS_COLORS_ADDR 14 +// #define VU1_SET_GIFTAG_ADDR 18 +// #define VU1_LAST_ITEM_ADDR 18 + +// Buffer data (xtop) +// #define VU1_VERT_DATA_ADDR 2 diff --git a/engine/inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.hpp b/engine/inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.hpp index 17ef516..b3b9d1c 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.hpp @@ -18,7 +18,7 @@ #include "../../mcpip_block.hpp" #include "../../data/mcpip_block_data.hpp" #include "./mcpip_vu1_as_is_shared_defines.h" -#include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" +#include "renderer/core/3d/clipper/ee_clip_algorithm.hpp" namespace Tyra { @@ -27,8 +27,8 @@ class McpipClip { McpipClip(); ~McpipClip(); - Path1EEClipAlgorithm algorithm; - Path1EEClipAlgorithmSettings algoSettings; + EEClipAlgorithm algorithm; + EEClipAlgorithmSettings algoSettings; void init(RendererCore* core, McpipBlockData* t_singleBlockData, McpipBlockData* t_multiBlockData); @@ -48,16 +48,14 @@ class McpipClip { packet2_t* staticPacket; u16 vu1DBufferSize; - std::vector clippedTriangle; - std::vector inputTriangle; + std::vector clippedTriangle; + std::vector inputTriangle; Vec4 vertexBuffers[2][108]; Vec4 texCoordBuffers[2][108]; - void addCorrections(std::vector* vertices, - McpipBlock* block); - void moveDataToBuffer(std::vector* vertices, - const u8& context); + void addCorrections(std::vector* vertices, McpipBlock* block); + void moveDataToBuffer(std::vector* vertices, const u8& context); void addDataToPacket(packet2_t* packet, const u8& context, McpipBlock* block, const int& count, RendererCoreTextureBuffers* texBuffers); diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp index 848bb9c..3c338e0 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.hpp @@ -12,7 +12,7 @@ #include "renderer/core/3d/bbox/core_bbox.hpp" #include "renderer/core/3d/renderer_3d_frustum_planes.hpp" -#include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" +#include "renderer/core/3d/clipper/ee_clip_algorithm.hpp" #include "./stapip_bag_packages_bbox.hpp" #include "./stapip_bag_package.hpp" #include "../stapip_bag.hpp" diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp index 79f9a4a..28ddd43 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_clipper.hpp @@ -14,7 +14,7 @@ #include "debug/debug.hpp" #include "./stapip_qbuffer.hpp" #include "renderer/renderer_settings.hpp" -#include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" +#include "renderer/core/3d/clipper/ee_clip_algorithm.hpp" namespace Tyra { @@ -36,11 +36,11 @@ class StaPipClipper { private: u32 maxVertCount; - Path1EEClipAlgorithm algorithm; + EEClipAlgorithm algorithm; M4x4* mvp; - void perspectiveDivide(std::vector* vertices); - void moveDataToBuffer(const std::vector& vertices, + void perspectiveDivide(std::vector* vertices); + void moveDataToBuffer(const std::vector& vertices, StaPipQBuffer* buffer); }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp index 363463e..cddf586 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_program_name.hpp @@ -13,7 +13,7 @@ namespace Tyra { enum StaPipProgramName { - StdipUndefinedProgram, + StaPipUndefinedProgram, StaPipCullColor, StaPipAsIsColor, diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp index 92550e1..1d6639e 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_programs_repository.hpp @@ -23,8 +23,6 @@ #include "./programs/cull/stapip_cull_td_vu1_program.hpp" #include "./programs/cull/stapip_cull_tc_vu1_program.hpp" -#include "renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp" - namespace Tyra { class StaPipProgramsRepository { @@ -37,13 +35,12 @@ class StaPipProgramsRepository { private: StaPipAsIsCVU1Program asIsColor; StaPipCullCVU1Program cullColor; - StaPipAsIsDVU1Program asIsLightingColor; - StaPipCullDVU1Program cullLightingColor; - StaPipAsIsTDVU1Program asIsLightingTextureColor; - StaPipCullTDVU1Program cullLightingTextureColor; + StaPipAsIsDVU1Program asIsDirLights; + StaPipCullDVU1Program cullDirLights; + StaPipAsIsTDVU1Program asIsTextureDirLights; + StaPipCullTDVU1Program cullTextureDirLights; StaPipAsIsTCVU1Program asIsTextureColor; StaPipCullTCVU1Program cullTextureColor; - VU1DrawFinish drawFinish; }; } // namespace Tyra diff --git a/engine/inc/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp b/engine/inc/renderer/core/3d/clipper/ee_clip_algorithm.hpp similarity index 54% rename from engine/inc/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp rename to engine/inc/renderer/core/3d/clipper/ee_clip_algorithm.hpp index bcca06c..631a76c 100644 --- a/engine/inc/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp +++ b/engine/inc/renderer/core/3d/clipper/ee_clip_algorithm.hpp @@ -11,42 +11,42 @@ #pragma once #include -#include "./path1_clip_vertex.hpp" +#include "./ee_clip_vertex.hpp" #include "debug/debug.hpp" #include "renderer/renderer_settings.hpp" namespace Tyra { -struct Path1EEClipAlgorithmSettings { +struct EEClipAlgorithmSettings { bool lerpNormals, lerpTexCoords, lerpColors; }; -class Path1EEClipAlgorithm { +class EEClipAlgorithm { public: - Path1EEClipAlgorithm(); - ~Path1EEClipAlgorithm(); + EEClipAlgorithm(); + ~EEClipAlgorithm(); void init(const RendererSettings& settings); - void clip(std::vector* o_vertices, - const std::vector& vertices, - const Path1EEClipAlgorithmSettings& settings); + void clip(std::vector* o_vertices, + const std::vector& vertices, + const EEClipAlgorithmSettings& settings); static float clipMargin; private: float halfWidth, halfHeight, near, far; - std::vector tempVertices; + std::vector tempVertices; - float getValueByPlane(const Path1ClipVertex& v, const int& plane); + float getValueByPlane(const EEClipVertex& v, const int& plane); bool isInside(const int& plane, const float& v, const float& w, const float& planeLimitValue); - void clipAgainstPlane(const std::vector& original, - std::vector* clipped, const int& plane, + void clipAgainstPlane(const std::vector& original, + std::vector* clipped, const int& plane, const float& planeLimitValue, - const Path1EEClipAlgorithmSettings& settings); + const EEClipAlgorithmSettings& settings); }; } // namespace Tyra diff --git a/engine/inc/renderer/core/paths/path1/clipper/path1_clip_vertex.hpp b/engine/inc/renderer/core/3d/clipper/ee_clip_vertex.hpp similarity index 94% rename from engine/inc/renderer/core/paths/path1/clipper/path1_clip_vertex.hpp rename to engine/inc/renderer/core/3d/clipper/ee_clip_vertex.hpp index f9d6f3c..b55dc7c 100644 --- a/engine/inc/renderer/core/paths/path1/clipper/path1_clip_vertex.hpp +++ b/engine/inc/renderer/core/3d/clipper/ee_clip_vertex.hpp @@ -14,7 +14,7 @@ namespace Tyra { -struct Path1ClipVertex { +struct EEClipVertex { Vec4 position, normal, st, color; }; diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp new file mode 100644 index 0000000..fca3f17 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp @@ -0,0 +1,37 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp" + +namespace Tyra { + +DynPipProgramsRepository::DynPipProgramsRepository() {} + +DynPipProgramsRepository::~DynPipProgramsRepository() {} + +DynPipVU1Program* DynPipProgramsRepository::getProgram( + const DynPipProgramName& name) { + switch (name) { + case DynPipProgramName::DynPipColor: + return &color; + case DynPipProgramName::DynPipDirLights: + return &dirLights; + case DynPipProgramName::DynPipTextureDirLights: + return &textureDirLights; + case DynPipProgramName::DynPipTextureColor: + return &textureColor; + + default: + TYRA_TRAP("Unknown VU1 program name"); + return &color; + } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp new file mode 100644 index 0000000..2537cc0 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp @@ -0,0 +1,21 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp" +#include +#include + +namespace Tyra { + +DynPipQBuffer::DynPipQBuffer() {} + +DynPipQBuffer::~DynPipQBuffer() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp new file mode 100644 index 0000000..dee0843 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp @@ -0,0 +1,86 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp" + +namespace Tyra { + +DynPipVU1Program::DynPipVU1Program(const DynPipProgramName& t_name, + u32* t_start, u32* t_end, + const u32& t_reglist, + const u8& t_reglistCount, + const u8& t_elementsPerVertex) + : VU1Program(t_start, t_end), + name(t_name), + reglistCount(t_reglistCount), + elementsPerVertex(t_elementsPerVertex), + reglist(t_reglist) { + packetSize = packet2_utils_get_packet_size_for_program(start, end); + programSize = calculateProgramSize(); +} + +DynPipVU1Program::~DynPipVU1Program() {} + +const DynPipProgramName& DynPipVU1Program::getName() const { return name; } + +u32& DynPipVU1Program::getReglist() { return reglist; } + +void DynPipVU1Program::addBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* buffer, + prim_t* prim) { + addStandardBufferDataToPacket(packet, buffer, prim); + addProgramQBufferDataToPacket(packet, buffer); +} + +void DynPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, + DynPipQBuffer* buffer, + prim_t* prim) { + // if (buffer->bag->texture) + // prim->mapping = 1; + // else + // prim->mapping = 0; + + // packet2_utils_vu_open_unpack(packet, 0, true); + // { + // packet2_add_float(packet, 2048.0F); // scale + // packet2_add_float(packet, 2048.0F); // scale + // packet2_add_float(packet, + // static_cast(0xFFFFFF) / 32.0F); // scale + // packet2_add_u32(packet, buffer->size); // vertex count + + // packet2_utils_gs_add_prim_giftag(packet, prim, buffer->size, reglist, + // reglistCount, 0); + // } + // packet2_utils_vu_close_unpack(packet); +} + +u16 DynPipVU1Program::getMaxVertCount(const bool& singleColorEnabled, + const u16& bufferSize) const { + return 0; // TODO + + // u16 res = bufferSize - 4; + // u8 colorElementsPerVertex = + // singleColorEnabled ? (elementsPerVertex - 1) : elementsPerVertex; + // res /= (colorElementsPerVertex + reglistCount); + + // // Buffer size = VU1 double buffer size (xtop) + // // res = qbuffer size (directly inside VU1) + + // // Must be dividable by 3 and the result also dividable by 3. Why? + // // 1st dividable reason - triangle, and packaging system in 3d rendering + // // 2nd dividable reason - subpackaging system. We are splitting packages + // into + // // 3 subpackages in 3d renderer. + // res = res / 3 / 3; + // res = res * 3 * 3; + // return res; +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp index a211973..7d89c7d 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp @@ -21,7 +21,7 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" #include "inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_vu1_as_is_shared_defines.h" #include "src/renderer/3d/pipeline/minecraft/programs/as_is/macros.i" diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.cpp index 40746df..a4e1075 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_clip.cpp @@ -57,15 +57,15 @@ void McpipClip::initStaticPacket() { void McpipClip::addData(McpipBlock* block, const bool& isMulti, RendererCoreTextureBuffers* texBuffers, packet2_t* packet, const u8& context) { - std::vector clippedVertices; + std::vector clippedVertices; auto mvp = rendererCore->renderer3D.getViewProj() * block->model; const auto* blockData = isMulti ? multiBlockData : singleBlockData; for (u32 i = 0; i < blockData->count / 3; i++) { for (u8 j = 0; j < 3; j++) { - Path1ClipVertex vert = {mvp * blockData->vertices[i * 3 + j], Vec4(), - blockData->textureCoords[i * 3 + j], Vec4()}; + EEClipVertex vert = {mvp * blockData->vertices[i * 3 + j], Vec4(), + blockData->textureCoords[i * 3 + j], Vec4()}; inputTriangle.push_back(vert); } @@ -93,7 +93,7 @@ void McpipClip::addData(McpipBlock* block, const bool& isMulti, addDataToPacket(packet, context, block, clippedVertices.size(), texBuffers); } -void McpipClip::addCorrections(std::vector* vertices, +void McpipClip::addCorrections(std::vector* vertices, McpipBlock* block) { for (u32 i = 0; i < vertices->size(); i++) { (*vertices)[i].position /= (*vertices)[i].position.w; // Perspective divide @@ -101,7 +101,7 @@ void McpipClip::addCorrections(std::vector* vertices, } } -void McpipClip::moveDataToBuffer(std::vector* vertices, +void McpipClip::moveDataToBuffer(std::vector* vertices, const u8& context) { for (u32 i = 0; i < vertices->size(); i++) { vertexBuffers[context][i].set(vertices->at(i).position); diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp index ea42007..2e71c13 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp @@ -21,7 +21,7 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" #include "inc/renderer/3d/pipeline/minecraft/programs/cull/mcpip_vu1_cull_shared_defines.h" #include "src/renderer/3d/pipeline/minecraft/programs/cull/macros.i" diff --git a/engine/src/renderer/core/paths/path1/programs/tyra_macros.i b/engine/src/renderer/3d/pipeline/shared_macros/tyra_macros.i similarity index 100% rename from engine/src/renderer/core/paths/path1/programs/tyra_macros.i rename to engine/src/renderer/3d/pipeline/shared_macros/tyra_macros.i diff --git a/engine/src/renderer/core/paths/path1/programs/vcl_sml.i b/engine/src/renderer/3d/pipeline/shared_macros/vcl_sml.i similarity index 100% rename from engine/src/renderer/core/paths/path1/programs/vcl_sml.i rename to engine/src/renderer/3d/pipeline/shared_macros/vcl_sml.i diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp index ea6ced3..a2a13c1 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp index 9e6a540..7f04ebd 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp index f21145b..0f30a7c 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp index b6fe30f..8c85a57 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp index 63c7d1e..7ea01a9 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp index 0e40535..0fae0e5 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp index d67c796..b73cf12 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp index 5377998..1f833a2 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp index 447d966..1bb847c 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_clipper.cpp @@ -27,16 +27,16 @@ void StaPipClipper::clip(StaPipQBuffer* buffer) { TYRA_ASSERT(buffer->size <= maxVertCount / 3, "Buffer should have max ", maxVertCount / 3, " verts if we want to clip it."); - Path1EEClipAlgorithmSettings algoSettings = { - buffer->bag->lighting != nullptr, buffer->bag->texture != nullptr, - buffer->bag->color->many != nullptr}; + EEClipAlgorithmSettings algoSettings = {buffer->bag->lighting != nullptr, + buffer->bag->texture != nullptr, + buffer->bag->color->many != nullptr}; - std::vector clippedVertices; + std::vector clippedVertices; for (u32 i = 0; i < buffer->size / 3; i++) { - std::vector inputTriangle; + std::vector inputTriangle; for (u8 j = 0; j < 3; j++) { - Path1ClipVertex vert = { + EEClipVertex vert = { *mvp * buffer->vertices[i * 3 + j], buffer->bag->lighting ? buffer->normals[i * 3 + j] : Vec4(), buffer->bag->texture ? buffer->sts[i * 3 + j] : Vec4(), @@ -45,7 +45,7 @@ void StaPipClipper::clip(StaPipQBuffer* buffer) { inputTriangle.push_back(vert); } - std::vector clippedTriangle; + std::vector clippedTriangle; algorithm.clip(&clippedTriangle, inputTriangle, algoSettings); if (clippedTriangle.size() == 0) continue; @@ -64,14 +64,14 @@ void StaPipClipper::clip(StaPipQBuffer* buffer) { moveDataToBuffer(clippedVertices, buffer); } -void StaPipClipper::perspectiveDivide(std::vector* vertices) { +void StaPipClipper::perspectiveDivide(std::vector* vertices) { for (u32 i = 0; i < vertices->size(); i++) { (*vertices)[i].position /= (*vertices)[i].position.w; } } -void StaPipClipper::moveDataToBuffer( - const std::vector& vertices, StaPipQBuffer* buffer) { +void StaPipClipper::moveDataToBuffer(const std::vector& vertices, + StaPipQBuffer* buffer) { buffer->reallocateManually(vertices.size()); for (u32 i = 0; i < vertices.size(); i++) { diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp index 1d30ebe..dcf5c72 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_programs_repository.cpp @@ -25,14 +25,14 @@ StaPipVU1Program* StaPipProgramsRepository::getProgram( return &cullColor; case StaPipProgramName::StaPipAsIsDirLights: - return &asIsLightingColor; + return &asIsDirLights; case StaPipProgramName::StaPipCullDirLights: - return &cullLightingColor; + return &cullDirLights; case StaPipProgramName::StaPipAsIsTextureDirLights: - return &asIsLightingTextureColor; + return &asIsTextureDirLights; case StaPipProgramName::StaPipCullTextureDirLights: - return &cullLightingTextureColor; + return &cullTextureDirLights; case StaPipProgramName::StaPipAsIsTextureColor: return &asIsTextureColor; @@ -41,7 +41,7 @@ StaPipVU1Program* StaPipProgramsRepository::getProgram( default: TYRA_TRAP("Unknown VU1 program name"); - return &cullLightingTextureColor; + return &cullTextureDirLights; } } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 704d4a4..c859392 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -36,7 +36,7 @@ namespace Tyra { StaPipQBufferRenderer::StaPipQBufferRenderer() { context = 0; - lastProgramName = StdipUndefinedProgram; + lastProgramName = StaPipUndefinedProgram; staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); programsPacket = nullptr; @@ -221,7 +221,7 @@ void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { } void StaPipQBufferRenderer::clearLastProgramName() { - lastProgramName = StdipUndefinedProgram; + lastProgramName = StaPipUndefinedProgram; } void StaPipQBufferRenderer::addBufferDataToPacket(StaPipVU1Program* program, diff --git a/engine/src/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.cpp b/engine/src/renderer/core/3d/clipper/ee_clip_algorithm.cpp similarity index 70% rename from engine/src/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.cpp rename to engine/src/renderer/core/3d/clipper/ee_clip_algorithm.cpp index c398efd..d5ed65d 100644 --- a/engine/src/renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.cpp +++ b/engine/src/renderer/core/3d/clipper/ee_clip_algorithm.cpp @@ -8,26 +8,26 @@ # Sandro Sobczyński */ -#include "renderer/core/paths/path1/clipper/path1_ee_clip_algorithm.hpp" +#include "renderer/core/3d/clipper/ee_clip_algorithm.hpp" namespace Tyra { -Path1EEClipAlgorithm::Path1EEClipAlgorithm() {} +EEClipAlgorithm::EEClipAlgorithm() {} -Path1EEClipAlgorithm::~Path1EEClipAlgorithm() {} +EEClipAlgorithm::~EEClipAlgorithm() {} -float Path1EEClipAlgorithm::clipMargin = -10.0F; +float EEClipAlgorithm::clipMargin = -10.0F; -void Path1EEClipAlgorithm::init(const RendererSettings& settings) { +void EEClipAlgorithm::init(const RendererSettings& settings) { halfWidth = settings.getWidth() / 2; halfHeight = settings.getHeight() / 2; near = settings.getNear() - (-clipMargin); far = -settings.getFar(); } -void Path1EEClipAlgorithm::clip(std::vector* o_vertices, - const std::vector& vertices, - const Path1EEClipAlgorithmSettings& settings) { +void EEClipAlgorithm::clip(std::vector* o_vertices, + const std::vector& vertices, + const EEClipAlgorithmSettings& settings) { tempVertices.clear(); for (u32 i = 0; i < vertices.size(); i++) { @@ -42,8 +42,8 @@ void Path1EEClipAlgorithm::clip(std::vector* o_vertices, clipAgainstPlane(tempVertices, o_vertices, 4, far, settings); } -float Path1EEClipAlgorithm::getValueByPlane(const Path1ClipVertex& v, - const int& plane) { +float EEClipAlgorithm::getValueByPlane(const EEClipVertex& v, + const int& plane) { switch (plane) { case 1: return v.position.x; // x plane @@ -57,9 +57,8 @@ float Path1EEClipAlgorithm::getValueByPlane(const Path1ClipVertex& v, } } -bool Path1EEClipAlgorithm::isInside(const int& plane, const float& v, - const float& w, - const float& planeLimitValue) { +bool EEClipAlgorithm::isInside(const int& plane, const float& v, const float& w, + const float& planeLimitValue) { switch (plane) { case 3: return v <= planeLimitValue; // near z plane @@ -71,11 +70,10 @@ bool Path1EEClipAlgorithm::isInside(const int& plane, const float& v, } } -void Path1EEClipAlgorithm::clipAgainstPlane( - const std::vector& original, - std::vector* clipped, const int& plane, - const float& planeLimitValue, - const Path1EEClipAlgorithmSettings& settings) { +void EEClipAlgorithm::clipAgainstPlane( + const std::vector& original, + std::vector* clipped, const int& plane, + const float& planeLimitValue, const EEClipAlgorithmSettings& settings) { clipped->clear(); for (u32 i = 0; i < original.size(); i++) { @@ -98,7 +96,7 @@ void Path1EEClipAlgorithm::clipAgainstPlane( ((b.position.w - a.position.w) * planeLimitValue - (bpx - apx)); - Path1ClipVertex nb = { + EEClipVertex nb = { Vec4::getByLerp(a.position, b.position, p), settings.lerpNormals ? Vec4::getByLerp(a.normal, b.normal, p) : Vec4(), diff --git a/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp b/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp deleted file mode 100644 index 25f5458..0000000 --- a/engine/src/renderer/core/paths/path1/programs/draw_finish/draw_finish.vclpp +++ /dev/null @@ -1,45 +0,0 @@ -; ______ ____ ___ -; | \/ ____| |___| -; | | | \ | | -;--------------------------------------------------------------- -; Copyright 2022, tyra - https://github.com/h4570/tyra -; Licenced under Apache License 2.0 -; Sandro Sobczyński -; -;--------------------------------------------------------------- -; Needed for synchronization with draw_wait_finish() -;--------------------------------------------------------------- - -.syntax new -.name VU1DrawFinish -.vu -.init_vf_all -.init_vi_all - -#include "src/renderer/core/paths/path1/programs/vcl_sml.i" -#include "src/renderer/core/paths/path1/programs/tyra_macros.i" -#include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" - ---enter ---endenter - -#vuprog VU1DrawFinish - - LoadTyraStaticData{ gifSetTag } - - xtop buffer - lq drawFinishTag, 0(buffer) - lq primTag, 1(buffer) - - iaddiu kickAddress, buffer, 2 - - sq gifSetTag, 0(kickAddress) - sq drawFinishTag, 1(kickAddress) - sq primTag, 2(kickAddress) - - xgkick kickAddress - -#endvuprog - ---exit ---endexit diff --git a/engine/src/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.cpp b/engine/src/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.cpp deleted file mode 100644 index 76cd2e0..0000000 --- a/engine/src/renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#include "debug/debug.hpp" -#include "renderer/core/paths/path1/programs/draw_finish/vu1_draw_finish.hpp" - -extern u32 VU1DrawFinish_CodeStart __attribute__((section(".vudata"))); -extern u32 VU1DrawFinish_CodeEnd __attribute__((section(".vudata"))); - -namespace Tyra { - -VU1DrawFinish::VU1DrawFinish() - : VU1Program(&VU1DrawFinish_CodeStart, &VU1DrawFinish_CodeEnd) {} - -VU1DrawFinish::~VU1DrawFinish() {} - -std::string VU1DrawFinish::getStringName() const { - return std::string("Draw finish"); -} - -void VU1DrawFinish::addTag(packet2_t* packet, prim_t* prim) const { - packet2_utils_vu_open_unpack(packet, 0, true); - packet2_utils_gs_add_draw_finish_giftag(packet); - packet2_utils_gs_add_prim_giftag( - packet, prim, 1, ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, - 0); - packet2_utils_vu_close_unpack(packet); -} - -} // namespace Tyra From 9850028811b557d81db77acb88b736357a90ce2a Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 22:52:05 +0200 Subject: [PATCH 09/33] dynpip programs --- .../dynamic/programs/dynpip_c_vu1.vclpp | 39 +++++++++++++ .../dynamic/programs/dynpip_c_vu1_program.cpp | 46 +++++++++++++++ .../dynamic/programs/dynpip_d_vu1.vclpp | 39 +++++++++++++ .../dynamic/programs/dynpip_d_vu1_program.cpp | 51 ++++++++++++++++ .../dynamic/programs/dynpip_tc_vu1.vclpp | 40 +++++++++++++ .../programs/dynpip_tc_vu1_program.cpp | 53 +++++++++++++++++ .../dynamic/programs/dynpip_td_vu1.vclpp | 40 +++++++++++++ .../programs/dynpip_td_vu1_program.cpp | 58 +++++++++++++++++++ .../as_is/mcpip_as_is_vu1_program.cpp | 2 +- .../programs/cull/mcpip_cull_vu1_program.cpp | 2 +- .../as_is/stapip_as_is_c_vu1_program.cpp | 2 +- .../as_is/stapip_as_is_d_vu1_program.cpp | 2 +- .../as_is/stapip_as_is_tc_vu1_program.cpp | 2 +- .../as_is/stapip_as_is_td_vu1_program.cpp | 2 +- .../programs/cull/stapip_cull_c_vu1.vclpp | 2 +- .../cull/stapip_cull_c_vu1_program.cpp | 2 +- .../cull/stapip_cull_d_vu1_program.cpp | 2 +- .../cull/stapip_cull_tc_vu1_program.cpp | 2 +- .../cull/stapip_cull_td_vu1_program.cpp | 2 +- 19 files changed, 377 insertions(+), 11 deletions(-) create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp new file mode 100644 index 0000000..0fce4aa --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp @@ -0,0 +1,39 @@ +; ______ ____ ___ +; | \/ ____| |___| +; | | | \ | | +;--------------------------------------------------------------- +; Copyright 2022, tyra - https://github.com/h4570/tyra +; Licenced under Apache License 2.0 +; Sandro Sobczyński +; +;--------------------------------------------------------------- +; Triangle list +; Cull = Standard PS2 way. clipw polys are culled. +; Animation +; Colors +;--------------------------------------------------------------- + +.syntax new +.name DynPipVU1_C +.vu +.init_vf_all +.init_vi_all + +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" + +#define RGBA_STORE_OFFSET 0 +#define XYZ2_STORE_OFFSET 1 + +--enter +--endenter + +#vuprog DynPipVU1C + +--cont + +#endvuprog + +--exit +--endexit diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp new file mode 100644 index 0000000..1c6089b --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp @@ -0,0 +1,46 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "debug/debug.hpp" +#include "renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp" + +extern u32 DynPipVU1_C_CodeStart __attribute__((section(".vudata"))); +extern u32 DynPipVU1_C_CodeEnd __attribute__((section(".vudata"))); + +namespace Tyra { + +DynPipCVU1Program::DynPipCVU1Program() + : DynPipVU1Program( + DynPipColor, &DynPipVU1_C_CodeStart, &DynPipVU1_C_CodeEnd, + ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} + +DynPipCVU1Program::~DynPipCVU1Program() {} + +std::string DynPipCVU1Program::getStringName() const { + return std::string("DynPip - C"); +} + +void DynPipCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, DynPipQBuffer* qbuffer) const { + // u32 addr = VU1_VERT_DATA_ADDR; + + // // Add vertices + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, + // qbuffer->size, true); + + // // Add colors + // if (qbuffer->bag->color->single == nullptr) { + // addr += qbuffer->size; + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, + // qbuffer->size, true); + // } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp new file mode 100644 index 0000000..4a05c78 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp @@ -0,0 +1,39 @@ +; ______ ____ ___ +; | \/ ____| |___| +; | | | \ | | +;--------------------------------------------------------------- +; Copyright 2022, tyra - https://github.com/h4570/tyra +; Licenced under Apache License 2.0 +; Sandro Sobczyński +; +;--------------------------------------------------------------- +; Triangle list +; Cull = Standard PS2 way. clipw polys are culled. +; Animation +; Directional lights +;--------------------------------------------------------------- + +.syntax new +.name DynPipVU1_D +.vu +.init_vf_all +.init_vi_all + +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" + +#define RGBA_STORE_OFFSET 0 +#define XYZ2_STORE_OFFSET 1 + +--enter +--endenter + +#vuprog DynPipVU1D + + --cont + +#endvuprog + +--exit +--endexit diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp new file mode 100644 index 0000000..a551212 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp @@ -0,0 +1,51 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "debug/debug.hpp" +#include "renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp" + +extern u32 DynPipVU1_D_CodeStart __attribute__((section(".vudata"))); +extern u32 DynPipVU1_D_CodeEnd __attribute__((section(".vudata"))); + +namespace Tyra { + +DynPipDVU1Program::DynPipDVU1Program() + : DynPipVU1Program( + DynPipDirLights, &DynPipVU1_D_CodeStart, &DynPipVU1_D_CodeEnd, + ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} + +DynPipDVU1Program::~DynPipDVU1Program() {} + +std::string DynPipDVU1Program::getStringName() const { + return std::string("DynPip - D"); +} + +void DynPipDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, DynPipQBuffer* qbuffer) const { + // u32 addr = VU1_VERT_DATA_ADDR; + + // // Add vertices + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, + // qbuffer->size, true); + // addr += qbuffer->size; + + // // Add normal + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normals, + // qbuffer->size, true); + + // // Add colors + // if (qbuffer->bag->color->single == nullptr) { + // addr += qbuffer->size; + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, + // qbuffer->size, true); + // } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp new file mode 100644 index 0000000..e01494f --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp @@ -0,0 +1,40 @@ +; ______ ____ ___ +; | \/ ____| |___| +; | | | \ | | +;--------------------------------------------------------------- +; Copyright 2022, tyra - https://github.com/h4570/tyra +; Licenced under Apache License 2.0 +; Sandro Sobczyński +; +;--------------------------------------------------------------- +; Triangle list +; Cull = Standard PS2 way. clipw polys are culled. +; Animation +; Lighting, texture, colors +;--------------------------------------------------------------- + +.syntax new +.name DynPipVU1_TC +.vu +.init_vf_all +.init_vi_all + +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" + +#define STQ_STORE_OFFSET 0 +#define RGBA_STORE_OFFSET 1 +#define XYZ2_STORE_OFFSET 2 + +--enter +--endenter + +#vuprog DynPipVU1TC + +--cont + +#endvuprog + +--exit +--endexit diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp new file mode 100644 index 0000000..790dead --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp @@ -0,0 +1,53 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "debug/debug.hpp" +#include "renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp" + +extern u32 DynPipVU1_TC_CodeStart __attribute__((section(".vudata"))); +extern u32 DynPipVU1_TC_CodeEnd __attribute__((section(".vudata"))); + +namespace Tyra { + +DynPipTCVU1Program::DynPipTCVU1Program() + : DynPipVU1Program(DynPipTextureColor, &DynPipVU1_TC_CodeStart, + &DynPipVU1_TC_CodeEnd, + ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | + ((u64)GIF_REG_XYZ2) << 8, + 3, 3) {} + +DynPipTCVU1Program::~DynPipTCVU1Program() {} + +std::string DynPipTCVU1Program::getStringName() const { + return std::string("DynPip - TC"); +} + +void DynPipTCVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, DynPipQBuffer* qbuffer) const { + // u32 addr = VU1_VERT_DATA_ADDR; + + // // Add vertices + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, + // qbuffer->size, true); + // addr += qbuffer->size; + + // // Add sts + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->sts, qbuffer->size, + // true); + + // // Add colors + // if (qbuffer->bag->color->single == nullptr) { + // addr += qbuffer->size; + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, + // qbuffer->size, true); + // } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp new file mode 100644 index 0000000..8f46639 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp @@ -0,0 +1,40 @@ +; ______ ____ ___ +; | \/ ____| |___| +; | | | \ | | +;--------------------------------------------------------------- +; Copyright 2022, tyra - https://github.com/h4570/tyra +; Licenced under Apache License 2.0 +; Sandro Sobczyński +; +;--------------------------------------------------------------- +; Triangle list +; Cull = Standard PS2 way. clipw polys are culled. +; Animation +; Texture, directional lights +;--------------------------------------------------------------- + +.syntax new +.name DynPipVU1_TD +.vu +.init_vf_all +.init_vi_all + +#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" + +#define STQ_STORE_OFFSET 0 +#define RGBA_STORE_OFFSET 1 +#define XYZ2_STORE_OFFSET 2 + +--enter +--endenter + +#vuprog DynPipVU1TD + +--cont + +#endvuprog + +--exit +--endexit diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp new file mode 100644 index 0000000..50e206f --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp @@ -0,0 +1,58 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "debug/debug.hpp" +#include "renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp" + +extern u32 DynPipVU1_TD_CodeStart __attribute__((section(".vudata"))); +extern u32 DynPipVU1_TD_CodeEnd __attribute__((section(".vudata"))); + +namespace Tyra { + +DynPipTDVU1Program::DynPipTDVU1Program() + : DynPipVU1Program(DynPipTextureDirLights, &DynPipVU1_TD_CodeStart, + &DynPipVU1_TD_CodeEnd, + ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | + ((u64)GIF_REG_XYZ2) << 8, + 3, 4) {} + +DynPipTDVU1Program::~DynPipTDVU1Program() {} + +std::string DynPipTDVU1Program::getStringName() const { + return std::string("DynPip - TD"); +} + +void DynPipTDVU1Program::addProgramQBufferDataToPacket( + packet2_t* packet, DynPipQBuffer* qbuffer) const { + // u32 addr = VU1_VERT_DATA_ADDR; + + // // Add vertices + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, + // qbuffer->size, true); + // addr += qbuffer->size; + + // // Add sts + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->sts, qbuffer->size, + // true); + // addr += qbuffer->size; + + // // Add normal + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normals, + // qbuffer->size, true); + + // // Add colors + // if (qbuffer->bag->color->single == nullptr) { + // addr += qbuffer->size; + // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, + // qbuffer->size, true); + // } +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1_program.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1_program.cpp index 5d6c811..3796372 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1_program.cpp @@ -22,7 +22,7 @@ McpipAsIsVU1Program::McpipAsIsVU1Program() McpipAsIsVU1Program::~McpipAsIsVU1Program() {} std::string McpipAsIsVU1Program::getStringName() const { - return std::string("As is"); + return std::string("McPip - As is"); } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1_program.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1_program.cpp index 3ec49c9..f572427 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1_program.cpp @@ -22,7 +22,7 @@ McpipCullVU1Program::McpipCullVU1Program() McpipCullVU1Program::~McpipCullVU1Program() {} std::string McpipCullVU1Program::getStringName() const { - return std::string("Cull"); + return std::string("McPip - Cull"); } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp index 608a3c8..b10900a 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1_program.cpp @@ -25,7 +25,7 @@ StaPipAsIsCVU1Program::StaPipAsIsCVU1Program() StaPipAsIsCVU1Program::~StaPipAsIsCVU1Program() {} std::string StaPipAsIsCVU1Program::getStringName() const { - return std::string("As is - C"); + return std::string("StaPip - As is - C"); } void StaPipAsIsCVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp index b348ff4..ffd4552 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1_program.cpp @@ -25,7 +25,7 @@ StaPipAsIsDVU1Program::StaPipAsIsDVU1Program() StaPipAsIsDVU1Program::~StaPipAsIsDVU1Program() {} std::string StaPipAsIsDVU1Program::getStringName() const { - return std::string("As is - LC"); + return std::string("StaPip - As is - D"); } void StaPipAsIsDVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp index ccc8970..9ae6de8 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1_program.cpp @@ -26,7 +26,7 @@ StaPipAsIsTCVU1Program::StaPipAsIsTCVU1Program() StaPipAsIsTCVU1Program::~StaPipAsIsTCVU1Program() {} std::string StaPipAsIsTCVU1Program::getStringName() const { - return std::string("As is - TC"); + return std::string("StaPip - As is - TC"); } void StaPipAsIsTCVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp index 9127976..605c7d3 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1_program.cpp @@ -26,7 +26,7 @@ StaPipAsIsTDVU1Program::StaPipAsIsTDVU1Program() StaPipAsIsTDVU1Program::~StaPipAsIsTDVU1Program() {} std::string StaPipAsIsTDVU1Program::getStringName() const { - return std::string("As is - LTC"); + return std::string("StaPip - As is - TD"); } void StaPipAsIsTDVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp index 7ea01a9..b0dbeb0 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp @@ -9,7 +9,7 @@ ;--------------------------------------------------------------- ; Triangle list ; Cull = Standard PS2 way. clipw polys are culled. -; Volors +; Colors ;--------------------------------------------------------------- .syntax new diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp index 1870679..c8307aa 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1_program.cpp @@ -24,7 +24,7 @@ StaPipCullCVU1Program::StaPipCullCVU1Program() StaPipCullCVU1Program::~StaPipCullCVU1Program() {} std::string StaPipCullCVU1Program::getStringName() const { - return std::string("Cull - C"); + return std::string("StaPip - Cull - C"); } void StaPipCullCVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp index 68782d5..6e32177 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1_program.cpp @@ -25,7 +25,7 @@ StaPipCullDVU1Program::StaPipCullDVU1Program() StaPipCullDVU1Program::~StaPipCullDVU1Program() {} std::string StaPipCullDVU1Program::getStringName() const { - return std::string("Cull - LC"); + return std::string("StaPip - Cull - D"); } void StaPipCullDVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp index fb14961..9e5b1a5 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1_program.cpp @@ -26,7 +26,7 @@ StaPipCullTCVU1Program::StaPipCullTCVU1Program() StaPipCullTCVU1Program::~StaPipCullTCVU1Program() {} std::string StaPipCullTCVU1Program::getStringName() const { - return std::string("Cull - TC"); + return std::string("StaPip - Cull - TC"); } void StaPipCullTCVU1Program::addProgramQBufferDataToPacket( diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp index 9faa4f5..9e94207 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1_program.cpp @@ -26,7 +26,7 @@ StaPipCullTDVU1Program::StaPipCullTDVU1Program() StaPipCullTDVU1Program::~StaPipCullTDVU1Program() {} std::string StaPipCullTDVU1Program::getStringName() const { - return std::string("Cull - LTC"); + return std::string("StaPip - Cull - TD"); } void StaPipCullTDVU1Program::addProgramQBufferDataToPacket( From efdec2c52eee0a0f8edae5d133e49fadabfbb3df Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 23:01:12 +0200 Subject: [PATCH 10/33] max vert count --- .../pipeline/dynamic/dynpip_vu1_program.cpp | 27 +++++++++---------- .../static/core/stapip_vu1_program.cpp | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp index dee0843..958a012 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp @@ -63,24 +63,21 @@ void DynPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, u16 DynPipVU1Program::getMaxVertCount(const bool& singleColorEnabled, const u16& bufferSize) const { - return 0; // TODO + u16 res = bufferSize - 4; + u8 colorElementsPerVertex = + singleColorEnabled ? (elementsPerVertex - 1) : elementsPerVertex; + res /= (colorElementsPerVertex + reglistCount); - // u16 res = bufferSize - 4; - // u8 colorElementsPerVertex = - // singleColorEnabled ? (elementsPerVertex - 1) : elementsPerVertex; - // res /= (colorElementsPerVertex + reglistCount); + // Buffer size = VU1 double buffer size (xtop) + // QBufferSize = res (it is placed inside VU1) - // // Buffer size = VU1 double buffer size (xtop) - // // res = qbuffer size (directly inside VU1) + // Animation = 2 verts for final vert + res = res / 2; - // // Must be dividable by 3 and the result also dividable by 3. Why? - // // 1st dividable reason - triangle, and packaging system in 3d rendering - // // 2nd dividable reason - subpackaging system. We are splitting packages - // into - // // 3 subpackages in 3d renderer. - // res = res / 3 / 3; - // res = res * 3 * 3; - // return res; + // Triangle = 3 verts + res = res / 3; + res = res * 3; + return res; } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp index cceea14..04305ef 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_vu1_program.cpp @@ -69,7 +69,7 @@ u16 StaPipVU1Program::getMaxVertCount(const bool& singleColorEnabled, res /= (colorElementsPerVertex + reglistCount); // Buffer size = VU1 double buffer size (xtop) - // res = qbuffer size (directly inside VU1) + // QBufferSize = res (it is placed inside VU1) // Must be dividable by 3 and the result also dividable by 3. Why? // 1st dividable reason - triangle, and packaging system in 3d rendering From 0953ce3f193b48e423b87001bf0fc2789c2b61e0 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 23:16:47 +0200 Subject: [PATCH 11/33] init dynpip bag --- .../3d/pipeline/dynamic/bag/dynpip_bag.hpp | 56 +++++++++++++ .../pipeline/dynamic/bag/dynpip_color_bag.hpp | 32 ++++++++ .../dynamic/bag/dynpip_texture_bag.hpp | 30 +++++++ .../bag/pipeline_info_bag.hpp} | 10 +-- .../bag/pipeline_lighting_bag.hpp} | 10 +-- .../bag/pipeline_shading_type.hpp} | 2 +- .../pipeline/static/core/bag/stapip_bag.hpp | 10 +-- .../static/core/stapip_qbuffer_renderer.hpp | 2 +- .../3d/pipeline/static/stapip_options.hpp | 4 +- .../3d/pipeline/static/static_pipeline.hpp | 12 +-- .../3d/pipeline/dynamic/bag/dynpip_bag.cpp | 79 +++++++++++++++++++ .../pipeline/dynamic/bag/dynpip_color_bag.cpp | 22 ++++++ .../dynamic/bag/dynpip_texture_bag.cpp | 22 ++++++ .../dynamic/programs/dynpip_c_vu1.vclpp | 4 +- .../dynamic/programs/dynpip_d_vu1.vclpp | 4 +- .../dynamic/programs/dynpip_tc_vu1.vclpp | 4 +- .../dynamic/programs/dynpip_td_vu1.vclpp | 4 +- .../programs/as_is/mcpip_as_is_vu1.vclpp | 2 +- .../programs/cull/mcpip_cull_vu1.vclpp | 2 +- .../bag/pipeline_info_bag.cpp} | 6 +- .../bag/pipeline_lighting_bag.cpp} | 38 ++++----- .../{shared_macros => shared}/tyra_macros.i | 0 .../{shared_macros => shared}/vcl_sml.i | 0 .../programs/as_is/stapip_as_is_c_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_d_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_tc_vu1.vclpp | 4 +- .../programs/as_is/stapip_as_is_td_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_c_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_d_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_tc_vu1.vclpp | 4 +- .../programs/cull/stapip_cull_td_vu1.vclpp | 4 +- .../static/core/stapip_qbuffer_renderer.cpp | 2 +- .../3d/pipeline/static/static_pipeline.cpp | 12 +-- 33 files changed, 321 insertions(+), 80 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp rename engine/inc/renderer/3d/pipeline/{static/core/bag/stapip_info_bag.hpp => shared/bag/pipeline_info_bag.hpp} (79%) rename engine/inc/renderer/3d/pipeline/{static/core/bag/stapip_lighting_bag.hpp => shared/bag/pipeline_lighting_bag.hpp} (86%) rename engine/inc/renderer/3d/pipeline/{static/stapip_shading_type.hpp => shared/bag/pipeline_shading_type.hpp} (89%) create mode 100644 engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp rename engine/src/renderer/3d/pipeline/{static/core/bag/stapip_info_bag.cpp => shared/bag/pipeline_info_bag.cpp} (76%) rename engine/src/renderer/3d/pipeline/{static/core/bag/stapip_lighting_bag.cpp => shared/bag/pipeline_lighting_bag.cpp} (63%) rename engine/src/renderer/3d/pipeline/{shared_macros => shared}/tyra_macros.i (100%) rename engine/src/renderer/3d/pipeline/{shared_macros => shared}/vcl_sml.i (100%) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp new file mode 100644 index 0000000..1a9cfc9 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp @@ -0,0 +1,56 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "math/vec4.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp" +#include "./dynpip_color_bag.hpp" +#include "./dynpip_texture_bag.hpp" +#include "renderer/core/texture/models/texture.hpp" + +namespace Tyra { + +/** + * @brief 3D Animated render data bag. + * Supports frustum culling, simple clipping (culling), lighting, + * texture and single color / many colors. + */ +class DynPipBag { + public: + DynPipBag(); + ~DynPipBag(); + + /** Mandatory. Object info. */ + PipelineInfoBag* info; + + /** Mandatory. Object color(s). */ + DynPipColorBag* color; + + /** Mandatory. Vertex count. */ + u32 count; + + /** Mandatory. Vertices. */ + Vec4* vertices; + + /** Optional. Texture coordinates and image. */ + DynPipTextureBag* texture; + + /** Optional. Object lighting. */ + PipelineLightingBag* lighting; + + void print() const; + void print(const char* name) const; + void print(const std::string& name) const { print(name.c_str()); } + std::string getPrint(const char* name = nullptr) const; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp new file mode 100644 index 0000000..5ffeb32 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp @@ -0,0 +1,32 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "renderer/models/color.hpp" + +namespace Tyra { + +/** + * @brief Color data. At least one color data is required (single/many). + */ +class DynPipColorBag { + public: + DynPipColorBag(); + ~DynPipColorBag(); + + /** Optional. Single color for all vertices. */ + Color* single; + + /** Optional. Color per vertex. */ + Color* many; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp new file mode 100644 index 0000000..cc3a6bf --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp @@ -0,0 +1,30 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "math/vec4.hpp" +#include "renderer/core/texture/models/texture.hpp" + +namespace Tyra { + +class DynPipTextureBag { + public: + DynPipTextureBag(); + ~DynPipTextureBag(); + + /** Mandatory. Texture coordinates per vertex. */ + Vec4* coordinates; + + /** Mandatory. Texture image. */ + Texture* texture; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp similarity index 79% rename from engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp rename to engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp index ba79e59..a9a99bd 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp @@ -13,19 +13,19 @@ #include #include "math/m4x4.hpp" #include "math/vec4.hpp" -#include "../../stapip_shading_type.hpp" +#include "./pipeline_shading_type.hpp" namespace Tyra { -class StaPipInfoBag { +class PipelineInfoBag { public: - StaPipInfoBag(); - ~StaPipInfoBag(); + PipelineInfoBag(); + ~PipelineInfoBag(); /** Mandatory. Model matrix */ M4x4* model; - StaPipShadingType shadingType; + PipelineShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp similarity index 86% rename from engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp rename to engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp index 1eebdb5..ae75e8e 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp @@ -16,12 +16,12 @@ namespace Tyra { -enum StaPipLightingBagMode { Auto, Manual }; +enum PipelineLightingBagMode { Auto, Manual }; -class StaPipLightingBag { +class PipelineLightingBag { public: - explicit StaPipLightingBag(const bool& manual = false); - ~StaPipLightingBag(); + explicit PipelineLightingBag(const bool& manual = false); + ~PipelineLightingBag(); Vec4* normals; M4x4* lightMatrix; @@ -47,7 +47,7 @@ class StaPipLightingBag { void deallocate(); void forceDeallocate(); u8 isAllocated; - StaPipLightingBagMode mode; + PipelineLightingBagMode mode; Vec4* lightColors; Vec4* lightDirections; diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp similarity index 89% rename from engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp rename to engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp index 544242b..441beee 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_shading_type.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp @@ -12,7 +12,7 @@ namespace Tyra { -enum StaPipShadingType { +enum PipelineShadingType { StaPipShadingFlat, StaPipShadingGouraud, }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp index c3cc7af..a4dcff0 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp @@ -11,8 +11,8 @@ #pragma once #include "math/vec4.hpp" -#include "./stapip_lighting_bag.hpp" -#include "./stapip_info_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp" #include "./stapip_color_bag.hpp" #include "./stapip_texture_bag.hpp" #include "renderer/core/texture/models/texture.hpp" @@ -22,7 +22,7 @@ namespace Tyra { /** * @brief 3D Render data bag. - * Supports frustum culling, clipping, lighting, + * Supports frustum culling, full plane clipping, lighting, * texture and single color / many colors. */ class StaPipBag { @@ -31,7 +31,7 @@ class StaPipBag { ~StaPipBag(); /** Mandatory. Object info. */ - StaPipInfoBag* info; + PipelineInfoBag* info; /** Mandatory. Object color(s). */ StaPipColorBag* color; @@ -46,7 +46,7 @@ class StaPipBag { StaPipTextureBag* texture; /** Optional. Object lighting. */ - StaPipLightingBag* lighting; + PipelineLightingBag* lighting; /** * @param maxVertCount This parameter is available in renderer API. diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp index 1dfba35..9426861 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp @@ -46,7 +46,7 @@ class StaPipQBufferRenderer { void setMaxVertCount(const u32& count); - void setInfo(StaPipInfoBag* bag); + void setInfo(PipelineInfoBag* bag); /** Fast render with culling */ void cull(StaPipQBuffer* buffer); diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index 2630ce0..ccad0be 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -10,7 +10,7 @@ #pragma once -#include "./stapip_shading_type.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp" #include "./stapip_lighting_options.hpp" namespace Tyra { @@ -20,7 +20,7 @@ class StaPipOptions { StaPipOptions() {} ~StaPipOptions() {} - StaPipShadingType shadingType; + PipelineShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; bool noClipChecks; diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 6647910..a384218 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -41,16 +41,16 @@ class StaticPipeline : public Renderer3DPipeline { void addVertices(DynamicMesh* mesh, MeshMaterial* material, StaPipBag* bag, MeshFrame* frameFrom, MeshFrame* frameTo) const; - StaPipInfoBag* getInfoBag(DynamicMesh* mesh, const StaPipOptions* options, - M4x4* model) const; + PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const StaPipOptions* options, + M4x4* model) const; StaPipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo) const; StaPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo); - StaPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, - M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, - const StaPipOptions* options) const; + PipelineLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, + M4x4* model, MeshFrame* frameFrom, + MeshFrame* frameTo, + const StaPipOptions* options) const; void deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const; void setLightingColorsCache(StaPipLightingOptions* lightingOptions); diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp new file mode 100644 index 0000000..52dfab3 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp @@ -0,0 +1,79 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp" +#include +#include + +namespace Tyra { + +DynPipBag::DynPipBag() { + info = nullptr; + color = nullptr; + texture = nullptr; + lighting = nullptr; +} + +DynPipBag::~DynPipBag() {} + +void DynPipBag::print() const { + auto text = getPrint(nullptr); + printf("%s\n", text.c_str()); +} + +void DynPipBag::print(const char* name) const { + auto text = getPrint(name); + printf("%s\n", text.c_str()); +} + +std::string DynPipBag::getPrint(const char* name) const { + std::stringstream res; + if (name) { + res << name << "("; + } else { + res << "DynPipBag("; + } + res << std::fixed << std::setprecision(4); + res << std::endl; + res << "Count: " << count << ", " << std::endl; + res << "Vertices present: " << (vertices != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Info present: " << (info != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Color present: " << (color != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Texture present: " << (texture != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Lighting present: " << (lighting != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Model matrix: " << info->model->getPrint() << ", " << std::endl; + if (color->single) { + res << "Color single: " << color->single->getPrint() << ", " << std::endl; + } else { + res << "Color many: " << color->many->getPrint() << ", " << std::endl; + } + if (texture) { + res << "Texture coords present: " + << (texture->coordinates != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Texture: " << texture->texture->getPrint() << ", " << std::endl; + } + if (lighting) { + res << "Lighting normals present: " << (lighting->normals ? "Yes" : "No") + << ", " << std::endl; + res << "Lighting matrix: " << lighting->lightMatrix->getPrint() << ", " + << std::endl; + } + res << ")"; + + return res.str(); +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp new file mode 100644 index 0000000..18f43b2 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp @@ -0,0 +1,22 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp" + +namespace Tyra { + +DynPipColorBag::DynPipColorBag() { + single = nullptr; + many = nullptr; +} + +DynPipColorBag::~DynPipColorBag() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp new file mode 100644 index 0000000..d5c7f7e --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp @@ -0,0 +1,22 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp" + +namespace Tyra { + +DynPipTextureBag::DynPipTextureBag() { + coordinates = nullptr; + texture = nullptr; +} + +DynPipTextureBag::~DynPipTextureBag() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp index 0fce4aa..93308c8 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp @@ -19,8 +19,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp index 4a05c78..34290f7 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp @@ -19,8 +19,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp index e01494f..93a2ad7 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp @@ -19,8 +19,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp index 8f46639..cc4f20d 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp @@ -19,8 +19,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp index 7d89c7d..a706e90 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_as_is_vu1.vclpp @@ -21,7 +21,7 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "inc/renderer/3d/pipeline/minecraft/programs/as_is/mcpip_vu1_as_is_shared_defines.h" #include "src/renderer/3d/pipeline/minecraft/programs/as_is/macros.i" diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp index 2e71c13..5e2c1a6 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull_vu1.vclpp @@ -21,7 +21,7 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "inc/renderer/3d/pipeline/minecraft/programs/cull/mcpip_vu1_cull_shared_defines.h" #include "src/renderer/3d/pipeline/minecraft/programs/cull/macros.i" diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp similarity index 76% rename from engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp rename to engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp index 9dd6b34..2389618 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_info_bag.cpp +++ b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp @@ -8,17 +8,17 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/static/core/bag/stapip_info_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp" namespace Tyra { -StaPipInfoBag::StaPipInfoBag() { +PipelineInfoBag::PipelineInfoBag() { shadingType = StaPipShadingFlat; blendingEnabled = true; antiAliasingEnabled = false; model = nullptr; } -StaPipInfoBag::~StaPipInfoBag() {} +PipelineInfoBag::~PipelineInfoBag() {} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp similarity index 63% rename from engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp rename to engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp index 4f56e2e..b32a500 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp @@ -9,11 +9,11 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" namespace Tyra { -StaPipLightingBag::StaPipLightingBag(const bool& manual) { +PipelineLightingBag::PipelineLightingBag(const bool& manual) { isAllocated = false; mode = Auto; normals = nullptr; @@ -27,33 +27,33 @@ StaPipLightingBag::StaPipLightingBag(const bool& manual) { } } -StaPipLightingBag::~StaPipLightingBag() { deallocate(); } +PipelineLightingBag::~PipelineLightingBag() { deallocate(); } -void StaPipLightingBag::setAmbientColor(const Color& color) { +void PipelineLightingBag::setAmbientColor(const Color& color) { TYRA_ASSERT(mode != Manual, "Ambient color cannot be set in manual mode"); lightColors[3].set(reinterpret_cast(color)); } -void StaPipLightingBag::setDirectionalLightColors(Color* colors, - const u8& count) { +void PipelineLightingBag::setDirectionalLightColors(Color* colors, + const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightColor(colors[i], i); } -void StaPipLightingBag::setDirectionalLightDirections(Vec4* directions, - const u8& count) { +void PipelineLightingBag::setDirectionalLightDirections(Vec4* directions, + const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightDirection(directions[i], i); } -void StaPipLightingBag::setDirectionalLightColor(const Color& color, - const u8& index) { +void PipelineLightingBag::setDirectionalLightColor(const Color& color, + const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); TYRA_ASSERT(index < 3, "There are max 3 directional lights"); lightColors[index].set(reinterpret_cast(color)); } -void StaPipLightingBag::setDirectionalLightDirection(const Vec4& direction, - const u8& index) { +void PipelineLightingBag::setDirectionalLightDirection(const Vec4& direction, + const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); TYRA_ASSERT(index < 3, "There are max 3 directional lights"); @@ -61,19 +61,19 @@ void StaPipLightingBag::setDirectionalLightDirection(const Vec4& direction, lightDirections[index].set(direction); } -void StaPipLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { +void PipelineLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { deallocate(); lightColors = colors; lightDirections = directions; mode = Manual; } -void StaPipLightingBag::disableManualMode() { +void PipelineLightingBag::disableManualMode() { allocate(); mode = Auto; } -void StaPipLightingBag::allocate() { +void PipelineLightingBag::allocate() { if (isAllocated) return; lightColors = new Vec4[4]; @@ -92,27 +92,27 @@ void StaPipLightingBag::allocate() { isAllocated = true; } -void StaPipLightingBag::deallocate() { +void PipelineLightingBag::deallocate() { if (!isAllocated) return; forceDeallocate(); } -void StaPipLightingBag::forceDeallocate() { +void PipelineLightingBag::forceDeallocate() { forceDeallocateColors(); forceDeallocateDirections(); isAllocated = false; } -void StaPipLightingBag::forceDeallocateColors() { +void PipelineLightingBag::forceDeallocateColors() { if (lightColors != nullptr) { delete[] lightColors; lightColors = nullptr; } } -void StaPipLightingBag::forceDeallocateDirections() { +void PipelineLightingBag::forceDeallocateDirections() { if (lightDirections != nullptr) { delete[] lightDirections; lightDirections = nullptr; diff --git a/engine/src/renderer/3d/pipeline/shared_macros/tyra_macros.i b/engine/src/renderer/3d/pipeline/shared/tyra_macros.i similarity index 100% rename from engine/src/renderer/3d/pipeline/shared_macros/tyra_macros.i rename to engine/src/renderer/3d/pipeline/shared/tyra_macros.i diff --git a/engine/src/renderer/3d/pipeline/shared_macros/vcl_sml.i b/engine/src/renderer/3d/pipeline/shared/vcl_sml.i similarity index 100% rename from engine/src/renderer/3d/pipeline/shared_macros/vcl_sml.i rename to engine/src/renderer/3d/pipeline/shared/vcl_sml.i diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp index a2a13c1..1c63352 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_c_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp index 7f04ebd..d9071fa 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_d_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp index 0f30a7c..90775ab 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_tc_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp index 8c85a57..b072c83 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/as_is/stapip_as_is_td_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp index b0dbeb0..27067f1 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_c_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp index 0fae0e5..0894b9a 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_d_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp index b73cf12..5aae3b7 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_tc_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp index 1f833a2..3a7c3ff 100644 --- a/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/static/core/programs/cull/stapip_cull_td_vu1.vclpp @@ -18,8 +18,8 @@ .init_vf_all .init_vi_all -#include "src/renderer/3d/pipeline/shared_macros/vcl_sml.i" -#include "src/renderer/3d/pipeline/shared_macros/tyra_macros.i" +#include "src/renderer/3d/pipeline/shared/vcl_sml.i" +#include "src/renderer/3d/pipeline/shared/tyra_macros.i" #include "inc/renderer/3d/pipeline/static/core/programs/stapip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index c859392..195b295 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -130,7 +130,7 @@ void StaPipQBufferRenderer::sendObjectData( dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } -void StaPipQBufferRenderer::setInfo(StaPipInfoBag* bag) { +void StaPipQBufferRenderer::setInfo(PipelineInfoBag* bag) { rendererCore->gs.prim.antialiasing = bag->antiAliasingEnabled; rendererCore->gs.prim.blending = bag->blendingEnabled; rendererCore->gs.prim.shading = bag->shadingType; diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 834edf4..008dd5e 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -83,10 +83,10 @@ void StaticPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, } } -StaPipInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, - const StaPipOptions* options, - M4x4* model) const { - auto* result = new StaPipInfoBag(); +PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, + const StaPipOptions* options, + M4x4* model) const { + auto* result = new PipelineInfoBag(); if (options) { result->antiAliasingEnabled = options->antiAliasingEnabled; @@ -163,7 +163,7 @@ StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, return result; } -StaPipLightingBag* StaticPipeline::getLightingBag( +PipelineLightingBag* StaticPipeline::getLightingBag( DynamicMesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, const StaPipOptions* options) const { @@ -171,7 +171,7 @@ StaPipLightingBag* StaticPipeline::getLightingBag( options->lighting == nullptr) return nullptr; - auto* result = new StaPipLightingBag(true); + auto* result = new PipelineLightingBag(true); result->lightMatrix = model; result->setLightsManually(colorsCache, From f08fc1c8d3182b85e84e3b2dcdea7eb9d6a6f9df Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 23:42:24 +0200 Subject: [PATCH 12/33] bags refactor --- .../3d/pipeline/dynamic/bag/dynpip_bag.hpp | 21 +++++++--- .../pipeline/dynamic/bag/dynpip_color_bag.hpp | 6 ++- .../dynamic/bag/dynpip_lighting_bag.hpp | 34 ++++++++++++++++ .../dynamic/bag/dynpip_texture_bag.hpp | 3 +- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 4 -- ...ng_bag.hpp => pipeline_dir_lights_bag.hpp} | 13 +++--- .../pipeline/static/core/bag/stapip_bag.hpp | 4 +- .../static/core/bag/stapip_lighting_bag.hpp | 33 +++++++++++++++ .../3d/pipeline/static/static_pipeline.hpp | 10 ++--- .../3d/pipeline/dynamic/bag/dynpip_bag.cpp | 32 ++++++++++----- .../pipeline/dynamic/bag/dynpip_color_bag.cpp | 6 ++- .../dynamic/bag/dynpip_lighting_bag.cpp | 24 +++++++++++ .../dynamic/bag/dynpip_texture_bag.cpp | 3 +- ...ng_bag.cpp => pipeline_dir_lights_bag.cpp} | 40 +++++++++---------- .../pipeline/static/core/bag/stapip_bag.cpp | 3 +- .../static/core/bag/stapip_lighting_bag.cpp | 23 +++++++++++ .../static/core/stapip_qbuffer_renderer.cpp | 9 +++-- .../static/core/static_pipeline_core.cpp | 6 ++- .../3d/pipeline/static/static_pipeline.cpp | 12 ++++-- 19 files changed, 215 insertions(+), 71 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp rename engine/inc/renderer/3d/pipeline/shared/bag/{pipeline_lighting_bag.hpp => pipeline_dir_lights_bag.hpp} (83%) create mode 100644 engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp rename engine/src/renderer/3d/pipeline/shared/bag/{pipeline_lighting_bag.cpp => pipeline_dir_lights_bag.cpp} (64%) create mode 100644 engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp index 1a9cfc9..0b71e26 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp @@ -11,9 +11,10 @@ #pragma once #include "math/vec4.hpp" -#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" + #include "renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp" #include "./dynpip_color_bag.hpp" +#include "./dynpip_lighting_bag.hpp" #include "./dynpip_texture_bag.hpp" #include "renderer/core/texture/models/texture.hpp" @@ -35,17 +36,27 @@ class DynPipBag { /** Mandatory. Object color(s). */ DynPipColorBag* color; - /** Mandatory. Vertex count. */ + /** Mandatory. Vertex count per frame. */ u32 count; - /** Mandatory. Vertices. */ - Vec4* vertices; + /** Mandatory. From (frame) vertices */ + Vec4* verticesFrom; + + /** Mandatory. To (frame) vertices */ + Vec4* verticesTo; + + /** + * Mandatory. + * State of animation interpolation + * (between from and to) + */ + float interpolation; /** Optional. Texture coordinates and image. */ DynPipTextureBag* texture; /** Optional. Object lighting. */ - PipelineLightingBag* lighting; + DynPipLightingBag* lighting; void print() const; void print(const char* name) const; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp index 5ffeb32..39f42c7 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp @@ -23,10 +23,12 @@ class DynPipColorBag { ~DynPipColorBag(); /** Optional. Single color for all vertices. */ - Color* single; + Color* singleFrom; + Color* singleTo; /** Optional. Color per vertex. */ - Color* many; + Color* manyFrom; + Color* manyTo; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp new file mode 100644 index 0000000..6f1797f --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp @@ -0,0 +1,34 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "math/vec4.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp" + +namespace Tyra { + +class DynPipLightingBag { + public: + DynPipLightingBag(); + ~DynPipLightingBag(); + + /** Mandatory. Model matrix for lights. */ + M4x4* lightMatrix; + + /** Mandatory. Lighting normals per vertex. */ + Vec4* normalsFrom; + Vec4* normalsTo; + + /** Mandatory. Directional lights */ + PipelineDirLightsBag* dirLights; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp index cc3a6bf..eb2d246 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp @@ -21,7 +21,8 @@ class DynPipTextureBag { ~DynPipTextureBag(); /** Mandatory. Texture coordinates per vertex. */ - Vec4* coordinates; + Vec4* coordinatesFrom; + Vec4* coordinatesTo; /** Mandatory. Texture image. */ Texture* texture; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index d86ecdb..118141d 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -27,10 +27,6 @@ class DynamicPipeline : public Renderer3DPipeline { void onUse(); - /** - * Render 3D data via "meshes". - * This render() method is a bridge to core.render() method. - */ void render(DynamicMesh* mesh, const DynPipOptions* options = nullptr); }; diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp similarity index 83% rename from engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp rename to engine/inc/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp index ae75e8e..7531688 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp @@ -16,15 +16,12 @@ namespace Tyra { -enum PipelineLightingBagMode { Auto, Manual }; +enum PipelineDirLightsBagMode { Auto, Manual }; -class PipelineLightingBag { +class PipelineDirLightsBag { public: - explicit PipelineLightingBag(const bool& manual = false); - ~PipelineLightingBag(); - - Vec4* normals; - M4x4* lightMatrix; + explicit PipelineDirLightsBag(const bool& manual = false); + ~PipelineDirLightsBag(); void setAmbientColor(const Color& color); void setDirectionalLightColors(Color* colors, const u8& count); @@ -47,7 +44,7 @@ class PipelineLightingBag { void deallocate(); void forceDeallocate(); u8 isAllocated; - PipelineLightingBagMode mode; + PipelineDirLightsBagMode mode; Vec4* lightColors; Vec4* lightDirections; diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp index a4dcff0..a89d93c 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_bag.hpp @@ -11,9 +11,9 @@ #pragma once #include "math/vec4.hpp" -#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" #include "renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp" #include "./stapip_color_bag.hpp" +#include "./stapip_lighting_bag.hpp" #include "./stapip_texture_bag.hpp" #include "renderer/core/texture/models/texture.hpp" #include "./packaging/stapip_bag_packages_bbox.hpp" @@ -46,7 +46,7 @@ class StaPipBag { StaPipTextureBag* texture; /** Optional. Object lighting. */ - PipelineLightingBag* lighting; + StaPipLightingBag* lighting; /** * @param maxVertCount This parameter is available in renderer API. diff --git a/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp new file mode 100644 index 0000000..46f3223 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp @@ -0,0 +1,33 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "math/vec4.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp" + +namespace Tyra { + +class StaPipLightingBag { + public: + StaPipLightingBag(); + ~StaPipLightingBag(); + + /** Mandatory. Model matrix for lights. */ + M4x4* lightMatrix; + + /** Mandatory. Lighting normals per vertex. */ + Vec4* normals; + + /** Mandatory. Directional lights */ + PipelineDirLightsBag* dirLights; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index a384218..c35a857 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -29,7 +29,7 @@ class StaticPipeline : public Renderer3DPipeline { void onUse(); /** - * Render 3D data via "meshes". + * Render 3D via "meshes". * This render() method is a bridge to core.render() method. */ void render(DynamicMesh* mesh, const StaPipOptions* options = nullptr); @@ -47,10 +47,10 @@ class StaticPipeline : public Renderer3DPipeline { MeshFrame* frameFrom, MeshFrame* frameTo) const; StaPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, MeshFrame* frameTo); - PipelineLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, - M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, - const StaPipOptions* options) const; + StaPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, + M4x4* model, MeshFrame* frameFrom, + MeshFrame* frameTo, + const StaPipOptions* options) const; void deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const; void setLightingColorsCache(StaPipLightingOptions* lightingOptions); diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp index 52dfab3..a840cfe 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp @@ -43,8 +43,10 @@ std::string DynPipBag::getPrint(const char* name) const { res << std::fixed << std::setprecision(4); res << std::endl; res << "Count: " << count << ", " << std::endl; - res << "Vertices present: " << (vertices != nullptr ? "Yes" : "No") << ", " - << std::endl; + res << "Vertices from present: " << (verticesFrom != nullptr ? "Yes" : "No") + << ", " << std::endl; + res << "Vertices to present: " << (verticesTo != nullptr ? "Yes" : "No") + << ", " << std::endl; res << "Info present: " << (info != nullptr ? "Yes" : "No") << ", " << std::endl; res << "Color present: " << (color != nullptr ? "Yes" : "No") << ", " @@ -54,20 +56,32 @@ std::string DynPipBag::getPrint(const char* name) const { res << "Lighting present: " << (lighting != nullptr ? "Yes" : "No") << ", " << std::endl; res << "Model matrix: " << info->model->getPrint() << ", " << std::endl; - if (color->single) { - res << "Color single: " << color->single->getPrint() << ", " << std::endl; + if (color->singleFrom) { + res << "Color from single: " << color->singleFrom->getPrint() << ", " + << std::endl; + res << "Color to single: " << color->singleTo->getPrint() << ", " + << std::endl; } else { - res << "Color many: " << color->many->getPrint() << ", " << std::endl; + res << "Color many from present: " + << (color->manyFrom != nullptr ? "Yes" : "No") << ", " << std::endl; + res << "Color many to present: " + << (color->manyTo != nullptr ? "Yes" : "No") << ", " << std::endl; } if (texture) { - res << "Texture coords present: " - << (texture->coordinates != nullptr ? "Yes" : "No") << ", " + res << "Texture coords from present: " + << (texture->coordinatesFrom != nullptr ? "Yes" : "No") << ", " + << std::endl; + res << "Texture coords to present: " + << (texture->coordinatesTo != nullptr ? "Yes" : "No") << ", " << std::endl; res << "Texture: " << texture->texture->getPrint() << ", " << std::endl; } + if (lighting) { - res << "Lighting normals present: " << (lighting->normals ? "Yes" : "No") - << ", " << std::endl; + res << "Lighting normals from present: " + << (lighting->normalsFrom ? "Yes" : "No") << ", " << std::endl; + res << "Lighting normals to present: " + << (lighting->normalsTo ? "Yes" : "No") << ", " << std::endl; res << "Lighting matrix: " << lighting->lightMatrix->getPrint() << ", " << std::endl; } diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp index 18f43b2..d2031b9 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp @@ -13,8 +13,10 @@ namespace Tyra { DynPipColorBag::DynPipColorBag() { - single = nullptr; - many = nullptr; + singleFrom = nullptr; + singleTo = nullptr; + manyFrom = nullptr; + manyTo = nullptr; } DynPipColorBag::~DynPipColorBag() {} diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp new file mode 100644 index 0000000..05750eb --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp @@ -0,0 +1,24 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp" + +namespace Tyra { + +DynPipLightingBag::DynPipLightingBag() { + lightMatrix = nullptr; + normalsFrom = nullptr; + normalsTo = nullptr; + dirLights = nullptr; +} + +DynPipLightingBag::~DynPipLightingBag() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp index d5c7f7e..d755d54 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp @@ -13,7 +13,8 @@ namespace Tyra { DynPipTextureBag::DynPipTextureBag() { - coordinates = nullptr; + coordinatesFrom = nullptr; + coordinatesTo = nullptr; texture = nullptr; } diff --git a/engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.cpp similarity index 64% rename from engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp rename to engine/src/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.cpp index b32a500..0638810 100644 --- a/engine/src/renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.cpp @@ -9,15 +9,13 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/shared/bag/pipeline_lighting_bag.hpp" +#include "renderer/3d/pipeline/shared/bag/pipeline_dir_lights_bag.hpp" namespace Tyra { -PipelineLightingBag::PipelineLightingBag(const bool& manual) { +PipelineDirLightsBag::PipelineDirLightsBag(const bool& manual) { isAllocated = false; mode = Auto; - normals = nullptr; - lightMatrix = nullptr; lightColors = nullptr; lightDirections = nullptr; if (manual) { @@ -27,33 +25,33 @@ PipelineLightingBag::PipelineLightingBag(const bool& manual) { } } -PipelineLightingBag::~PipelineLightingBag() { deallocate(); } +PipelineDirLightsBag::~PipelineDirLightsBag() { deallocate(); } -void PipelineLightingBag::setAmbientColor(const Color& color) { +void PipelineDirLightsBag::setAmbientColor(const Color& color) { TYRA_ASSERT(mode != Manual, "Ambient color cannot be set in manual mode"); lightColors[3].set(reinterpret_cast(color)); } -void PipelineLightingBag::setDirectionalLightColors(Color* colors, - const u8& count) { +void PipelineDirLightsBag::setDirectionalLightColors(Color* colors, + const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightColor(colors[i], i); } -void PipelineLightingBag::setDirectionalLightDirections(Vec4* directions, - const u8& count) { +void PipelineDirLightsBag::setDirectionalLightDirections(Vec4* directions, + const u8& count) { for (u8 i = 0; i < count; i++) setDirectionalLightDirection(directions[i], i); } -void PipelineLightingBag::setDirectionalLightColor(const Color& color, - const u8& index) { +void PipelineDirLightsBag::setDirectionalLightColor(const Color& color, + const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); TYRA_ASSERT(index < 3, "There are max 3 directional lights"); lightColors[index].set(reinterpret_cast(color)); } -void PipelineLightingBag::setDirectionalLightDirection(const Vec4& direction, - const u8& index) { +void PipelineDirLightsBag::setDirectionalLightDirection(const Vec4& direction, + const u8& index) { TYRA_ASSERT(mode != Manual, "Directional lights cannot be set in manual mode"); TYRA_ASSERT(index < 3, "There are max 3 directional lights"); @@ -61,19 +59,19 @@ void PipelineLightingBag::setDirectionalLightDirection(const Vec4& direction, lightDirections[index].set(direction); } -void PipelineLightingBag::setLightsManually(Vec4* colors, Vec4* directions) { +void PipelineDirLightsBag::setLightsManually(Vec4* colors, Vec4* directions) { deallocate(); lightColors = colors; lightDirections = directions; mode = Manual; } -void PipelineLightingBag::disableManualMode() { +void PipelineDirLightsBag::disableManualMode() { allocate(); mode = Auto; } -void PipelineLightingBag::allocate() { +void PipelineDirLightsBag::allocate() { if (isAllocated) return; lightColors = new Vec4[4]; @@ -92,27 +90,27 @@ void PipelineLightingBag::allocate() { isAllocated = true; } -void PipelineLightingBag::deallocate() { +void PipelineDirLightsBag::deallocate() { if (!isAllocated) return; forceDeallocate(); } -void PipelineLightingBag::forceDeallocate() { +void PipelineDirLightsBag::forceDeallocate() { forceDeallocateColors(); forceDeallocateDirections(); isAllocated = false; } -void PipelineLightingBag::forceDeallocateColors() { +void PipelineDirLightsBag::forceDeallocateColors() { if (lightColors != nullptr) { delete[] lightColors; lightColors = nullptr; } } -void PipelineLightingBag::forceDeallocateDirections() { +void PipelineDirLightsBag::forceDeallocateDirections() { if (lightDirections != nullptr) { delete[] lightDirections; lightDirections = nullptr; diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp index fe989fd..25830d8 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_bag.cpp @@ -63,7 +63,8 @@ std::string StaPipBag::getPrint(const char* name) const { if (color->single) { res << "Color single: " << color->single->getPrint() << ", " << std::endl; } else { - res << "Color many: " << color->many->getPrint() << ", " << std::endl; + res << "Color many present: " << (color->many != nullptr ? "Yes" : "No") + << ", " << std::endl; } if (texture) { res << "Texture coords present: " diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp new file mode 100644 index 0000000..8312d8e --- /dev/null +++ b/engine/src/renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.cpp @@ -0,0 +1,23 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/static/core/bag/stapip_lighting_bag.hpp" + +namespace Tyra { + +StaPipLightingBag::StaPipLightingBag() { + lightMatrix = nullptr; + normals = nullptr; + dirLights = nullptr; +} + +StaPipLightingBag::~StaPipLightingBag() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 195b295..389b959 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -91,12 +91,13 @@ void StaPipQBufferRenderer::sendObjectData( packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_LIGHTS_MATRIX_ADDR, bag->lighting->lightMatrix, 3, false); - packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_LIGHTS_DIRS_ADDR, - bag->lighting->getLightDirections(), 3, - false); + packet2_utils_vu_add_unpack_data( + objectDataPacket, VU1_LIGHTS_DIRS_ADDR, + bag->lighting->dirLights->getLightDirections(), 3, false); packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_LIGHTS_COLORS_ADDR, - bag->lighting->getLightColors(), 4, false); + bag->lighting->dirLights->getLightColors(), + 4, false); } u8 singleColorEnabled = bag->color->single != nullptr; diff --git a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp index 5da1095..898afc2 100644 --- a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp @@ -65,8 +65,10 @@ void StaPipelineCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { (!bag->color->many && bag->lighting), "Multicolor is not supported with lighting, please choose one!"); TYRA_ASSERT( - !bag->lighting || (bag->lighting->lightMatrix && bag->lighting->normals), - "If you want lighting, please provide light matrix and normals!"); + !bag->lighting || (bag->lighting->lightMatrix && bag->lighting->normals && + bag->lighting->dirLights), + "If you want lighting, please provide light matrix normals and dir " + "lights!"); TYRA_ASSERT( !bag->texture || (bag->texture->texture && bag->texture->coordinates), "If you want texture, please provide texture and coordinates!"); diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 008dd5e..7f4bf1d 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -163,7 +163,7 @@ StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, return result; } -PipelineLightingBag* StaticPipeline::getLightingBag( +StaPipLightingBag* StaticPipeline::getLightingBag( DynamicMesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, const StaPipOptions* options) const { @@ -171,11 +171,14 @@ PipelineLightingBag* StaticPipeline::getLightingBag( options->lighting == nullptr) return nullptr; - auto* result = new PipelineLightingBag(true); + auto* result = new StaPipLightingBag(); + auto* dirLightsBag = new PipelineDirLightsBag(true); + result->dirLights = dirLightsBag; + result->lightMatrix = model; - result->setLightsManually(colorsCache, - options->lighting->directionalDirections); + result->dirLights->setLightsManually( + colorsCache, options->lighting->directionalDirections); result->normals = new Vec4[material->getFacesCount()]; @@ -215,6 +218,7 @@ void StaticPipeline::deallocDrawBags(StaPipBag* bag, if (bag->lighting) { delete[] bag->lighting->normals; + delete bag->lighting->dirLights; delete bag->lighting; } From 2fe40c8d90067d36cc7c1c641a70f0eb332054f6 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 23:50:25 +0200 Subject: [PATCH 13/33] dynpip rearrangment --- .../dynamic/{ => core}/bag/dynpip_bag.hpp | 0 .../{ => core}/bag/dynpip_color_bag.hpp | 0 .../{ => core}/bag/dynpip_lighting_bag.hpp | 0 .../{ => core}/bag/dynpip_texture_bag.hpp | 0 .../3d/pipeline/dynamic/core/dynpip_core.hpp | 41 +++++++++++++++++++ .../dynamic/{ => core}/dynpip_options.hpp | 0 .../{ => core}/dynpip_program_name.hpp | 0 .../{ => core}/dynpip_programs_repository.hpp | 0 .../dynamic/{ => core}/dynpip_qbuffer.hpp | 0 .../dynamic/{ => core}/dynpip_vu1_program.hpp | 0 .../programs/dynpip_c_vu1_program.hpp | 0 .../programs/dynpip_d_vu1_program.hpp | 0 .../programs/dynpip_tc_vu1_program.hpp | 0 .../programs/dynpip_td_vu1_program.hpp | 0 .../programs/dynpip_vu1_shared_defines.h | 0 .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 9 +++- ...atic_pipeline_core.hpp => stapip_core.hpp} | 8 ++-- .../3d/pipeline/static/static_pipeline.hpp | 5 ++- .../dynamic/{ => core}/bag/dynpip_bag.cpp | 2 +- .../{ => core}/bag/dynpip_color_bag.cpp | 2 +- .../{ => core}/bag/dynpip_lighting_bag.cpp | 2 +- .../{ => core}/bag/dynpip_texture_bag.cpp | 2 +- .../3d/pipeline/dynamic/core/dynpip_core.cpp | 27 ++++++++++++ .../{ => core}/dynpip_programs_repository.cpp | 2 +- .../dynamic/{ => core}/dynpip_qbuffer.cpp | 2 +- .../dynamic/{ => core}/dynpip_vu1_program.cpp | 2 +- .../{ => core}/programs/dynpip_c_vu1.vclpp | 2 +- .../programs/dynpip_c_vu1_program.cpp | 2 +- .../{ => core}/programs/dynpip_d_vu1.vclpp | 2 +- .../programs/dynpip_d_vu1_program.cpp | 2 +- .../{ => core}/programs/dynpip_tc_vu1.vclpp | 2 +- .../programs/dynpip_tc_vu1_program.cpp | 2 +- .../{ => core}/programs/dynpip_td_vu1.vclpp | 2 +- .../programs/dynpip_td_vu1_program.cpp | 2 +- ...atic_pipeline_core.cpp => stapip_core.cpp} | 28 ++++++------- 35 files changed, 111 insertions(+), 37 deletions(-) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_bag.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_color_bag.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_lighting_bag.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_texture_bag.hpp (100%) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/dynpip_options.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/dynpip_program_name.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/dynpip_programs_repository.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/dynpip_qbuffer.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/dynpip_vu1_program.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_c_vu1_program.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_d_vu1_program.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_tc_vu1_program.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_td_vu1_program.hpp (100%) rename engine/inc/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_vu1_shared_defines.h (100%) rename engine/inc/renderer/3d/pipeline/static/core/{static_pipeline_core.hpp => stapip_core.hpp} (94%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_bag.cpp (97%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_color_bag.cpp (87%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_lighting_bag.cpp (87%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/bag/dynpip_texture_bag.cpp (87%) create mode 100644 engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/dynpip_programs_repository.cpp (89%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/dynpip_qbuffer.cpp (87%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/dynpip_vu1_program.cpp (94%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_c_vu1.vclpp (86%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_c_vu1_program.cpp (91%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_d_vu1.vclpp (86%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_d_vu1_program.cpp (92%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_tc_vu1.vclpp (87%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_tc_vu1_program.cpp (92%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_td_vu1.vclpp (87%) rename engine/src/renderer/3d/pipeline/dynamic/{ => core}/programs/dynpip_td_vu1_program.cpp (93%) rename engine/src/renderer/3d/pipeline/static/core/{static_pipeline_core.cpp => stapip_core.cpp} (89%) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp new file mode 100644 index 0000000..3159f54 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -0,0 +1,41 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include "./bag/dynpip_bag.hpp" +#include "renderer/core/renderer_core.hpp" + +namespace Tyra { + +class DynPipCore { + public: + DynPipCore(); + ~DynPipCore(); + + void init(RendererCore* t_core); + + /** Render 3D via "bags" */ + void render(DynPipBag* data); + + /** + * - Uploads standard VU1 programs. + * - Sends static "Tyra Renderer3D" VU1 data. + * - Sets double buffers exactly for "Tyra Renderer3D" + * Should be called if VU1 was used by your non standard programs. + */ + void reinitStandardVU1Programs(); + + private: + RendererCore* rendererCore; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_options.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_options.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_program_name.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/dynpip_program_name.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_program_name.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h similarity index 100% rename from engine/inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h rename to engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index 118141d..da923bd 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -12,7 +12,8 @@ #include #include "../renderer_3d_pipeline.hpp" -#include "./dynpip_options.hpp" +#include "./core/dynpip_options.hpp" +#include "./core/dynpip_core.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" @@ -23,10 +24,16 @@ class DynamicPipeline : public Renderer3DPipeline { DynamicPipeline(); ~DynamicPipeline(); + DynPipCore core; + void init(RendererCore* core); void onUse(); + /** + * Render 3D via "meshes". + * This render() method is a bridge to core.render() method. + */ void render(DynamicMesh* mesh, const DynPipOptions* options = nullptr); }; diff --git a/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp similarity index 94% rename from engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp rename to engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp index 6cfb27b..02dea03 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/static_pipeline_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp @@ -19,14 +19,14 @@ namespace Tyra { -class StaPipelineCore { +class StaPipCore { public: - StaPipelineCore(); - ~StaPipelineCore(); + StaPipCore(); + ~StaPipCore(); void init(RendererCore* t_core); - /** Render 3D data via "bags" */ + /** Render 3D via "bags" */ void render(StaPipBag* data, StaPipBagPackagesBBox* bbox = nullptr); /** Get max vert count of VU1 qbuffer (for optimizations) */ diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index c35a857..46b77db 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -15,7 +15,7 @@ #include "./stapip_options.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" -#include "./core/static_pipeline_core.hpp" +#include "./core/stapip_core.hpp" namespace Tyra { @@ -24,6 +24,8 @@ class StaticPipeline : public Renderer3DPipeline { StaticPipeline(); ~StaticPipeline(); + StaPipCore core; + void init(RendererCore* core); void onUse(); @@ -35,7 +37,6 @@ class StaticPipeline : public Renderer3DPipeline { void render(DynamicMesh* mesh, const StaPipOptions* options = nullptr); private: - StaPipelineCore core; RendererCore* rendererCore; Vec4* colorsCache; diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp similarity index 97% rename from engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp index a840cfe..983054f 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/bag/dynpip_bag.hpp" +#include "renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.hpp" #include #include diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp index d2031b9..d196bcd 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/bag/dynpip_color_bag.hpp" +#include "renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp index 05750eb..8d6872c 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/bag/dynpip_lighting_bag.hpp" +#include "renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp index d755d54..ccfc152 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/bag/dynpip_texture_bag.hpp" +#include "renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp new file mode 100644 index 0000000..2ae3adc --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -0,0 +1,27 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/core/dynpip_core.hpp" +#include +#include + +namespace Tyra { + +DynPipCore::DynPipCore() {} + +DynPipCore::~DynPipCore() {} + +void DynPipCore::init(RendererCore* t_core) { rendererCore = t_core; } + +void DynPipCore::reinitStandardVU1Programs() {} + +void DynPipCore::render(DynPipBag* bag) {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp similarity index 89% rename from engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp index fca3f17..d07db08 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynpip_programs_repository.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/dynpip_programs_repository.hpp" +#include "renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp index 2537cc0..4136fe6 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynpip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/dynpip_qbuffer.hpp" +#include "renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp" #include #include diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp similarity index 94% rename from engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp index 958a012..165c1f8 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynpip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/dynamic/dynpip_vu1_program.hpp" +#include "renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp" namespace Tyra { diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp similarity index 86% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp index 93308c8..0d3cec6 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp @@ -21,7 +21,7 @@ #include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "src/renderer/3d/pipeline/shared/tyra_macros.i" -#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp similarity index 91% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp index 1c6089b..4a76c80 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp @@ -9,7 +9,7 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/dynamic/programs/dynpip_c_vu1_program.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp" extern u32 DynPipVU1_C_CodeStart __attribute__((section(".vudata"))); extern u32 DynPipVU1_C_CodeEnd __attribute__((section(".vudata"))); diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp similarity index 86% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp index 34290f7..b5f6e8b 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp @@ -21,7 +21,7 @@ #include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "src/renderer/3d/pipeline/shared/tyra_macros.i" -#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" #define RGBA_STORE_OFFSET 0 #define XYZ2_STORE_OFFSET 1 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp similarity index 92% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp index a551212..c7bc969 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp @@ -9,7 +9,7 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/dynamic/programs/dynpip_d_vu1_program.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp" extern u32 DynPipVU1_D_CodeStart __attribute__((section(".vudata"))); extern u32 DynPipVU1_D_CodeEnd __attribute__((section(".vudata"))); diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp index 93a2ad7..cd13d85 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp @@ -21,7 +21,7 @@ #include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "src/renderer/3d/pipeline/shared/tyra_macros.i" -#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp similarity index 92% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp index 790dead..4a85c77 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp @@ -9,7 +9,7 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/dynamic/programs/dynpip_tc_vu1_program.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp" extern u32 DynPipVU1_TC_CodeStart __attribute__((section(".vudata"))); extern u32 DynPipVU1_TC_CodeEnd __attribute__((section(".vudata"))); diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp similarity index 87% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp index cc4f20d..a71f104 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp @@ -21,7 +21,7 @@ #include "src/renderer/3d/pipeline/shared/vcl_sml.i" #include "src/renderer/3d/pipeline/shared/tyra_macros.i" -#include "inc/renderer/3d/pipeline/dynamic/programs/dynpip_vu1_shared_defines.h" +#include "inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" #define STQ_STORE_OFFSET 0 #define RGBA_STORE_OFFSET 1 diff --git a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp similarity index 93% rename from engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp rename to engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp index 50e206f..84abba6 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp @@ -9,7 +9,7 @@ */ #include "debug/debug.hpp" -#include "renderer/3d/pipeline/dynamic/programs/dynpip_td_vu1_program.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp" extern u32 DynPipVU1_TD_CodeStart __attribute__((section(".vudata"))); extern u32 DynPipVU1_TD_CodeEnd __attribute__((section(".vudata"))); diff --git a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp similarity index 89% rename from engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp rename to engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp index 898afc2..cd84602 100644 --- a/engine/src/renderer/3d/pipeline/static/core/static_pipeline_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp @@ -8,7 +8,7 @@ # Sandro Sobczyński */ -#include "renderer/3d/pipeline/static/core/static_pipeline_core.hpp" +#include "renderer/3d/pipeline/static/core/stapip_core.hpp" #include "renderer/core/renderer_core.hpp" #include "thread/threading.hpp" @@ -22,34 +22,32 @@ namespace Tyra { -StaPipelineCore::StaPipelineCore() { maxVertCount = 0; } +StaPipCore::StaPipCore() { maxVertCount = 0; } -StaPipelineCore::~StaPipelineCore() {} +StaPipCore::~StaPipCore() {} -void StaPipelineCore::init(RendererCore* t_core) { +void StaPipCore::init(RendererCore* t_core) { rendererCore = t_core; qbufferRenderer.init(t_core); packager.init(&rendererCore->renderer3D.frustumPlanes); } -void StaPipelineCore::reinitStandardVU1Programs() { - qbufferRenderer.reinitVU1(); -} +void StaPipCore::reinitStandardVU1Programs() { qbufferRenderer.reinitVU1(); } -u32 StaPipelineCore::getMaxVertCountByBag(const StaPipBag* bag) { +u32 StaPipCore::getMaxVertCountByBag(const StaPipBag* bag) { return qbufferRenderer.getCullProgramByBag(bag)->getMaxVertCount( bag->color->many == nullptr, qbufferRenderer.getBufferSize()); } -u32 StaPipelineCore::getMaxVertCountByParams(const bool& isSingleColor, - const bool& isLightingEnabled, - const bool& isTextureEnabled) { +u32 StaPipCore::getMaxVertCountByParams(const bool& isSingleColor, + const bool& isLightingEnabled, + const bool& isTextureEnabled) { return qbufferRenderer .getCullProgramByParams(isLightingEnabled, isTextureEnabled) ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); } -void StaPipelineCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { +void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { if (bag->count <= 0) return; TYRA_ASSERT(bag->vertices != nullptr, @@ -143,7 +141,7 @@ void StaPipelineCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { Verbose("Render finished"); } -void StaPipelineCore::renderPkgs(StaPipBagPackage* packages, u16 count) { +void StaPipCore::renderPkgs(StaPipBagPackage* packages, u16 count) { for (u16 i = 0; i < count; i++) { if (packages[i].isInFrustum == IN_FRUSTUM) { Verbose(i, " - package in frustum -> cull"); @@ -163,7 +161,7 @@ void StaPipelineCore::renderPkgs(StaPipBagPackage* packages, u16 count) { } } -void StaPipelineCore::renderSubpkgs(StaPipBagPackage* subpkgs, u16 count) { +void StaPipCore::renderSubpkgs(StaPipBagPackage* subpkgs, u16 count) { std::vector doneIndexes; std::vector loadedIndexes; @@ -220,7 +218,7 @@ void StaPipelineCore::renderSubpkgs(StaPipBagPackage* subpkgs, u16 count) { } } -void StaPipelineCore::setMaxVertCount(const u32& count) { +void StaPipCore::setMaxVertCount(const u32& count) { maxVertCount = count; packager.setMaxVertCount(count); qbufferRenderer.setMaxVertCount(count); From dfd79a307e6aeb9938b2f71f1d8308b6f2e3265e Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 18 Jul 2022 23:53:25 +0200 Subject: [PATCH 14/33] roadmap update --- ROADMAP.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 192e2e4..53f5dd4 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,8 +1,13 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [Renderer] dynamicRenderer, dbufferring during mesh unrolling, simple clip -- [Renderer] staticRenderer -> remove animation, dbufferring during mesh unrolling, full plane clip +- [DynPip] TD VU1 program +- [DynPip] C++ pipeline +- [DynPip] Dbufferring during mesh unrolling +- [DynPip] Info about: simple clip +- [StaPip] Remove animation +- [StaPip] Dbufferring during mesh unrolling +- [StaPip] Info about: full plane clip - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader From 7fd2926d1d9d5d4f116b6b217456bdc423eed6e1 Mon Sep 17 00:00:00 2001 From: h4570 Date: Tue, 19 Jul 2022 00:01:37 +0200 Subject: [PATCH 15/33] some descriptions --- .../renderer/3d/pipeline/dynamic/core/dynpip_core.hpp | 2 +- .../3d/pipeline/shared/bag/pipeline_info_bag.hpp | 11 ++++++++++- .../renderer/3d/pipeline/static/core/stapip_core.hpp | 2 +- .../renderer/3d/pipeline/static/stapip_options.hpp | 11 ++++++++++- .../renderer/3d/pipeline/dynamic/core/dynpip_core.cpp | 2 +- .../renderer/3d/pipeline/static/core/stapip_core.cpp | 4 ++-- .../renderer/3d/pipeline/static/static_pipeline.cpp | 6 +++--- 7 files changed, 28 insertions(+), 10 deletions(-) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 3159f54..4e60735 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -32,7 +32,7 @@ class DynPipCore { * - Sets double buffers exactly for "Tyra Renderer3D" * Should be called if VU1 was used by your non standard programs. */ - void reinitStandardVU1Programs(); + void reinitVU1Programs(); private: RendererCore* rendererCore; diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp index a9a99bd..6a1f473 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp @@ -28,7 +28,16 @@ class PipelineInfoBag { PipelineShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; - bool noClipChecks; + + /** + * @brief True -> disables "clip against each plane" algorithm. + * Mandatory, default: false. + * + * Full clip checks are slow, but they are + * preventing visual artifacts, which can happen + * for big 3D objects (or objects near camera eyes) + */ + bool noFullClipChecks; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp index 02dea03..2a7e4e9 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp @@ -43,7 +43,7 @@ class StaPipCore { * - Sets double buffers exactly for "Tyra Renderer3D" * Should be called if VU1 was used by your non standard programs. */ - void reinitStandardVU1Programs(); + void reinitVU1Programs(); private: u32 maxVertCount; diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index ccad0be..756389f 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -23,7 +23,16 @@ class StaPipOptions { PipelineShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; - bool noClipChecks; + + /** + * @brief True -> disables "clip against each plane" algorithm. + * Mandatory, default: false. + * + * Full clip checks are slow, but they are + * preventing visual artifacts, which can happen + * for big 3D objects (or objects near camera eyes) + */ + bool noFullClipChecks; /** Optional */ StaPipLightingOptions* lighting; diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index 2ae3adc..c358534 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -20,7 +20,7 @@ DynPipCore::~DynPipCore() {} void DynPipCore::init(RendererCore* t_core) { rendererCore = t_core; } -void DynPipCore::reinitStandardVU1Programs() {} +void DynPipCore::reinitVU1Programs() {} void DynPipCore::render(DynPipBag* bag) {} diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp index cd84602..9a3a19f 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp @@ -32,7 +32,7 @@ void StaPipCore::init(RendererCore* t_core) { packager.init(&rendererCore->renderer3D.frustumPlanes); } -void StaPipCore::reinitStandardVU1Programs() { qbufferRenderer.reinitVU1(); } +void StaPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); } u32 StaPipCore::getMaxVertCountByBag(const StaPipBag* bag) { return qbufferRenderer.getCullProgramByBag(bag)->getMaxVertCount( @@ -106,7 +106,7 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { qbufferRenderer.setInfo(bag->info); if (frustumCheck == IN_FRUSTUM || - (frustumCheck == PARTIALLY_IN_FRUSTUM && bag->info->noClipChecks)) { + (frustumCheck == PARTIALLY_IN_FRUSTUM && bag->info->noFullClipChecks)) { u16 packagesCount = 0; auto biggerPkgs = packager.create(&packagesCount, bag, maxVertCount); Verbose("Material - in frustum. Pkgs: ", packagesCount, diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 7f4bf1d..b568764 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -21,7 +21,7 @@ void StaticPipeline::init(RendererCore* t_core) { core.init(t_core); } -void StaticPipeline::onUse() { core.reinitStandardVU1Programs(); } +void StaticPipeline::onUse() { core.reinitVU1Programs(); } void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); @@ -92,12 +92,12 @@ PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, result->antiAliasingEnabled = options->antiAliasingEnabled; result->blendingEnabled = options->blendingEnabled; result->shadingType = options->shadingType; - result->noClipChecks = options->noClipChecks; + result->noFullClipChecks = options->noFullClipChecks; } else { result->antiAliasingEnabled = false; result->blendingEnabled = true; result->shadingType = StaPipShadingFlat; - result->noClipChecks = true; + result->noFullClipChecks = false; } result->model = model; From 4e0785754ece40095a2489f487f9306651ff9d97 Mon Sep 17 00:00:00 2001 From: h4570 Date: Tue, 19 Jul 2022 13:16:18 +0200 Subject: [PATCH 16/33] init of dynpip bag --- .../pipeline/dynamic/core/dynpip_qbuffer.hpp | 29 +++ .../core/programs/dynpip_vu1_shared_defines.h | 2 +- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 22 +- .../dynamic/{core => }/dynpip_options.hpp | 10 + .../pipeline/shared/bag/pipeline_info_bag.hpp | 3 +- .../pipeline_lighting_options.hpp} | 6 +- .../{bag => }/pipeline_shading_type.hpp | 4 +- .../3d/pipeline/static/stapip_options.hpp | 6 +- .../3d/pipeline/static/static_pipeline.hpp | 5 +- .../pipeline/dynamic/core/dynpip_qbuffer.cpp | 72 ++++++ .../core/programs/dynpip_td_vu1_program.cpp | 47 ++-- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 209 +++++++++++++++++- .../pipeline/shared/bag/pipeline_info_bag.cpp | 2 +- .../pipeline/static/core/stapip_qbuffer.cpp | 4 +- .../3d/pipeline/static/static_pipeline.cpp | 6 +- samples/h4570/inc/h4570.hpp | 2 + samples/h4570/src/h4570.cpp | 22 +- samples/wellinator/src/wellinator.cpp | 4 +- 18 files changed, 406 insertions(+), 49 deletions(-) rename engine/inc/renderer/3d/pipeline/dynamic/{core => }/dynpip_options.hpp (62%) rename engine/inc/renderer/3d/pipeline/{static/stapip_lighting_options.hpp => shared/pipeline_lighting_options.hpp} (89%) rename engine/inc/renderer/3d/pipeline/shared/{bag => }/pipeline_shading_type.hpp (85%) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp index 606ae99..192fc7a 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp @@ -10,12 +10,41 @@ #pragma once +#include "./bag/dynpip_bag.hpp" + namespace Tyra { class DynPipQBuffer { public: DynPipQBuffer(); ~DynPipQBuffer(); + + void setMaxVertCount(const u32& count); + + DynPipBag* bag; + + Vec4* verticesFrom; + Vec4* verticesTo; + + Vec4* stsFrom; + Vec4* stsTo; + + Vec4* colorsFrom; + Vec4* colorsTo; + + Vec4* normalsFrom; + Vec4* normalsTo; + + /** Size per frame */ + u32 size; + + void print() const; + void print(const char* name) const; + void print(const std::string& name) const { print(name.c_str()); } + std::string getPrint(const char* name = nullptr) const; + + private: + u32 maxVertCount; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h index fab2116..1ff5468 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h @@ -21,4 +21,4 @@ // #define VU1_LAST_ITEM_ADDR 18 // Buffer data (xtop) -// #define VU1_VERT_DATA_ADDR 2 +#define VU1_VERT_DATA_ADDR 2 diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index da923bd..5ba6f94 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -12,7 +12,7 @@ #include #include "../renderer_3d_pipeline.hpp" -#include "./core/dynpip_options.hpp" +#include "./dynpip_options.hpp" #include "./core/dynpip_core.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" @@ -35,6 +35,26 @@ class DynamicPipeline : public Renderer3DPipeline { * This render() method is a bridge to core.render() method. */ void render(DynamicMesh* mesh, const DynPipOptions* options = nullptr); + + private: + RendererCore* rendererCore; + Vec4* colorsCache; + + void addVertices(DynamicMesh* mesh, MeshMaterial* material, DynPipBag* bag, + MeshFrame* frameFrom, MeshFrame* frameTo) const; + PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const DynPipOptions* options, + M4x4* model) const; + DynPipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, + MeshFrame* frameFrom, MeshFrame* frameTo) const; + DynPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, + MeshFrame* frameFrom, MeshFrame* frameTo); + DynPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, + M4x4* model, MeshFrame* frameFrom, + MeshFrame* frameTo, + const DynPipOptions* options) const; + void deallocDrawBags(DynPipBag* bag, MeshMaterial* material) const; + + void setLightingColorsCache(PipelineLightingOptions* lightingOptions); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp similarity index 62% rename from engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_options.hpp rename to engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp index f355b0d..a3dcd96 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp @@ -10,12 +10,22 @@ #pragma once +#include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" +#include "../shared/pipeline_lighting_options.hpp" + namespace Tyra { class DynPipOptions { public: DynPipOptions() {} ~DynPipOptions() {} + + PipelineShadingType shadingType; + bool blendingEnabled; + bool antiAliasingEnabled; + + /** Optional */ + PipelineLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp index 6a1f473..4a5e07c 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp @@ -13,7 +13,7 @@ #include #include "math/m4x4.hpp" #include "math/vec4.hpp" -#include "./pipeline_shading_type.hpp" +#include "../pipeline_shading_type.hpp" namespace Tyra { @@ -36,6 +36,7 @@ class PipelineInfoBag { * Full clip checks are slow, but they are * preventing visual artifacts, which can happen * for big 3D objects (or objects near camera eyes) + * Force enabled in dynamic pipe, because of efficiency. */ bool noFullClipChecks; }; diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_lighting_options.hpp similarity index 89% rename from engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp rename to engine/inc/renderer/3d/pipeline/shared/pipeline_lighting_options.hpp index 039e681..df8d484 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_lighting_options.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_lighting_options.hpp @@ -15,10 +15,10 @@ namespace Tyra { -class StaPipLightingOptions { +class PipelineLightingOptions { public: - StaPipLightingOptions() {} - ~StaPipLightingOptions() {} + PipelineLightingOptions() {} + ~PipelineLightingOptions() {} /** * Mandatory. diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_shading_type.hpp similarity index 85% rename from engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp rename to engine/inc/renderer/3d/pipeline/shared/pipeline_shading_type.hpp index 441beee..9fa387f 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_shading_type.hpp @@ -13,8 +13,8 @@ namespace Tyra { enum PipelineShadingType { - StaPipShadingFlat, - StaPipShadingGouraud, + TyraShadingFlat, + TyraShadingGouraud, }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index 756389f..f1a4cf6 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -10,8 +10,8 @@ #pragma once -#include "renderer/3d/pipeline/shared/bag/pipeline_shading_type.hpp" -#include "./stapip_lighting_options.hpp" +#include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" +#include "../shared/pipeline_lighting_options.hpp" namespace Tyra { @@ -35,7 +35,7 @@ class StaPipOptions { bool noFullClipChecks; /** Optional */ - StaPipLightingOptions* lighting; + PipelineLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 46b77db..09fa39f 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -12,10 +12,11 @@ #include #include "../renderer_3d_pipeline.hpp" -#include "./stapip_options.hpp" +#include "../shared/pipeline_lighting_options.hpp" #include "renderer/core/renderer_core.hpp" #include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" #include "./core/stapip_core.hpp" +#include "./stapip_options.hpp" namespace Tyra { @@ -54,7 +55,7 @@ class StaticPipeline : public Renderer3DPipeline { const StaPipOptions* options) const; void deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const; - void setLightingColorsCache(StaPipLightingOptions* lightingOptions); + void setLightingColorsCache(PipelineLightingOptions* lightingOptions); }; } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp index 4136fe6..779d4e9 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp @@ -18,4 +18,76 @@ DynPipQBuffer::DynPipQBuffer() {} DynPipQBuffer::~DynPipQBuffer() {} +void DynPipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } + +void DynPipQBuffer::print() const { + auto text = getPrint(nullptr); + printf("%s\n", text.c_str()); +} + +void DynPipQBuffer::print(const char* name) const { + auto text = getPrint(name); + printf("%s\n", text.c_str()); +} + +std::string DynPipQBuffer::getPrint(const char* name) const { + std::stringstream res; + if (name) { + res << name << "("; + } else { + res << "DynPipQBuffer("; + } + res << std::fixed << std::setprecision(2); + res << std::endl; + res << "Size: " << static_cast(size) << std::endl; + + res << "Vertices from: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << verticesFrom[i].getPrint() << std::endl; + + res << "Vertices to: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << verticesTo[i].getPrint() << std::endl; + + if (bag->texture != nullptr) { + res << "STs from: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << stsFrom[i].getPrint() << std::endl; + + res << "STs to: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << stsTo[i].getPrint() << std::endl; + } + + if (bag->color->manyFrom != nullptr) { + res << "Colors from: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << colorsFrom[i].getPrint() << std::endl; + } + + if (bag->color->manyTo != nullptr) { + res << "Colors to: " << std::endl; + for (u32 i = 0; i < size; i++) + res << i << ": " << colorsTo[i].getPrint() << std::endl; + } + + if (bag->lighting != nullptr) { + res << "Normals from: " << std::endl; + for (u32 i = 0; i < size; i++) { + res << i << ": " << normalsFrom[i].getPrint() << std::endl; + } + + res << "Normals to: " << std::endl; + for (u32 i = 0; i < size; i++) { + res << i << ": " << normalsTo[i].getPrint(); + if (i < size - 1) { + res << std::endl; + } + } + } + + res << ")"; + return res.str(); +} + } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp index 84abba6..d437daa 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp @@ -31,28 +31,39 @@ std::string DynPipTDVU1Program::getStringName() const { void DynPipTDVU1Program::addProgramQBufferDataToPacket( packet2_t* packet, DynPipQBuffer* qbuffer) const { - // u32 addr = VU1_VERT_DATA_ADDR; + u32 addr = VU1_VERT_DATA_ADDR; - // // Add vertices - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, - // qbuffer->size, true); - // addr += qbuffer->size; + // Add vertices + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->verticesFrom, + qbuffer->size, true); + addr += qbuffer->size; + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->verticesTo, + qbuffer->size, true); + addr += qbuffer->size; - // // Add sts - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->sts, qbuffer->size, - // true); - // addr += qbuffer->size; + // Add sts + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->stsFrom, + qbuffer->size, true); + addr += qbuffer->size; + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->stsTo, qbuffer->size, + true); + addr += qbuffer->size; - // // Add normal - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normals, - // qbuffer->size, true); + // Add normal + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normalsFrom, + qbuffer->size, true); + addr += qbuffer->size; + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normalsTo, + qbuffer->size, true); + addr += qbuffer->size; - // // Add colors - // if (qbuffer->bag->color->single == nullptr) { - // addr += qbuffer->size; - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, - // qbuffer->size, true); - // } + // Add colors + if (qbuffer->bag->color->singleFrom == nullptr) { + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colorsFrom, + qbuffer->size, true); + packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colorsTo, + qbuffer->size, true); + } } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index 8b74c7a..1744bcb 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -20,6 +20,213 @@ void DynamicPipeline::init(RendererCore* t_core) {} void DynamicPipeline::onUse() {} -void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) {} +void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { + auto model = mesh->getModelMatrix(); + + MeshFrame* frameFrom = mesh->getFramesCount() > 0 + ? mesh->getFrame(mesh->getCurrentAnimationFrame()) + : mesh->getFrame(0); + + MeshFrame* frameTo = mesh->getFramesCount() > 0 + ? mesh->getFrame(mesh->getNextAnimationFrame()) + : nullptr; + + // auto* infoBag = getInfoBag(mesh, options, &model); + + if (options && options->lighting) setLightingColorsCache(options->lighting); + + for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { + auto* material = mesh->getMaterial(i); + + // 2x bufory[maxVertCount*2] -> pętla po mniejszych częściach i czestsze + // rendery + + // TODO: Double buffering in future + // auto maxVertCount = core->renderer3D.getMaxVertCountByParams( + // material->isSingleColorActivated(), material->getNormalFaces(), + // material->getTextureCoordFaces()); + + DynPipBag bag; + addVertices(mesh, material, &bag, frameFrom, frameTo); + // bag.info = infoBag; + // bag.color = getColorBag(mesh, material, frameFrom, frameTo); + // bag.texture = getTextureBag(mesh, material, frameFrom, frameTo); + // bag.lighting = + // getLightingBag(mesh, material, &model, frameFrom, frameTo, options); + + core.render(&bag); + + // deallocDrawBags(&bag, material); + } + + // delete infoBag; // TODO +} + +void DynamicPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, + DynPipBag* bag, MeshFrame* frameFrom, + MeshFrame* frameTo) const { + // bag->count = material->getFacesCount(); + // bag->vertices = new Vec4[bag->count]; + + // for (u32 i = 0; i < bag->count; i++) { + // auto& face = material->getVertexFaces()[i]; + // if (frameTo == nullptr) { + // bag->vertices[i] = frameFrom->getVertices()[face]; + // } else { + // Vec4::setLerp(&bag->vertices[i], frameFrom->getVertices()[face], + // frameTo->getVertices()[face], + // mesh->getAnimState().interpolation); + // } + // } +} + +PipelineInfoBag* DynamicPipeline::getInfoBag(DynamicMesh* mesh, + const DynPipOptions* options, + M4x4* model) const { + auto* result = new PipelineInfoBag(); + + if (options) { + result->antiAliasingEnabled = options->antiAliasingEnabled; + result->blendingEnabled = options->blendingEnabled; + result->shadingType = options->shadingType; + } else { + result->antiAliasingEnabled = false; + result->blendingEnabled = true; + result->shadingType = TyraShadingFlat; + } + + result->model = model; + + return result; +} + +DynPipColorBag* DynamicPipeline::getColorBag(DynamicMesh* mesh, + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) const { + // auto* result = new DynPipColorBag(); + + // if (material->isSingleColorActivated()) { + // result->single = &material->singleColor; + // } else { + // result->many = new Color[material->getFacesCount()]; + + // for (u32 i = 0; i < material->getFacesCount(); i++) { + // auto& face = material->getColorFaces()[i]; + // if (frameTo == nullptr) { + // result->many[i] = frameFrom->getColors()[face]; + // } else { + // Vec4::setLerp( + // reinterpret_cast(&result->many[i]), + // reinterpret_cast(frameFrom->getColors()[face]), + // reinterpret_cast(frameTo->getColors()[face]), + // mesh->getAnimState().interpolation); + // } + // } + // } + + // return result; + return nullptr; // TODO +} + +DynPipTextureBag* DynamicPipeline::getTextureBag(DynamicMesh* mesh, + MeshMaterial* material, + MeshFrame* frameFrom, + MeshFrame* frameTo) { + // if (!material->getTextureCoordFaces()) return nullptr; + + // auto* result = new DynPipTextureBag(); + + // result->texture = + // rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); + // TYRA_ASSERT(result->texture, "Texture for material id: ", + // material->getId(), + // " was not found in texture repository!"); + + // result->coordinates = new Vec4[material->getFacesCount()]; + + // for (u32 i = 0; i < material->getFacesCount(); i++) { + // auto& face = material->getTextureCoordFaces()[i]; + // if (frameTo == nullptr) { + // result->coordinates[i] = frameFrom->getTextureCoords()[face]; + // } else { + // Vec4::setLerp(&result->coordinates[i], + // frameFrom->getTextureCoords()[face], + // frameTo->getTextureCoords()[face], + // mesh->getAnimState().interpolation); + // } + // } + + // return result; + return nullptr; // TODO +} + +DynPipLightingBag* DynamicPipeline::getLightingBag( + DynamicMesh* mesh, MeshMaterial* material, M4x4* model, + MeshFrame* frameFrom, MeshFrame* frameTo, + const DynPipOptions* options) const { + // if (!material->getNormalFaces() || options == nullptr || + // options->lighting == nullptr) + // return nullptr; + + // auto* result = new DynPipLightingBag(); + // auto* dirLightsBag = new PipelineDirLightsBag(true); + // result->dirLights = dirLightsBag; + + // result->lightMatrix = model; + + // result->dirLights->setLightsManually( + // colorsCache, options->lighting->directionalDirections); + + // result->normals = new Vec4[material->getFacesCount()]; + + // for (u32 i = 0; i < material->getFacesCount(); i++) { + // auto& face = material->getNormalFaces()[i]; + // if (frameTo == nullptr) { + // result->normals[i] = frameFrom->getNormals()[face]; + // } else { + // Vec4::setLerp(&result->normals[i], frameFrom->getNormals()[face], + // frameTo->getNormals()[face], + // mesh->getAnimState().interpolation); + // } + // } + + // return result; + return nullptr; // TODO +} + +void DynamicPipeline::setLightingColorsCache( + PipelineLightingOptions* lightingOptions) { + for (int i = 0; i < 3; i++) { + colorsCache[i] = + reinterpret_cast(lightingOptions->directionalColors[i]); + } + colorsCache[3] = reinterpret_cast(*lightingOptions->ambientColor); +} + +void DynamicPipeline::deallocDrawBags(DynPipBag* bag, + MeshMaterial* material) const { + if (bag->color->manyFrom) { + delete[] bag->color->manyFrom; + delete[] bag->color->manyTo; + } + + if (bag->texture) { + delete[] bag->texture->coordinatesFrom; + delete[] bag->texture->coordinatesTo; + delete bag->texture; + } + + if (bag->lighting) { + delete[] bag->lighting->normalsFrom; + delete[] bag->lighting->normalsTo; + delete bag->lighting->dirLights; + delete bag->lighting; + } + + delete[] bag->verticesFrom; + delete[] bag->verticesTo; + delete bag->color; +} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp index 2389618..e42b02e 100644 --- a/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp +++ b/engine/src/renderer/3d/pipeline/shared/bag/pipeline_info_bag.cpp @@ -13,7 +13,7 @@ namespace Tyra { PipelineInfoBag::PipelineInfoBag() { - shadingType = StaPipShadingFlat; + shadingType = TyraShadingFlat; blendingEnabled = true; antiAliasingEnabled = false; model = nullptr; diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp index 56ef9ae..03825a6 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer.cpp @@ -228,13 +228,13 @@ std::string StaPipQBuffer::getPrint(const char* name) const { if (name) { res << name << "("; } else { - res << "Path1Buffer("; + res << "StaPipQBuffer("; } res << std::fixed << std::setprecision(2); res << std::endl; res << "Size: " << static_cast(size) << std::endl; - res << "Vectors: " << std::endl; + res << "Vertices: " << std::endl; for (u32 i = 0; i < size; i++) res << i << ": " << vertices[i].getPrint() << std::endl; diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index b568764..f54a603 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -36,7 +36,7 @@ void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { auto* infoBag = getInfoBag(mesh, options, &model); - if (options->lighting) setLightingColorsCache(options->lighting); + if (options && options->lighting) setLightingColorsCache(options->lighting); for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); @@ -96,7 +96,7 @@ PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, } else { result->antiAliasingEnabled = false; result->blendingEnabled = true; - result->shadingType = StaPipShadingFlat; + result->shadingType = TyraShadingFlat; result->noFullClipChecks = false; } @@ -197,7 +197,7 @@ StaPipLightingBag* StaticPipeline::getLightingBag( } void StaticPipeline::setLightingColorsCache( - StaPipLightingOptions* lightingOptions) { + PipelineLightingOptions* lightingOptions) { for (int i = 0; i < 3; i++) { colorsCache[i] = reinterpret_cast(lightingOptions->directionalColors[i]); diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index 8d62c75..de13f2d 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -14,6 +14,7 @@ #include #include "renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp" #include "renderer/3d/pipeline/static/static_pipeline.hpp" +#include "renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp" namespace Tyra { @@ -39,6 +40,7 @@ class H4570 : public Game { Vec4 cameraPosition, cameraLookAt; MinecraftPipeline mcPip; + DynamicPipeline dynpip; StaticPipeline stapip; StaPipOptions* renderOptions; Texture* blocksTex; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index b0a0ece..7d08daa 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -65,6 +65,7 @@ void H4570::init() { FileUtils::fromCwd("blocks.png")); mcPip.init(&engine->renderer.core); + dynpip.init(&engine->renderer.core); stapip.init(&engine->renderer.core); picture = get2DPicture(&engine->renderer); @@ -137,13 +138,16 @@ void H4570::loop() { // engine->renderer.renderer2D.render(picture); - engine->renderer.renderer3D.usePipeline(&stapip); - { - stapip.render(warrior, renderOptions); - // stapip.render(warrior2, renderOptions); - // stapip.render(warrior3, renderOptions); - // stapip.render(warrior4, renderOptions); - } + // engine->renderer.renderer3D.usePipeline(&stapip); + // { + // stapip.render(warrior, renderOptions); + // // stapip.render(warrior2, renderOptions); + // // stapip.render(warrior3, renderOptions); + // // stapip.render(warrior4, renderOptions); + // } + + engine->renderer.renderer3D.usePipeline(&dynpip); + { dynpip.render(warrior); } engine->renderer.renderer3D.usePipeline(&mcPip); { mcPip.render(blocks, blocksCount, blocksTex, false); } @@ -189,12 +193,12 @@ StaPipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StaPipLightingOptions(); // Memory leak! + auto* lightingOptions = new PipelineLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StaPipShadingGouraud; + options->shadingType = Tyra::TyraShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; diff --git a/samples/wellinator/src/wellinator.cpp b/samples/wellinator/src/wellinator.cpp index 05482e6..3658058 100644 --- a/samples/wellinator/src/wellinator.cpp +++ b/samples/wellinator/src/wellinator.cpp @@ -160,12 +160,12 @@ StaPipOptions* getRenderingOptions() { for (int i = 0; i < 3; i++) directionalDirections[i].set(1.0F, 1.0F, 1.0F, 1.0F); - auto* lightingOptions = new StaPipLightingOptions(); // Memory leak! + auto* lightingOptions = new PipelineLightingOptions(); // Memory leak! lightingOptions->ambientColor = ambientColor; lightingOptions->directionalColors = directionalColors; lightingOptions->directionalDirections = directionalDirections; - options->shadingType = Tyra::StaPipShadingGouraud; + options->shadingType = Tyra::TyraShadingGouraud; options->blendingEnabled = true; options->antiAliasingEnabled = false; options->lighting = lightingOptions; From 2c72abe081da959eb149b536472391b195053326 Mon Sep 17 00:00:00 2001 From: h4570 Date: Thu, 21 Jul 2022 17:47:10 +0200 Subject: [PATCH 17/33] dynamic pipeline - render --- ROADMAP.txt | 2 + .../dynamic/core/bag/dynpip_color_bag.hpp | 9 +- .../dynamic/core/bag/dynpip_lighting_bag.hpp | 2 + .../dynamic/core/bag/dynpip_texture_bag.hpp | 2 + .../3d/pipeline/dynamic/core/dynpip_core.hpp | 10 + .../core/dynpip_programs_repository.hpp | 4 + .../pipeline/dynamic/core/dynpip_qbuffer.hpp | 3 - .../dynamic/core/dynpip_qbuffer_renderer.hpp | 68 +++++ .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 19 +- .../3d/pipeline/dynamic/dynpip_options.hpp | 12 +- .../3d/pipeline/shared/pipeline_options.hpp | 31 ++ .../3d/pipeline/static/stapip_options.hpp | 12 +- .../core/texture/texture_repository.hpp | 18 +- .../pipeline/dynamic/core/bag/dynpip_bag.cpp | 14 +- .../dynamic/core/bag/dynpip_color_bag.cpp | 7 +- .../dynamic/core/bag/dynpip_lighting_bag.cpp | 5 + .../dynamic/core/bag/dynpip_texture_bag.cpp | 5 + .../3d/pipeline/dynamic/core/dynpip_core.cpp | 12 +- .../core/dynpip_programs_repository.cpp | 12 + .../pipeline/dynamic/core/dynpip_qbuffer.cpp | 12 - .../dynamic/core/dynpip_qbuffer_renderer.cpp | 19 ++ .../core/programs/dynpip_td_vu1_program.cpp | 8 - .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 273 ++++++++---------- .../3d/pipeline/static/static_pipeline.cpp | 7 +- .../renderer/core/texture/models/texture.cpp | 13 +- .../core/texture/texture_repository.cpp | 21 +- samples/h4570/inc/h4570.hpp | 4 +- samples/h4570/src/h4570.cpp | 34 ++- 28 files changed, 382 insertions(+), 256 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp create mode 100644 engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp diff --git a/ROADMAP.txt b/ROADMAP.txt index 53f5dd4..853fae4 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -21,6 +21,8 @@ - [General] Control generated id to avoid duplication. Maybe Just increment from 0? Add interface IIdentificable? +- [General] rsync is excluding folder like "objects" lol XD + - [DMA] Check if all chain transfers have end tag! - [General] Change libs of sample? (remove -lpng, -lz...), probably they are not required diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp index 39f42c7..c6d7065 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.hpp @@ -22,13 +22,8 @@ class DynPipColorBag { DynPipColorBag(); ~DynPipColorBag(); - /** Optional. Single color for all vertices. */ - Color* singleFrom; - Color* singleTo; - - /** Optional. Color per vertex. */ - Color* manyFrom; - Color* manyTo; + /** Mandatory */ + Color* single; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp index 6f1797f..3f0bfec 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.hpp @@ -29,6 +29,8 @@ class DynPipLightingBag { /** Mandatory. Directional lights */ PipelineDirLightsBag* dirLights; + + void freeNormals(); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp index eb2d246..f08863b 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.hpp @@ -26,6 +26,8 @@ class DynPipTextureBag { /** Mandatory. Texture image. */ Texture* texture; + + void freeCoords(); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 4e60735..8f48a1e 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -13,6 +13,8 @@ #include #include "./bag/dynpip_bag.hpp" #include "renderer/core/renderer_core.hpp" +#include "./dynpip_programs_repository.hpp" +#include "./dynpip_qbuffer_renderer.hpp" namespace Tyra { @@ -21,11 +23,18 @@ class DynPipCore { DynPipCore(); ~DynPipCore(); + DynPipProgramsRepository repository; + void init(RendererCore* t_core); /** Render 3D via "bags" */ void render(DynPipBag* data); + /** Get max vert count of VU1 qbuffer (for optimizations) */ + u32 getMaxVertCountByParams(const bool& isSingleColor, + const bool& isLightingEnabled, + const bool& isTextureEnabled); + /** * - Uploads standard VU1 programs. * - Sends static "Tyra Renderer3D" VU1 data. @@ -36,6 +45,7 @@ class DynPipCore { private: RendererCore* rendererCore; + DynPipQBufferRenderer qbufferRenderer; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp index 6b7a442..c53f9cf 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.hpp @@ -12,6 +12,7 @@ #include "debug/debug.hpp" #include "renderer/core/paths/path1/vu1_program.hpp" +#include "./bag/dynpip_bag.hpp" #include "./programs/dynpip_c_vu1_program.hpp" #include "./programs/dynpip_d_vu1_program.hpp" @@ -26,6 +27,9 @@ class DynPipProgramsRepository { ~DynPipProgramsRepository(); DynPipVU1Program* getProgram(const DynPipProgramName& name); + DynPipVU1Program* getProgramByParams(const bool& isLightingEnabled, + const bool& isTextureEnabled); + DynPipVU1Program* getProgramByBag(const DynPipBag* bag); private: DynPipCVU1Program color; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp index 192fc7a..a7b0673 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp @@ -29,9 +29,6 @@ class DynPipQBuffer { Vec4* stsFrom; Vec4* stsTo; - Vec4* colorsFrom; - Vec4* colorsTo; - Vec4* normalsFrom; Vec4* normalsTo; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp new file mode 100644 index 0000000..da7d201 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp @@ -0,0 +1,68 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include + +namespace Tyra { + +class DynPipQBufferRenderer { + public: + DynPipQBufferRenderer(); + ~DynPipQBufferRenderer(); + + // void init(RendererCore* t_core); + + // void reinitVU1(); + + // DynPipQBuffer* getBuffer(); + + // void sendObjectData(DynPipBag* bag, M4x4* mvp, + // RendererCoreTextureBuffers* texBuffers) const; + + // void setMaxVertCount(const u32& count); + + // void setInfo(PipelineInfoBag* bag); + + // void render(DynPipQBuffer* buffer); + + // void clearLastProgramName(); + + const u16& getBufferSize() { return bufferSize; } + + private: + // void sendStaticData() const; + // void setProgramsCache(); + // void uploadPrograms(); + // void setDoubleBuffer(); + + // void addBufferDataToPacket(DynPipVU1Program* program, DynPipQBuffer* + // buffer); void sendPacket(); + + // packet2_t* packets[2]; + // packet2_t* programsPacket; + // DynPipQBuffer buffers[2]; + // packet2_t* currentPacket; + // packet2_t* staticDataPacket; + // packet2_t* objectDataPacket; + + // RendererCore* rendererCore; + + // DynPipProgramName lastProgramName; + // Path1* path1; + // DynPipClipper clipper; + // DynPipProgramsRepository repository; + + u16 bufferSize; + // u8 context; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index 5ba6f94..9c6ceb4 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -41,20 +41,27 @@ class DynamicPipeline : public Renderer3DPipeline { Vec4* colorsCache; void addVertices(DynamicMesh* mesh, MeshMaterial* material, DynPipBag* bag, - MeshFrame* frameFrom, MeshFrame* frameTo) const; + MeshFrame* frameFrom, MeshFrame* frameTo, + const u32& startIndex) const; PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const DynPipOptions* options, M4x4* model) const; - DynPipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo) const; + DynPipColorBag* getColorBag(MeshMaterial* material) const; DynPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo); + MeshFrame* frameFrom, MeshFrame* frameTo, + const u32& count, const u32& startIndex); DynPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, M4x4* model, MeshFrame* frameFrom, MeshFrame* frameTo, - const DynPipOptions* options) const; - void deallocDrawBags(DynPipBag* bag, MeshMaterial* material) const; + const DynPipOptions* options, + PipelineDirLightsBag* dirLightsBag, + const u32& count, + const u32& startIndex) const; void setLightingColorsCache(PipelineLightingOptions* lightingOptions); + void freeBuffer(DynPipBag* bag); + void setBuffersDefaultVars(DynPipBag* buffers, DynamicMesh* mesh, + PipelineInfoBag* infoBag); + void setBuffersColorBag(DynPipBag* buffers, DynPipColorBag* colorBag); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp index a3dcd96..ece1bad 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp @@ -10,22 +10,14 @@ #pragma once -#include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" -#include "../shared/pipeline_lighting_options.hpp" +#include "renderer/3d/pipeline/shared/pipeline_options.hpp" namespace Tyra { -class DynPipOptions { +class DynPipOptions : public PipelineOptions { public: DynPipOptions() {} ~DynPipOptions() {} - - PipelineShadingType shadingType; - bool blendingEnabled; - bool antiAliasingEnabled; - - /** Optional */ - PipelineLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp new file mode 100644 index 0000000..000ccdd --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp @@ -0,0 +1,31 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" +#include "../shared/pipeline_lighting_options.hpp" + +namespace Tyra { + +class PipelineOptions { + public: + PipelineOptions() {} + ~PipelineOptions() {} + + PipelineShadingType shadingType; + bool blendingEnabled; + bool antiAliasingEnabled; + + /** Optional */ + PipelineLightingOptions* lighting; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index f1a4cf6..17108d6 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -10,20 +10,15 @@ #pragma once -#include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" -#include "../shared/pipeline_lighting_options.hpp" +#include "renderer/3d/pipeline/shared/pipeline_options.hpp" namespace Tyra { -class StaPipOptions { +class StaPipOptions : public PipelineOptions { public: StaPipOptions() {} ~StaPipOptions() {} - PipelineShadingType shadingType; - bool blendingEnabled; - bool antiAliasingEnabled; - /** * @brief True -> disables "clip against each plane" algorithm. * Mandatory, default: false. @@ -33,9 +28,6 @@ class StaPipOptions { * for big 3D objects (or objects near camera eyes) */ bool noFullClipChecks; - - /** Optional */ - PipelineLightingOptions* lighting; }; } // namespace Tyra diff --git a/engine/inc/renderer/core/texture/texture_repository.hpp b/engine/inc/renderer/core/texture/texture_repository.hpp index 93aa353..6ab1638 100644 --- a/engine/inc/renderer/core/texture/texture_repository.hpp +++ b/engine/inc/renderer/core/texture/texture_repository.hpp @@ -36,31 +36,19 @@ class TextureRepository { * For 3D: MeshMaterial id. * For 2D: Sprite id. */ - Texture* getBySpriteOrMesh(const u32& t_id) { - for (u32 i = 0; i < textures.size(); i++) - if (textures[i]->isLinkedWith(t_id)) return textures[i]; - return nullptr; - } + Texture* getBySpriteOrMesh(const u32& t_id) const; /** * Returns single texture. * nullptr if not found. */ - Texture* getByTextureId(const u32& t_id) const { - for (u32 i = 0; i < textures.size(); i++) - if (t_id == textures[i]->getId()) return textures[i]; - return nullptr; - } + Texture* getByTextureId(const u32& t_id) const; /** * Returns index of link. * -1 if not found. */ - const s32 getIndexOf(const u32& t_texId) const { - for (u32 i = 0; i < textures.size(); i++) - if (textures[i]->getId() == t_texId) return i; - return -1; - } + const s32 getIndexOf(const u32& t_texId) const; // ---- // Setters diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp index 983054f..0578573 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_bag.cpp @@ -19,6 +19,8 @@ DynPipBag::DynPipBag() { color = nullptr; texture = nullptr; lighting = nullptr; + verticesFrom = nullptr; + verticesTo = nullptr; } DynPipBag::~DynPipBag() {} @@ -56,16 +58,8 @@ std::string DynPipBag::getPrint(const char* name) const { res << "Lighting present: " << (lighting != nullptr ? "Yes" : "No") << ", " << std::endl; res << "Model matrix: " << info->model->getPrint() << ", " << std::endl; - if (color->singleFrom) { - res << "Color from single: " << color->singleFrom->getPrint() << ", " - << std::endl; - res << "Color to single: " << color->singleTo->getPrint() << ", " - << std::endl; - } else { - res << "Color many from present: " - << (color->manyFrom != nullptr ? "Yes" : "No") << ", " << std::endl; - res << "Color many to present: " - << (color->manyTo != nullptr ? "Yes" : "No") << ", " << std::endl; + if (color->single) { + res << "Color single: " << color->single->getPrint() << ", " << std::endl; } if (texture) { res << "Texture coords from present: " diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp index d196bcd..e942ef6 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_color_bag.cpp @@ -12,12 +12,7 @@ namespace Tyra { -DynPipColorBag::DynPipColorBag() { - singleFrom = nullptr; - singleTo = nullptr; - manyFrom = nullptr; - manyTo = nullptr; -} +DynPipColorBag::DynPipColorBag() { single = nullptr; } DynPipColorBag::~DynPipColorBag() {} diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp index 8d6872c..c33b89f 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_lighting_bag.cpp @@ -21,4 +21,9 @@ DynPipLightingBag::DynPipLightingBag() { DynPipLightingBag::~DynPipLightingBag() {} +void DynPipLightingBag::freeNormals() { + if (normalsFrom) delete[] normalsFrom; + if (normalsTo) delete[] normalsTo; +} + } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp index ccfc152..a47a44b 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/bag/dynpip_texture_bag.cpp @@ -20,4 +20,9 @@ DynPipTextureBag::DynPipTextureBag() { DynPipTextureBag::~DynPipTextureBag() {} +void DynPipTextureBag::freeCoords() { + if (coordinatesFrom) delete[] coordinatesFrom; + if (coordinatesTo) delete[] coordinatesTo; +} + } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index c358534..8d80a60 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -22,6 +22,16 @@ void DynPipCore::init(RendererCore* t_core) { rendererCore = t_core; } void DynPipCore::reinitVU1Programs() {} -void DynPipCore::render(DynPipBag* bag) {} +u32 DynPipCore::getMaxVertCountByParams(const bool& isSingleColor, + const bool& isLightingEnabled, + const bool& isTextureEnabled) { + return repository.getProgramByParams(isLightingEnabled, isTextureEnabled) + ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); +} + +void DynPipCore::render(DynPipBag* bag) { + // Zrobic bbox + // TODO: Potem wrzucic programy i obliczyc bufferSize w qbufferrenderer +} } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp index d07db08..3150486 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp @@ -16,6 +16,18 @@ DynPipProgramsRepository::DynPipProgramsRepository() {} DynPipProgramsRepository::~DynPipProgramsRepository() {} +DynPipVU1Program* DynPipProgramsRepository::getProgramByParams( + const bool& isLightingEnabled, const bool& isTextureEnabled) { + if (isLightingEnabled && isTextureEnabled) + return &textureDirLights; + else if (isLightingEnabled) + return &dirLights; + else if (isTextureEnabled) + return &textureColor; + else + return &color; +} + DynPipVU1Program* DynPipProgramsRepository::getProgram( const DynPipProgramName& name) { switch (name) { diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp index 779d4e9..86f9096 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp @@ -59,18 +59,6 @@ std::string DynPipQBuffer::getPrint(const char* name) const { res << i << ": " << stsTo[i].getPrint() << std::endl; } - if (bag->color->manyFrom != nullptr) { - res << "Colors from: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << colorsFrom[i].getPrint() << std::endl; - } - - if (bag->color->manyTo != nullptr) { - res << "Colors to: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << colorsTo[i].getPrint() << std::endl; - } - if (bag->lighting != nullptr) { res << "Normals from: " << std::endl; for (u32 i = 0; i < size; i++) { diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp new file mode 100644 index 0000000..1ba92c7 --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp @@ -0,0 +1,19 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" + +namespace Tyra { + +DynPipQBufferRenderer::DynPipQBufferRenderer() {} +DynPipQBufferRenderer::~DynPipQBufferRenderer() {} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp index d437daa..ce66464 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp @@ -56,14 +56,6 @@ void DynPipTDVU1Program::addProgramQBufferDataToPacket( packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normalsTo, qbuffer->size, true); addr += qbuffer->size; - - // Add colors - if (qbuffer->bag->color->singleFrom == nullptr) { - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colorsFrom, - qbuffer->size, true); - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colorsTo, - qbuffer->size, true); - } } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index 1744bcb..6a84017 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -12,72 +12,108 @@ namespace Tyra { -DynamicPipeline::DynamicPipeline() {} +DynamicPipeline::DynamicPipeline() { colorsCache = new Vec4[4]; } -DynamicPipeline::~DynamicPipeline() {} +DynamicPipeline::~DynamicPipeline() { delete[] colorsCache; } -void DynamicPipeline::init(RendererCore* t_core) {} +void DynamicPipeline::init(RendererCore* t_core) { rendererCore = t_core; } void DynamicPipeline::onUse() {} void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto model = mesh->getModelMatrix(); + auto* frameFrom = mesh->getFrame(mesh->getCurrentAnimationFrame()); + auto* frameTo = mesh->getFrame(mesh->getNextAnimationFrame()); + auto* infoBag = getInfoBag(mesh, options, &model); + PipelineDirLightsBag* dirLights = nullptr; - MeshFrame* frameFrom = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getCurrentAnimationFrame()) - : mesh->getFrame(0); + if (options && options->lighting) { + setLightingColorsCache(options->lighting); + dirLights = new PipelineDirLightsBag(true); + dirLights->setLightsManually(colorsCache, + options->lighting->directionalDirections); + } - MeshFrame* frameTo = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getNextAnimationFrame()) - : nullptr; + DynPipBag buffers[2]; + u8 context = 0; - // auto* infoBag = getInfoBag(mesh, options, &model); - - if (options && options->lighting) setLightingColorsCache(options->lighting); + setBuffersDefaultVars(buffers, mesh, infoBag); for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); + auto partSize = core.getMaxVertCountByParams( + material->isSingleColorActivated(), options && options->lighting, + material->getTextureCoordFaces()); + u32 partsCount = + ceil(material->getFacesCount() / static_cast(partSize)); + auto* colorBag = getColorBag(material); + setBuffersColorBag(buffers, colorBag); - // 2x bufory[maxVertCount*2] -> pętla po mniejszych częściach i czestsze - // rendery + for (u32 j = 0; j < partsCount; j++) { + auto& buffer = buffers[context]; - // TODO: Double buffering in future - // auto maxVertCount = core->renderer3D.getMaxVertCountByParams( - // material->isSingleColorActivated(), material->getNormalFaces(), - // material->getTextureCoordFaces()); + freeBuffer(&buffer); + buffer.count = j == partsCount - 1 + ? material->getFacesCount() - j * partSize + : partSize; - DynPipBag bag; - addVertices(mesh, material, &bag, frameFrom, frameTo); - // bag.info = infoBag; - // bag.color = getColorBag(mesh, material, frameFrom, frameTo); - // bag.texture = getTextureBag(mesh, material, frameFrom, frameTo); - // bag.lighting = - // getLightingBag(mesh, material, &model, frameFrom, frameTo, options); + u32 startIndex = j * partSize; - core.render(&bag); + addVertices(mesh, material, &buffer, frameFrom, frameTo, startIndex); + buffer.texture = getTextureBag(mesh, material, frameFrom, frameTo, + buffer.count, startIndex); + buffer.lighting = + getLightingBag(mesh, material, &model, frameFrom, frameTo, options, + dirLights, buffer.count, startIndex); - // deallocDrawBags(&bag, material); + core.render(&buffer); + + context = !context; + } + + freeBuffer(&buffers[context]); + freeBuffer(&buffers[!context]); + + delete colorBag; } - // delete infoBag; // TODO + delete infoBag; } -void DynamicPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, - DynPipBag* bag, MeshFrame* frameFrom, - MeshFrame* frameTo) const { - // bag->count = material->getFacesCount(); - // bag->vertices = new Vec4[bag->count]; +void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, + DynamicMesh* mesh, + PipelineInfoBag* infoBag) { + for (int i = 0; i < 2; i++) { + buffers[i].info = infoBag; + buffers[i].interpolation = mesh->getAnimState().interpolation; + } +} - // for (u32 i = 0; i < bag->count; i++) { - // auto& face = material->getVertexFaces()[i]; - // if (frameTo == nullptr) { - // bag->vertices[i] = frameFrom->getVertices()[face]; - // } else { - // Vec4::setLerp(&bag->vertices[i], frameFrom->getVertices()[face], - // frameTo->getVertices()[face], - // mesh->getAnimState().interpolation); - // } - // } +void DynamicPipeline::setBuffersColorBag(DynPipBag* buffers, + DynPipColorBag* colorBag) { + for (int i = 0; i < 2; i++) { + buffers[i].color = colorBag; + } +} + +void DynamicPipeline::freeBuffer(DynPipBag* bag) { + if (bag->texture) { + bag->texture->freeCoords(); + delete bag->texture; + } + + if (bag->lighting) { + bag->lighting->freeNormals(); + delete bag->lighting; + } + + if (bag->verticesFrom) { + delete[] bag->verticesFrom; + } + + if (bag->verticesTo) { + delete[] bag->verticesTo; + } } PipelineInfoBag* DynamicPipeline::getInfoBag(DynamicMesh* mesh, @@ -100,99 +136,71 @@ PipelineInfoBag* DynamicPipeline::getInfoBag(DynamicMesh* mesh, return result; } -DynPipColorBag* DynamicPipeline::getColorBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) const { - // auto* result = new DynPipColorBag(); +void DynamicPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, + DynPipBag* bag, MeshFrame* frameFrom, + MeshFrame* frameTo, + const u32& startIndex) const { + bag->verticesFrom = new Vec4[bag->count]; + bag->verticesTo = new Vec4[bag->count]; - // if (material->isSingleColorActivated()) { - // result->single = &material->singleColor; - // } else { - // result->many = new Color[material->getFacesCount()]; - - // for (u32 i = 0; i < material->getFacesCount(); i++) { - // auto& face = material->getColorFaces()[i]; - // if (frameTo == nullptr) { - // result->many[i] = frameFrom->getColors()[face]; - // } else { - // Vec4::setLerp( - // reinterpret_cast(&result->many[i]), - // reinterpret_cast(frameFrom->getColors()[face]), - // reinterpret_cast(frameTo->getColors()[face]), - // mesh->getAnimState().interpolation); - // } - // } - // } - - // return result; - return nullptr; // TODO + for (u32 i = startIndex; i < startIndex + bag->count; i++) { + auto& face = material->getVertexFaces()[i]; + bag->verticesFrom[i] = frameFrom->getVertices()[face]; + bag->verticesTo[i] = frameTo->getVertices()[face]; + } } -DynPipTextureBag* DynamicPipeline::getTextureBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) { - // if (!material->getTextureCoordFaces()) return nullptr; +DynPipColorBag* DynamicPipeline::getColorBag(MeshMaterial* material) const { + auto* result = new DynPipColorBag(); + result->single = &material->singleColor; + return result; +} - // auto* result = new DynPipTextureBag(); +DynPipTextureBag* DynamicPipeline::getTextureBag( + DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, + MeshFrame* frameTo, const u32& count, const u32& startIndex) { + if (!material->getTextureCoordFaces()) return nullptr; - // result->texture = - // rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); - // TYRA_ASSERT(result->texture, "Texture for material id: ", - // material->getId(), - // " was not found in texture repository!"); + auto* result = new DynPipTextureBag(); + result->texture = + rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); + TYRA_ASSERT(result->texture, "Texture for material id: ", material->getId(), + "was not found in texture repository!"); - // result->coordinates = new Vec4[material->getFacesCount()]; + result->coordinatesFrom = new Vec4[count]; + result->coordinatesTo = new Vec4[count]; - // for (u32 i = 0; i < material->getFacesCount(); i++) { - // auto& face = material->getTextureCoordFaces()[i]; - // if (frameTo == nullptr) { - // result->coordinates[i] = frameFrom->getTextureCoords()[face]; - // } else { - // Vec4::setLerp(&result->coordinates[i], - // frameFrom->getTextureCoords()[face], - // frameTo->getTextureCoords()[face], - // mesh->getAnimState().interpolation); - // } - // } + for (u32 i = startIndex; i < startIndex + count; i++) { + auto& face = material->getTextureCoordFaces()[i]; + result->coordinatesFrom[i] = frameFrom->getTextureCoords()[face]; + result->coordinatesTo[i] = frameTo->getTextureCoords()[face]; + } - // return result; - return nullptr; // TODO + return result; } DynPipLightingBag* DynamicPipeline::getLightingBag( DynamicMesh* mesh, MeshMaterial* material, M4x4* model, - MeshFrame* frameFrom, MeshFrame* frameTo, - const DynPipOptions* options) const { - // if (!material->getNormalFaces() || options == nullptr || - // options->lighting == nullptr) - // return nullptr; + MeshFrame* frameFrom, MeshFrame* frameTo, const DynPipOptions* options, + PipelineDirLightsBag* dirLightsBag, const u32& count, + const u32& startIndex) const { + if (!material->getNormalFaces() || options == nullptr || + options->lighting == nullptr) + return nullptr; - // auto* result = new DynPipLightingBag(); - // auto* dirLightsBag = new PipelineDirLightsBag(true); - // result->dirLights = dirLightsBag; + auto* result = new DynPipLightingBag(); - // result->lightMatrix = model; + result->lightMatrix = model; + result->normalsFrom = new Vec4[count]; + result->normalsTo = new Vec4[count]; - // result->dirLights->setLightsManually( - // colorsCache, options->lighting->directionalDirections); + for (u32 i = startIndex; i < startIndex + count; i++) { + auto& face = material->getNormalFaces()[i]; + result->normalsFrom[i] = frameFrom->getNormals()[face]; + result->normalsTo[i] = frameTo->getNormals()[face]; + } - // result->normals = new Vec4[material->getFacesCount()]; - - // for (u32 i = 0; i < material->getFacesCount(); i++) { - // auto& face = material->getNormalFaces()[i]; - // if (frameTo == nullptr) { - // result->normals[i] = frameFrom->getNormals()[face]; - // } else { - // Vec4::setLerp(&result->normals[i], frameFrom->getNormals()[face], - // frameTo->getNormals()[face], - // mesh->getAnimState().interpolation); - // } - // } - - // return result; - return nullptr; // TODO + return result; } void DynamicPipeline::setLightingColorsCache( @@ -204,29 +212,4 @@ void DynamicPipeline::setLightingColorsCache( colorsCache[3] = reinterpret_cast(*lightingOptions->ambientColor); } -void DynamicPipeline::deallocDrawBags(DynPipBag* bag, - MeshMaterial* material) const { - if (bag->color->manyFrom) { - delete[] bag->color->manyFrom; - delete[] bag->color->manyTo; - } - - if (bag->texture) { - delete[] bag->texture->coordinatesFrom; - delete[] bag->texture->coordinatesTo; - delete bag->texture; - } - - if (bag->lighting) { - delete[] bag->lighting->normalsFrom; - delete[] bag->lighting->normalsTo; - delete bag->lighting->dirLights; - delete bag->lighting; - } - - delete[] bag->verticesFrom; - delete[] bag->verticesTo; - delete bag->color; -} - } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index f54a603..2e069c1 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -144,7 +144,7 @@ StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, result->texture = rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); TYRA_ASSERT(result->texture, "Texture for material id: ", material->getId(), - " was not found in texture repository!"); + "was not found in texture repository!"); result->coordinates = new Vec4[material->getFacesCount()]; @@ -172,7 +172,8 @@ StaPipLightingBag* StaticPipeline::getLightingBag( return nullptr; auto* result = new StaPipLightingBag(); - auto* dirLightsBag = new PipelineDirLightsBag(true); + auto* dirLightsBag = new PipelineDirLightsBag(true); // TODO: 1 dir + // lights per obiekt, dealokowac recznie result->dirLights = dirLightsBag; result->lightMatrix = model; @@ -218,7 +219,7 @@ void StaticPipeline::deallocDrawBags(StaPipBag* bag, if (bag->lighting) { delete[] bag->lighting->normals; - delete bag->lighting->dirLights; + delete bag->lighting->dirLights; // TODO delete bag->lighting; } diff --git a/engine/src/renderer/core/texture/models/texture.cpp b/engine/src/renderer/core/texture/models/texture.cpp index 2898785..a4ab27b 100644 --- a/engine/src/renderer/core/texture/models/texture.cpp +++ b/engine/src/renderer/core/texture/models/texture.cpp @@ -162,10 +162,15 @@ std::string Texture::getPrint(const char* objectName) const { else if (wrap.horizontal == WRAP_CLAMP) wrapString = "WRAP_CLAMP"; - res << "id: " << id << ", "; - res << "name: " << name << ", "; - res << "core: " << core->getPrint() << ", "; - if (clut != nullptr) res << "clut: " << clut->getPrint() << ", "; + res << "id: " << id << ", " << std::endl; + res << "name: " << name << ", " << std::endl; + res << "core: " << core->getPrint() << ", " << std::endl; + if (clut != nullptr) res << "clut: " << clut->getPrint() << ", " << std::endl; + if (links.size()) { + for (size_t i = 0; i < links.size(); i++) { + res << "link " << i << " for id: " << links[i].id << ", " << std::endl; + } + } res << "wrap: " << wrapString << ")"; return res.str(); } diff --git a/engine/src/renderer/core/texture/texture_repository.cpp b/engine/src/renderer/core/texture/texture_repository.cpp index 18b5bfd..92952cc 100644 --- a/engine/src/renderer/core/texture/texture_repository.cpp +++ b/engine/src/renderer/core/texture/texture_repository.cpp @@ -22,9 +22,24 @@ TextureRepository::~TextureRepository() { } } -// ---- -// Methods -// ---- +Texture* TextureRepository::getBySpriteOrMesh(const u32& t_id) const { + for (u32 i = 0; i < textures.size(); i++) { + if (textures[i]->isLinkedWith(t_id)) return textures[i]; + } + return nullptr; +} + +Texture* TextureRepository::getByTextureId(const u32& t_id) const { + for (u32 i = 0; i < textures.size(); i++) + if (t_id == textures[i]->getId()) return textures[i]; + return nullptr; +} + +const s32 TextureRepository::getIndexOf(const u32& t_texId) const { + for (u32 i = 0; i < textures.size(); i++) + if (textures[i]->getId() == t_texId) return i; + return -1; +} Texture* TextureRepository::add(Texture* texture) { textures.push_back(texture); diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index de13f2d..6dc7d89 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -42,7 +42,9 @@ class H4570 : public Game { MinecraftPipeline mcPip; DynamicPipeline dynpip; StaticPipeline stapip; - StaPipOptions* renderOptions; + StaPipOptions* staOptions; + DynPipOptions* dynOptions; + Texture* warriorTex; Texture* blocksTex; u32 blocksCount; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 7d08daa..11ff112 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -18,7 +18,9 @@ H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} DynamicMesh* getWarrior(Renderer* renderer); -StaPipOptions* getRenderingOptions(); +StaPipOptions* getStaPipOptions(); +DynPipOptions* getDynPipOptions(); +void setPipelineOptions(PipelineOptions* options); Sprite* get2DPicture(Renderer* renderer); void H4570::init() { @@ -34,8 +36,7 @@ void H4570::init() { engine->renderer.setClearScreenColor(Color(64.0F, 64.0F, 64.0F)); warrior = getWarrior(&engine->renderer); - - auto* warriorTex = engine->renderer.core.texture.repository.getBySpriteOrMesh( + warriorTex = engine->renderer.core.texture.repository.getBySpriteOrMesh( warrior->getMaterial(0)->getId()); warrior2 = new DynamicMesh(*warrior); @@ -56,7 +57,8 @@ void H4570::init() { warrior4->playAnimation(0, warrior4->getFramesCount() - 1); warrior4->setAnimSpeed(0.5F); - renderOptions = getRenderingOptions(); + staOptions = getStaPipOptions(); + dynOptions = getDynPipOptions(); cameraPosition = Vec4(0.0F, 0.0F, 20.0F); cameraLookAt = *warrior->getPosition(); @@ -140,14 +142,14 @@ void H4570::loop() { // engine->renderer.renderer3D.usePipeline(&stapip); // { - // stapip.render(warrior, renderOptions); - // // stapip.render(warrior2, renderOptions); - // // stapip.render(warrior3, renderOptions); - // // stapip.render(warrior4, renderOptions); + // stapip.render(warrior, staOptions); + // // stapip.render(warrior2, staOptions); + // // stapip.render(warrior3, staOptions); + // // stapip.render(warrior4, staOptions); // } engine->renderer.renderer3D.usePipeline(&dynpip); - { dynpip.render(warrior); } + { dynpip.render(warrior, dynOptions); } engine->renderer.renderer3D.usePipeline(&mcPip); { mcPip.render(blocks, blocksCount, blocksTex, false); } @@ -183,9 +185,19 @@ Sprite* get2DPicture(Renderer* renderer) { return sprite; } -StaPipOptions* getRenderingOptions() { +StaPipOptions* getStaPipOptions() { auto* options = new StaPipOptions(); + setPipelineOptions(options); + return options; +} +DynPipOptions* getDynPipOptions() { + auto* options = new DynPipOptions(); + setPipelineOptions(options); + return options; +} + +void setPipelineOptions(PipelineOptions* options) { auto* ambientColor = new Color(32.0F, 32.0F, 32.0F, 32.0F); auto* directionalColors = new Color[3]; for (int i = 0; i < 3; i++) directionalColors[i].set(0.0F, 0.0F, 0.0F, 1.0F); @@ -208,8 +220,6 @@ StaPipOptions* getRenderingOptions() { directionalDirections[1].set(1.0F, 0.0F, 0.0F); directionalColors[1].set(96.0F, 0.0F, 0.0F); - - return options; } } // namespace Tyra From 0b60aa0f6d99ec93004a274e0516fcd4f8953e05 Mon Sep 17 00:00:00 2001 From: h4570 Date: Thu, 21 Jul 2022 18:39:37 +0200 Subject: [PATCH 18/33] sending vu1 programs --- .../3d/pipeline/dynamic/core/dynpip_core.hpp | 16 +- .../dynamic/core/dynpip_qbuffer_renderer.hpp | 68 -------- .../pipeline/dynamic/core/dynpip_renderer.hpp | 69 ++++++++ .../core/programs/dynpip_vu1_shared_defines.h | 2 +- .../3d/pipeline/dynamic/core/dynpip_core.cpp | 40 ++++- .../dynamic/core/dynpip_qbuffer_renderer.cpp | 19 --- .../pipeline/dynamic/core/dynpip_renderer.cpp | 160 ++++++++++++++++++ .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 14 +- .../static/core/stapip_qbuffer_renderer.cpp | 18 -- 9 files changed, 290 insertions(+), 116 deletions(-) delete mode 100644 engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp create mode 100644 engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp delete mode 100644 engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp create mode 100644 engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 8f48a1e..53213c8 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -14,7 +14,7 @@ #include "./bag/dynpip_bag.hpp" #include "renderer/core/renderer_core.hpp" #include "./dynpip_programs_repository.hpp" -#include "./dynpip_qbuffer_renderer.hpp" +#include "./dynpip_renderer.hpp" namespace Tyra { @@ -27,8 +27,17 @@ class DynPipCore { void init(RendererCore* t_core); + /** Force starting VU1 program instead of continueing */ + void clear() { qbufferRenderer.clearLastProgramName(); } + + /** + * Send model matrix, lighting data and other + * repetitve stuff to VU1 + */ + void initParts(DynPipBag* data); + /** Render 3D via "bags" */ - void render(DynPipBag* data); + void renderPart(DynPipBag* data, const bool& frustumCull = true); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isSingleColor, @@ -44,8 +53,9 @@ class DynPipCore { void reinitVU1Programs(); private: + M4x4 mvp; RendererCore* rendererCore; - DynPipQBufferRenderer qbufferRenderer; + DynPipRenderer qbufferRenderer; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp deleted file mode 100644 index da7d201..0000000 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#pragma once - -#include - -namespace Tyra { - -class DynPipQBufferRenderer { - public: - DynPipQBufferRenderer(); - ~DynPipQBufferRenderer(); - - // void init(RendererCore* t_core); - - // void reinitVU1(); - - // DynPipQBuffer* getBuffer(); - - // void sendObjectData(DynPipBag* bag, M4x4* mvp, - // RendererCoreTextureBuffers* texBuffers) const; - - // void setMaxVertCount(const u32& count); - - // void setInfo(PipelineInfoBag* bag); - - // void render(DynPipQBuffer* buffer); - - // void clearLastProgramName(); - - const u16& getBufferSize() { return bufferSize; } - - private: - // void sendStaticData() const; - // void setProgramsCache(); - // void uploadPrograms(); - // void setDoubleBuffer(); - - // void addBufferDataToPacket(DynPipVU1Program* program, DynPipQBuffer* - // buffer); void sendPacket(); - - // packet2_t* packets[2]; - // packet2_t* programsPacket; - // DynPipQBuffer buffers[2]; - // packet2_t* currentPacket; - // packet2_t* staticDataPacket; - // packet2_t* objectDataPacket; - - // RendererCore* rendererCore; - - // DynPipProgramName lastProgramName; - // Path1* path1; - // DynPipClipper clipper; - // DynPipProgramsRepository repository; - - u16 bufferSize; - // u8 context; -}; - -} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp new file mode 100644 index 0000000..9706346 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp @@ -0,0 +1,69 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include "renderer/core/renderer_core.hpp" +#include "./dynpip_programs_repository.hpp" + +namespace Tyra { + +class DynPipRenderer { + public: + DynPipRenderer(); + ~DynPipRenderer(); + + void init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo); + + void reinitVU1(); + + // DynPipQBuffer* getBuffer(); + + void sendObjectData(DynPipBag* bag, M4x4* mvp, + RendererCoreTextureBuffers* texBuffers) const; + + // void setMaxVertCount(const u32& count); + + // void setInfo(PipelineInfoBag* bag); + + // void render(DynPipQBuffer* buffer); + + void clearLastProgramName(); + + const u16& getBufferSize() { return bufferSize; } + + private: + void sendStaticData() const; + void setProgramsCache(); + void uploadPrograms(); + void setDoubleBuffer(); + + // void addBufferDataToPacket(DynPipVU1Program* program, DynPipQBuffer* + // buffer); void sendPacket(); + // DynPipQBuffer buffers[2]; + + packet2_t* packets[2]; + packet2_t* programsPacket; + packet2_t* currentPacket; + packet2_t* staticDataPacket; + packet2_t* objectDataPacket; + + DynPipProgramsRepository* programsRepo; + RendererCore* rendererCore; + Path1* path1; + + DynPipProgramName lastProgramName; + + u16 bufferSize; + u8 context; +}; + +} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h index 1ff5468..3f19da4 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h @@ -18,7 +18,7 @@ // #define VU1_LIGHTS_DIRS_ADDR 11 // #define VU1_LIGHTS_COLORS_ADDR 14 // #define VU1_SET_GIFTAG_ADDR 18 -// #define VU1_LAST_ITEM_ADDR 18 +#define VU1_LAST_ITEM_ADDR 18 // Buffer data (xtop) #define VU1_VERT_DATA_ADDR 2 diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index 8d80a60..d1696bf 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -18,9 +18,12 @@ DynPipCore::DynPipCore() {} DynPipCore::~DynPipCore() {} -void DynPipCore::init(RendererCore* t_core) { rendererCore = t_core; } +void DynPipCore::init(RendererCore* t_core) { + rendererCore = t_core; + qbufferRenderer.init(t_core, &repository); +} -void DynPipCore::reinitVU1Programs() {} +void DynPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); } u32 DynPipCore::getMaxVertCountByParams(const bool& isSingleColor, const bool& isLightingEnabled, @@ -29,9 +32,36 @@ u32 DynPipCore::getMaxVertCountByParams(const bool& isSingleColor, ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); } -void DynPipCore::render(DynPipBag* bag) { - // Zrobic bbox - // TODO: Potem wrzucic programy i obliczyc bufferSize w qbufferrenderer +void DynPipCore::initParts(DynPipBag* bag) { + RendererCoreTextureBuffers* texBuffers = nullptr; + if (bag->texture) { + auto temp = rendererCore->texture.useTexture(bag->texture->texture); + texBuffers = new RendererCoreTextureBuffers{temp.id, temp.core, temp.clut}; + } + + mvp = rendererCore->renderer3D.getViewProj() * *bag->info->model; + + qbufferRenderer.sendObjectData(bag, &mvp, texBuffers); + + delete texBuffers; +} + +void DynPipCore::renderPart(DynPipBag* bag, const bool& frustumCull) { + if (bag->count <= 0) return; + + if (frustumCull) { + CoreBBox bbox(bag->verticesTo, bag->count); + if (bbox.isInFrustum(rendererCore->renderer3D.frustumPlanes.getAll(), + *bag->info->model) == + CoreBBoxFrustum::OUTSIDE_FRUSTUM) { + return; + } + } + + // TODO: Uruchomic odpowiedni program + // TODO: Wyslac wierzcholki + // TODO: Program VU1 TD + // TODO: Reszta programow VU1 } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp deleted file mode 100644 index 1ba92c7..0000000 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#include "renderer/3d/pipeline/dynamic/core/dynpip_qbuffer_renderer.hpp" -#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" - -namespace Tyra { - -DynPipQBufferRenderer::DynPipQBufferRenderer() {} -DynPipQBufferRenderer::~DynPipQBufferRenderer() {} - -} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp new file mode 100644 index 0000000..2d6177a --- /dev/null +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -0,0 +1,160 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp" +#include "renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h" +#include + +namespace Tyra { + +DynPipRenderer::DynPipRenderer() { + context = 0; + lastProgramName = DynPipProgramName::DynPipUndefinedProgram; + staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + programsPacket = nullptr; +} + +DynPipRenderer::~DynPipRenderer() { + packet2_free(packets[0]); + packet2_free(packets[1]); + packet2_free(staticDataPacket); + packet2_free(objectDataPacket); + + if (programsPacket) packet2_free(programsPacket); +} + +void DynPipRenderer::init(RendererCore* t_core, + DynPipProgramsRepository* t_programRepo) { + // path1 = t_core->getPath1(); + // rendererCore = t_core; + // programsRepo = t_programRepo; + + // dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); + // dma_channel_fast_waits(DMA_CHANNEL_VIF1); + + // const u32 VU1_PACKET_SIZE = 16; + + // packets[0] = + // packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + + // packets[1] = + // packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + + // setProgramsCache(); + + // reinitVU1(); + + // TYRA_LOG("Renderer3DQBufferRenderer initialized"); +} + +void DynPipRenderer::reinitVU1() { + // sendStaticData(); + // uploadPrograms(); + // setDoubleBuffer(); +} + +void DynPipRenderer::setProgramsCache() { + VU1Program** programs = new VU1Program*[4]; + programs[0] = programsRepo->getProgram(DynPipProgramName::DynPipColor); + programs[1] = programsRepo->getProgram(DynPipProgramName::DynPipDirLights); + programs[2] = programsRepo->getProgram(DynPipProgramName::DynPipTextureColor); + programs[3] = + programsRepo->getProgram(DynPipProgramName::DynPipTextureDirLights); + programsPacket = path1->createProgramsCache(programs, 4, 0); + delete[] programs; +} + +void DynPipRenderer::sendStaticData() const { + // packet2_reset(staticDataPacket, false); + // packet2_utils_vu_open_unpack(staticDataPacket, VU1_SET_GIFTAG_ADDR, + // false); { packet2_utils_gif_add_set(staticDataPacket, 1); } + // packet2_utils_vu_close_unpack(staticDataPacket); + + // packet2_utils_vu_add_end_tag(staticDataPacket); + // dma_channel_wait(DMA_CHANNEL_VIF1, 0); + // dma_channel_send_packet2(staticDataPacket, DMA_CHANNEL_VIF1, true); +} + +void DynPipRenderer::sendObjectData( + DynPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { + // packet2_reset(objectDataPacket, false); + // packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_MVP_MATRIX_ADDR, + // mvp->data, 4, false); + + // if (bag->lighting) { + // packet2_utils_vu_add_unpack_data(objectDataPacket, + // VU1_LIGHTS_MATRIX_ADDR, + // bag->lighting->lightMatrix, 3, false); + + // packet2_utils_vu_add_unpack_data( + // objectDataPacket, VU1_LIGHTS_DIRS_ADDR, + // bag->lighting->dirLights->getLightDirections(), 3, false); + + // packet2_utils_vu_add_unpack_data(objectDataPacket, + // VU1_LIGHTS_COLORS_ADDR, + // bag->lighting->dirLights->getLightColors(), + // 4, false); + // } + + // u8 singleColorEnabled = bag->color->single != nullptr; + + // if (singleColorEnabled) // Color is placed in 4th slot of + // // VU1_LIGHTS_MATRIX_ADDR + // packet2_utils_vu_add_unpack_data(objectDataPacket, + // VU1_SINGLE_COLOR_ADDR, + // bag->color->single->rgba, 1, false); + + // packet2_utils_vu_open_unpack(objectDataPacket, VU1_OPTIONS_ADDR, false); + // { + // packet2_add_u32(objectDataPacket, + // singleColorEnabled); // Single color enabled. + // packet2_add_u32(objectDataPacket, 0); // not used, padding + // packet2_add_u32(objectDataPacket, 0); // not used, padding + // packet2_add_u32(objectDataPacket, 0); // not used, padding + + // packet2_utils_gs_add_lod(objectDataPacket, &rendererCore->gs.lod); + + // if (texBuffers != nullptr) { + // packet2_utils_gs_add_texbuff_clut(objectDataPacket, texBuffers->core, + // &rendererCore->texture.clut); + + // rendererCore->texture.updateClutBuffer(texBuffers->clut); + // } + // } + // packet2_utils_vu_close_unpack(objectDataPacket); + + // packet2_utils_vu_add_end_tag(objectDataPacket); + // dma_channel_wait(DMA_CHANNEL_VIF1, 0); + // dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); +} + +void DynPipRenderer::clearLastProgramName() { + lastProgramName = DynPipUndefinedProgram; +} + +void DynPipRenderer::uploadPrograms() { + dma_channel_wait(DMA_CHANNEL_VIF1, 0); + dma_channel_send_packet2(programsPacket, DMA_CHANNEL_VIF1, true); + dma_channel_wait(DMA_CHANNEL_VIF1, 0); +} + +void DynPipRenderer::setDoubleBuffer() { + u16 startingAddr = VU1_LAST_ITEM_ADDR + 1; + const u16 bufferMaxSize = 1000; + bufferSize = (bufferMaxSize - startingAddr) / 2; + + path1->setDoubleBuffer(startingAddr, bufferSize); + + bufferSize -= 1; // Because we don't want to upload anything from first + // buffer, to first addr of second buffer +} + +} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index 6a84017..c0e62a9 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -16,7 +16,10 @@ DynamicPipeline::DynamicPipeline() { colorsCache = new Vec4[4]; } DynamicPipeline::~DynamicPipeline() { delete[] colorsCache; } -void DynamicPipeline::init(RendererCore* t_core) { rendererCore = t_core; } +void DynamicPipeline::init(RendererCore* t_core) { + rendererCore = t_core; + core.init(t_core); +} void DynamicPipeline::onUse() {} @@ -38,6 +41,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { u8 context = 0; setBuffersDefaultVars(buffers, mesh, infoBag); + core.clear(); for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); @@ -48,6 +52,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { ceil(material->getFacesCount() / static_cast(partSize)); auto* colorBag = getColorBag(material); setBuffersColorBag(buffers, colorBag); + u8 isPartInitialized = false; for (u32 j = 0; j < partsCount; j++) { auto& buffer = buffers[context]; @@ -66,7 +71,12 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { getLightingBag(mesh, material, &model, frameFrom, frameTo, options, dirLights, buffer.count, startIndex); - core.render(&buffer); + if (!isPartInitialized) { + core.initParts(&buffer); + isPartInitialized = true; + } + + core.renderPart(&buffer); context = !context; } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 389b959..96d5659 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -189,24 +189,6 @@ void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) { sendPacket(); } -// void StaPipQBufferRenderer::sendFinishTag() { -// StaPipQBufferRenderer way proposition -// auto program = path1->getProgramByName(Draw_Finish); -// addBufferDataToPacket(program, nullptr); -// sendPacket(); - -// packet2_t* packet2 = packet2_create(8, P2_TYPE_NORMAL, P2_MODE_CHAIN, -// true); auto program = -// static_cast(getProgramByName(Draw_Finish)); - -// program->addTag(packet2, prim); -// packet2_utils_vu_add_start_program(packet2, -// program->getDestinationAddress()); packet2_utils_vu_add_end_tag(packet2); -// dma_channel_wait(DMA_CHANNEL_VIF1, 0); -// dma_channel_send_packet2(packet2, DMA_CHANNEL_VIF1, true); -// packet2_free(packet2); -// } - void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { if (buffer->size == 0) { return; From c8592e0c676da008207d3e169cff397a3800c807 Mon Sep 17 00:00:00 2001 From: h4570 Date: Thu, 21 Jul 2022 20:34:05 +0200 Subject: [PATCH 19/33] launching vu1 programs --- .../3d/pipeline/dynamic/core/dynpip_core.hpp | 3 +- .../pipeline/dynamic/core/dynpip_qbuffer.hpp | 47 ----------- .../pipeline/dynamic/core/dynpip_renderer.hpp | 13 +-- .../dynamic/core/dynpip_vu1_program.hpp | 12 ++- .../core/programs/dynpip_c_vu1_program.hpp | 3 +- .../core/programs/dynpip_d_vu1_program.hpp | 3 +- .../core/programs/dynpip_tc_vu1_program.hpp | 3 +- .../core/programs/dynpip_td_vu1_program.hpp | 3 +- .../3d/pipeline/dynamic/dynpip_options.hpp | 9 +++ .../3d/pipeline/dynamic/core/dynpip_core.cpp | 29 +++++-- .../core/dynpip_programs_repository.cpp | 5 ++ .../pipeline/dynamic/core/dynpip_qbuffer.cpp | 81 ------------------- .../pipeline/dynamic/core/dynpip_renderer.cpp | 63 +++++++++++---- .../dynamic/core/dynpip_vu1_program.cpp | 16 ++-- .../core/programs/dynpip_c_vu1_program.cpp | 6 +- .../core/programs/dynpip_d_vu1_program.cpp | 6 +- .../core/programs/dynpip_tc_vu1_program.cpp | 6 +- .../dynamic/core/programs/dynpip_td_vu1.vclpp | 8 +- .../core/programs/dynpip_td_vu1_program.cpp | 50 ++++++------ .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 33 +++++--- .../pipeline/minecraft/minecraft_pipeline.cpp | 2 - .../3d/pipeline/static/core/stapip_core.cpp | 2 - .../static/core/stapip_qbuffer_renderer.cpp | 2 +- samples/h4570/src/h4570.cpp | 15 ++-- 24 files changed, 178 insertions(+), 242 deletions(-) delete mode 100644 engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp delete mode 100644 engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 53213c8..3b4e31e 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -40,8 +40,7 @@ class DynPipCore { void renderPart(DynPipBag* data, const bool& frustumCull = true); /** Get max vert count of VU1 qbuffer (for optimizations) */ - u32 getMaxVertCountByParams(const bool& isSingleColor, - const bool& isLightingEnabled, + u32 getMaxVertCountByParams(const bool& isLightingEnabled, const bool& isTextureEnabled); /** diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp deleted file mode 100644 index a7b0673..0000000 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#pragma once - -#include "./bag/dynpip_bag.hpp" - -namespace Tyra { - -class DynPipQBuffer { - public: - DynPipQBuffer(); - ~DynPipQBuffer(); - - void setMaxVertCount(const u32& count); - - DynPipBag* bag; - - Vec4* verticesFrom; - Vec4* verticesTo; - - Vec4* stsFrom; - Vec4* stsTo; - - Vec4* normalsFrom; - Vec4* normalsTo; - - /** Size per frame */ - u32 size; - - void print() const; - void print(const char* name) const; - void print(const std::string& name) const { print(name.c_str()); } - std::string getPrint(const char* name = nullptr) const; - - private: - u32 maxVertCount; -}; - -} // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp index 9706346..3fced1d 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp @@ -25,16 +25,10 @@ class DynPipRenderer { void reinitVU1(); - // DynPipQBuffer* getBuffer(); - void sendObjectData(DynPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const; - // void setMaxVertCount(const u32& count); - - // void setInfo(PipelineInfoBag* bag); - - // void render(DynPipQBuffer* buffer); + void render(DynPipBag* bag); void clearLastProgramName(); @@ -46,9 +40,8 @@ class DynPipRenderer { void uploadPrograms(); void setDoubleBuffer(); - // void addBufferDataToPacket(DynPipVU1Program* program, DynPipQBuffer* - // buffer); void sendPacket(); - // DynPipQBuffer buffers[2]; + void addBufferDataToPacket(DynPipVU1Program* program, DynPipBag* bag); + void sendPacket(); packet2_t* packets[2]; packet2_t* programsPacket; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp index 054f862..fb15cd9 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.hpp @@ -13,7 +13,7 @@ #include "./dynpip_program_name.hpp" #include "renderer/core/paths/path1/vu1_program.hpp" #include "./programs/dynpip_vu1_shared_defines.h" -#include "./dynpip_qbuffer.hpp" +#include "./bag/dynpip_bag.hpp" namespace Tyra { @@ -28,11 +28,9 @@ class DynPipVU1Program : public VU1Program { const DynPipProgramName& getName() const; - u16 getMaxVertCount(const bool& singleColorEnabled, - const u16& vu1DBufferSize) const; + u16 getMaxVertCount(const u16& vu1DBufferSize) const; - void addBufferDataToPacket(packet2_t* packet, DynPipQBuffer* buffer, - prim_t* prim); + void addBufferDataToPacket(packet2_t* packet, DynPipBag* bag, prim_t* prim); protected: DynPipProgramName name; @@ -40,10 +38,10 @@ class DynPipVU1Program : public VU1Program { u32 destinationAddress, reglist; virtual void addProgramQBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* qbuffer) const = 0; + DynPipBag* bag) const = 0; private: - void addStandardBufferDataToPacket(packet2_t* packet, DynPipQBuffer* buffer, + void addStandardBufferDataToPacket(packet2_t* packet, DynPipBag* bag, prim_t* prim); }; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp index 2a2aa07..994355f 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.hpp @@ -22,8 +22,7 @@ class DynPipCVU1Program : public DynPipVU1Program { ~DynPipCVU1Program(); std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* qbuffer) const; + void addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp index f74b531..b498ad1 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.hpp @@ -22,8 +22,7 @@ class DynPipDVU1Program : public DynPipVU1Program { ~DynPipDVU1Program(); std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* qbuffer) const; + void addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp index 5cef343..5b1d231 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.hpp @@ -22,8 +22,7 @@ class DynPipTCVU1Program : public DynPipVU1Program { ~DynPipTCVU1Program(); std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* qbuffer) const; + void addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp index 192caab..5f528e0 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.hpp @@ -22,8 +22,7 @@ class DynPipTDVU1Program : public DynPipVU1Program { ~DynPipTDVU1Program(); std::string getStringName() const; - void addProgramQBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* qbuffer) const; + void addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp index ece1bad..9f0ce84 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp @@ -14,10 +14,19 @@ namespace Tyra { +enum DynPipFrustumCulling { + DynPipFrustumCulling_None = 0, + DynPipFrustumCulling_Simple = 1, + DynPipFrustumCulling_Precise = 2, +}; + class DynPipOptions : public PipelineOptions { public: DynPipOptions() {} ~DynPipOptions() {} + + /** Default: Simple */ + DynPipFrustumCulling frustumCulling; }; } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index d1696bf..946b655 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -11,6 +11,7 @@ #include "renderer/3d/pipeline/dynamic/core/dynpip_core.hpp" #include #include +#include "thread/threading.hpp" namespace Tyra { @@ -25,11 +26,10 @@ void DynPipCore::init(RendererCore* t_core) { void DynPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); } -u32 DynPipCore::getMaxVertCountByParams(const bool& isSingleColor, - const bool& isLightingEnabled, +u32 DynPipCore::getMaxVertCountByParams(const bool& isLightingEnabled, const bool& isTextureEnabled) { return repository.getProgramByParams(isLightingEnabled, isTextureEnabled) - ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); + ->getMaxVertCount(qbufferRenderer.getBufferSize()); } void DynPipCore::initParts(DynPipBag* bag) { @@ -49,6 +49,24 @@ void DynPipCore::initParts(DynPipBag* bag) { void DynPipCore::renderPart(DynPipBag* bag, const bool& frustumCull) { if (bag->count <= 0) return; + TYRA_ASSERT(bag->verticesFrom != nullptr && bag->verticesTo != nullptr, + "Vertices are required in 3D render bag!"); + TYRA_ASSERT(bag->info != nullptr, "Info bag is required in 3D render bag!"); + TYRA_ASSERT(bag->info->model != nullptr, + "Info bag's model pointer is empty!"); + TYRA_ASSERT(bag->color != nullptr, "Color bag is required in 3D render bag!"); + TYRA_ASSERT(bag->color->single, "Color is required in 3D render bag!"); + TYRA_ASSERT( + !bag->lighting || + (bag->lighting->lightMatrix && bag->lighting->normalsFrom && + bag->lighting->normalsTo && bag->lighting->dirLights), + "If you want lighting, please provide light matrix normals and dir " + "lights!"); + TYRA_ASSERT(!bag->texture || + (bag->texture->texture && bag->texture->coordinatesFrom && + bag->texture->coordinatesTo), + "If you want texture, please provide texture and coordinates!"); + if (frustumCull) { CoreBBox bbox(bag->verticesTo, bag->count); if (bbox.isInFrustum(rendererCore->renderer3D.frustumPlanes.getAll(), @@ -58,10 +76,7 @@ void DynPipCore::renderPart(DynPipBag* bag, const bool& frustumCull) { } } - // TODO: Uruchomic odpowiedni program - // TODO: Wyslac wierzcholki - // TODO: Program VU1 TD - // TODO: Reszta programow VU1 + qbufferRenderer.render(bag); } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp index 3150486..c47e9f4 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_programs_repository.cpp @@ -16,6 +16,11 @@ DynPipProgramsRepository::DynPipProgramsRepository() {} DynPipProgramsRepository::~DynPipProgramsRepository() {} +DynPipVU1Program* DynPipProgramsRepository::getProgramByBag( + const DynPipBag* bag) { + return getProgramByParams(bag->lighting, bag->texture); +} + DynPipVU1Program* DynPipProgramsRepository::getProgramByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) { if (isLightingEnabled && isTextureEnabled) diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp deleted file mode 100644 index 86f9096..0000000 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2022, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#include "renderer/3d/pipeline/dynamic/core/dynpip_qbuffer.hpp" -#include -#include - -namespace Tyra { - -DynPipQBuffer::DynPipQBuffer() {} - -DynPipQBuffer::~DynPipQBuffer() {} - -void DynPipQBuffer::setMaxVertCount(const u32& count) { maxVertCount = count; } - -void DynPipQBuffer::print() const { - auto text = getPrint(nullptr); - printf("%s\n", text.c_str()); -} - -void DynPipQBuffer::print(const char* name) const { - auto text = getPrint(name); - printf("%s\n", text.c_str()); -} - -std::string DynPipQBuffer::getPrint(const char* name) const { - std::stringstream res; - if (name) { - res << name << "("; - } else { - res << "DynPipQBuffer("; - } - res << std::fixed << std::setprecision(2); - res << std::endl; - res << "Size: " << static_cast(size) << std::endl; - - res << "Vertices from: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << verticesFrom[i].getPrint() << std::endl; - - res << "Vertices to: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << verticesTo[i].getPrint() << std::endl; - - if (bag->texture != nullptr) { - res << "STs from: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << stsFrom[i].getPrint() << std::endl; - - res << "STs to: " << std::endl; - for (u32 i = 0; i < size; i++) - res << i << ": " << stsTo[i].getPrint() << std::endl; - } - - if (bag->lighting != nullptr) { - res << "Normals from: " << std::endl; - for (u32 i = 0; i < size; i++) { - res << i << ": " << normalsFrom[i].getPrint() << std::endl; - } - - res << "Normals to: " << std::endl; - for (u32 i = 0; i < size; i++) { - res << i << ": " << normalsTo[i].getPrint(); - if (i < size - 1) { - res << std::endl; - } - } - } - - res << ")"; - return res.str(); -} - -} // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index 2d6177a..56c0b52 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -16,6 +16,7 @@ namespace Tyra { DynPipRenderer::DynPipRenderer() { context = 0; + bufferSize = 0; lastProgramName = DynPipProgramName::DynPipUndefinedProgram; staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); @@ -33,32 +34,32 @@ DynPipRenderer::~DynPipRenderer() { void DynPipRenderer::init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo) { - // path1 = t_core->getPath1(); - // rendererCore = t_core; - // programsRepo = t_programRepo; + path1 = t_core->getPath1(); + rendererCore = t_core; + programsRepo = t_programRepo; - // dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); - // dma_channel_fast_waits(DMA_CHANNEL_VIF1); + dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); + dma_channel_fast_waits(DMA_CHANNEL_VIF1); - // const u32 VU1_PACKET_SIZE = 16; + const u32 VU1_PACKET_SIZE = 16; - // packets[0] = - // packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packets[0] = + packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - // packets[1] = - // packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packets[1] = + packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - // setProgramsCache(); + setProgramsCache(); - // reinitVU1(); + reinitVU1(); - // TYRA_LOG("Renderer3DQBufferRenderer initialized"); + TYRA_LOG("DynPipRenderer initialized"); } void DynPipRenderer::reinitVU1() { - // sendStaticData(); - // uploadPrograms(); - // setDoubleBuffer(); + sendStaticData(); + uploadPrograms(); + setDoubleBuffer(); } void DynPipRenderer::setProgramsCache() { @@ -136,6 +137,36 @@ void DynPipRenderer::sendObjectData( // dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } +void DynPipRenderer::render(DynPipBag* bag) { + auto* program = programsRepo->getProgramByBag(bag); + addBufferDataToPacket(program, bag); + sendPacket(); +} + +void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program, + DynPipBag* bag) { + currentPacket = packets[context]; + packet2_reset(currentPacket, false); + program->addBufferDataToPacket(currentPacket, bag, &rendererCore->gs.prim); + + if (lastProgramName != program->getName()) { + packet2_utils_vu_add_start_program(currentPacket, + program->getDestinationAddress()); + lastProgramName = program->getName(); + } else { + packet2_utils_vu_add_continue_program(currentPacket); + } + packet2_utils_vu_add_end_tag(currentPacket); +} + +void DynPipRenderer::sendPacket() { + dma_channel_wait(DMA_CHANNEL_VIF1, 0); + dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); + + // Switch packet, so we can proceed during DMA transfer + context = !context; +} + void DynPipRenderer::clearLastProgramName() { lastProgramName = DynPipUndefinedProgram; } diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp index 165c1f8..50b8819 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp @@ -32,15 +32,14 @@ const DynPipProgramName& DynPipVU1Program::getName() const { return name; } u32& DynPipVU1Program::getReglist() { return reglist; } -void DynPipVU1Program::addBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* buffer, +void DynPipVU1Program::addBufferDataToPacket(packet2_t* packet, DynPipBag* bag, prim_t* prim) { - addStandardBufferDataToPacket(packet, buffer, prim); - addProgramQBufferDataToPacket(packet, buffer); + addStandardBufferDataToPacket(packet, bag, prim); + addProgramQBufferDataToPacket(packet, bag); } void DynPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, - DynPipQBuffer* buffer, + DynPipBag* bag, prim_t* prim) { // if (buffer->bag->texture) // prim->mapping = 1; @@ -61,12 +60,9 @@ void DynPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, // packet2_utils_vu_close_unpack(packet); } -u16 DynPipVU1Program::getMaxVertCount(const bool& singleColorEnabled, - const u16& bufferSize) const { +u16 DynPipVU1Program::getMaxVertCount(const u16& bufferSize) const { u16 res = bufferSize - 4; - u8 colorElementsPerVertex = - singleColorEnabled ? (elementsPerVertex - 1) : elementsPerVertex; - res /= (colorElementsPerVertex + reglistCount); + res /= (elementsPerVertex + reglistCount); // Buffer size = VU1 double buffer size (xtop) // QBufferSize = res (it is placed inside VU1) diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp index 4a76c80..497efdc 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp @@ -19,7 +19,7 @@ namespace Tyra { DynPipCVU1Program::DynPipCVU1Program() : DynPipVU1Program( DynPipColor, &DynPipVU1_C_CodeStart, &DynPipVU1_C_CodeEnd, - ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} + ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 1) {} DynPipCVU1Program::~DynPipCVU1Program() {} @@ -27,8 +27,8 @@ std::string DynPipCVU1Program::getStringName() const { return std::string("DynPip - C"); } -void DynPipCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, DynPipQBuffer* qbuffer) const { +void DynPipCVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, + DynPipBag* bag) const { // u32 addr = VU1_VERT_DATA_ADDR; // // Add vertices diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp index c7bc969..6bd8653 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp @@ -19,7 +19,7 @@ namespace Tyra { DynPipDVU1Program::DynPipDVU1Program() : DynPipVU1Program( DynPipDirLights, &DynPipVU1_D_CodeStart, &DynPipVU1_D_CodeEnd, - ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 3) {} + ((u64)GIF_REG_RGBAQ) << 0 | ((u64)GIF_REG_XYZ2) << 4, 2, 2) {} DynPipDVU1Program::~DynPipDVU1Program() {} @@ -27,8 +27,8 @@ std::string DynPipDVU1Program::getStringName() const { return std::string("DynPip - D"); } -void DynPipDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, DynPipQBuffer* qbuffer) const { +void DynPipDVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, + DynPipBag* bag) const { // u32 addr = VU1_VERT_DATA_ADDR; // // Add vertices diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp index 4a85c77..676fd6d 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp @@ -21,7 +21,7 @@ DynPipTCVU1Program::DynPipTCVU1Program() &DynPipVU1_TC_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, - 3, 3) {} + 3, 2) {} DynPipTCVU1Program::~DynPipTCVU1Program() {} @@ -29,8 +29,8 @@ std::string DynPipTCVU1Program::getStringName() const { return std::string("DynPip - TC"); } -void DynPipTCVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, DynPipQBuffer* qbuffer) const { +void DynPipTCVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, + DynPipBag* bag) const { // u32 addr = VU1_VERT_DATA_ADDR; // // Add vertices diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp index a71f104..3c0beec 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp @@ -32,8 +32,14 @@ #vuprog DynPipVU1TD ---cont +ResetClipFlags{ } +begin: + xtop buffer + + +; --cont + #endvuprog --exit diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp index ce66464..f3cc69c 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1_program.cpp @@ -21,7 +21,7 @@ DynPipTDVU1Program::DynPipTDVU1Program() &DynPipVU1_TD_CodeEnd, ((u64)GIF_REG_ST) << 0 | ((u64)GIF_REG_RGBAQ) << 4 | ((u64)GIF_REG_XYZ2) << 8, - 3, 4) {} + 3, 3) {} DynPipTDVU1Program::~DynPipTDVU1Program() {} @@ -29,33 +29,37 @@ std::string DynPipTDVU1Program::getStringName() const { return std::string("DynPip - TD"); } -void DynPipTDVU1Program::addProgramQBufferDataToPacket( - packet2_t* packet, DynPipQBuffer* qbuffer) const { +void DynPipTDVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, + DynPipBag* bag) const { u32 addr = VU1_VERT_DATA_ADDR; // Add vertices - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->verticesFrom, - qbuffer->size, true); - addr += qbuffer->size; - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->verticesTo, - qbuffer->size, true); - addr += qbuffer->size; - - // Add sts - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->stsFrom, - qbuffer->size, true); - addr += qbuffer->size; - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->stsTo, qbuffer->size, + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesFrom, bag->count, true); - addr += qbuffer->size; + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesTo, bag->count, + true); + addr += bag->count; - // Add normal - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normalsFrom, - qbuffer->size, true); - addr += qbuffer->size; - packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normalsTo, - qbuffer->size, true); - addr += qbuffer->size; + if (bag->texture) { + // Add sts + packet2_utils_vu_add_unpack_data( + packet, addr, bag->texture->coordinatesFrom, bag->count, true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->texture->coordinatesTo, + bag->count, true); + addr += bag->count; + } + + if (bag->lighting) { + // Add normal + packet2_utils_vu_add_unpack_data(packet, addr, bag->lighting->normalsFrom, + bag->count, true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->lighting->normalsTo, + bag->count, true); + addr += bag->count; + } } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index c0e62a9..e5fc654 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -21,7 +21,7 @@ void DynamicPipeline::init(RendererCore* t_core) { core.init(t_core); } -void DynamicPipeline::onUse() {} +void DynamicPipeline::onUse() { core.reinitVU1Programs(); } void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto model = mesh->getModelMatrix(); @@ -29,6 +29,16 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto* frameTo = mesh->getFrame(mesh->getNextAnimationFrame()); auto* infoBag = getInfoBag(mesh, options, &model); PipelineDirLightsBag* dirLights = nullptr; + auto frustumCulling = + options ? options->frustumCulling : DynPipFrustumCulling_Simple; + + if (frustumCulling == DynPipFrustumCulling_Simple) { + if (frameTo->getBBox().isInFrustum( + rendererCore->renderer3D.frustumPlanes.getAll(), model) == + CoreBBoxFrustum::OUTSIDE_FRUSTUM) { + return; + } + } if (options && options->lighting) { setLightingColorsCache(options->lighting); @@ -46,8 +56,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); auto partSize = core.getMaxVertCountByParams( - material->isSingleColorActivated(), options && options->lighting, - material->getTextureCoordFaces()); + options && options->lighting, material->getTextureCoordFaces()); u32 partsCount = ceil(material->getFacesCount() / static_cast(partSize)); auto* colorBag = getColorBag(material); @@ -76,7 +85,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { isPartInitialized = true; } - core.renderPart(&buffer); + core.renderPart(&buffer, frustumCulling == DynPipFrustumCulling_Precise); context = !context; } @@ -155,8 +164,9 @@ void DynamicPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, for (u32 i = startIndex; i < startIndex + bag->count; i++) { auto& face = material->getVertexFaces()[i]; - bag->verticesFrom[i] = frameFrom->getVertices()[face]; - bag->verticesTo[i] = frameTo->getVertices()[face]; + auto offset = i - startIndex; + bag->verticesFrom[offset] = frameFrom->getVertices()[face]; + bag->verticesTo[offset] = frameTo->getVertices()[face]; } } @@ -182,8 +192,9 @@ DynPipTextureBag* DynamicPipeline::getTextureBag( for (u32 i = startIndex; i < startIndex + count; i++) { auto& face = material->getTextureCoordFaces()[i]; - result->coordinatesFrom[i] = frameFrom->getTextureCoords()[face]; - result->coordinatesTo[i] = frameTo->getTextureCoords()[face]; + auto offset = i - startIndex; + result->coordinatesFrom[offset] = frameFrom->getTextureCoords()[face]; + result->coordinatesTo[offset] = frameTo->getTextureCoords()[face]; } return result; @@ -201,13 +212,15 @@ DynPipLightingBag* DynamicPipeline::getLightingBag( auto* result = new DynPipLightingBag(); result->lightMatrix = model; + result->dirLights = dirLightsBag; result->normalsFrom = new Vec4[count]; result->normalsTo = new Vec4[count]; for (u32 i = startIndex; i < startIndex + count; i++) { auto& face = material->getNormalFaces()[i]; - result->normalsFrom[i] = frameFrom->getNormals()[face]; - result->normalsTo[i] = frameTo->getNormals()[face]; + auto offset = i - startIndex; + result->normalsFrom[offset] = frameFrom->getNormals()[face]; + result->normalsTo[offset] = frameTo->getNormals()[face]; } return result; diff --git a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp index 2212b45..19c4487 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp @@ -70,8 +70,6 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count, if (culled > 0) cull(blocks, cullIndexes, &texBuffers, isMulti); if (clipped > 0) clip(blocks, clipIndexes, &texBuffers, isMulti); } - - Threading::switchThread(); } CoreBBoxFrustum MinecraftPipeline::isInFrustum(const McpipBlock& block) const { diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp index 9a3a19f..ce1daf5 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp @@ -136,8 +136,6 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { if (!bbox) delete renderBbox; if (texBuffers) delete texBuffers; - Threading::switchThread(); - Verbose("Render finished"); } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 96d5659..4d9efc9 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -70,7 +70,7 @@ void StaPipQBufferRenderer::init(RendererCore* t_core) { reinitVU1(); - TYRA_LOG("Renderer3DQBufferRenderer initialized"); + TYRA_LOG("StaPipQBufferRenderer initialized"); } void StaPipQBufferRenderer::reinitVU1() { diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 11ff112..a92de55 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -104,6 +104,7 @@ void H4570::init() { } engine->audio.playSong(); + // engine->renderer.setFrameLimit(false); } u32 counter = 0; @@ -142,17 +143,19 @@ void H4570::loop() { // engine->renderer.renderer3D.usePipeline(&stapip); // { - // stapip.render(warrior, staOptions); - // // stapip.render(warrior2, staOptions); - // // stapip.render(warrior3, staOptions); - // // stapip.render(warrior4, staOptions); + // stapip.render(terrain, staOptions); // } engine->renderer.renderer3D.usePipeline(&dynpip); - { dynpip.render(warrior, dynOptions); } + { + dynpip.render(warrior, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior4, dynOptions); + } engine->renderer.renderer3D.usePipeline(&mcPip); - { mcPip.render(blocks, blocksCount, blocksTex, false); } + { mcPip.render(blocks, blocksCount, blocksTex); } } engine->renderer.endFrame(); } From c5aea0d50f2e3fe20961474f555daf9ee06544cb Mon Sep 17 00:00:00 2001 From: h4570 Date: Fri, 22 Jul 2022 00:12:36 +0200 Subject: [PATCH 20/33] spamming with multiple buffers to vu1 --- engine/inc/renderer/3d/mesh/mesh_frame.hpp | 13 +- engine/inc/renderer/3d/mesh/mesh_material.hpp | 19 ++- .../renderer/3d/mesh/mesh_material_frame.hpp | 24 ++- .../3d/pipeline/dynamic/core/dynpip_core.hpp | 3 + .../pipeline/dynamic/core/dynpip_renderer.hpp | 3 + .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 23 +-- .../3d/pipeline/static/static_pipeline.hpp | 21 +-- .../3d/builder/mesh_builder_frame_data.cpp | 15 +- .../3d/builder/mesh_builder_material_data.cpp | 15 +- engine/src/renderer/3d/mesh/mesh_frame.cpp | 79 +--------- engine/src/renderer/3d/mesh/mesh_material.cpp | 82 +--------- .../renderer/3d/mesh/mesh_material_frame.cpp | 130 ++++++++++++++++ .../3d/pipeline/dynamic/core/dynpip_core.cpp | 4 + .../pipeline/dynamic/core/dynpip_renderer.cpp | 35 ++++- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 140 +++++++++--------- .../3d/pipeline/static/static_pipeline.cpp | 109 +++----------- samples/h4570/src/h4570.cpp | 27 +++- 17 files changed, 382 insertions(+), 360 deletions(-) diff --git a/engine/inc/renderer/3d/mesh/mesh_frame.hpp b/engine/inc/renderer/3d/mesh/mesh_frame.hpp index 1acdb57..8bc7bcb 100644 --- a/engine/inc/renderer/3d/mesh/mesh_frame.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_frame.hpp @@ -23,18 +23,9 @@ class MeshFrame { ~MeshFrame(); const u32& getId() const { return id; } - const u32& getVertexCount() const { return vertexCount; } - const u32& getTextureCoordsCount() const { return textureCoordsCount; } - const u32& getNormalsCount() const { return normalsCount; } - const u32& getColorsCount() const { return colorsCount; } const u8& isMother() const { return _isMother; } const BBox& getBBox() const { return *bbox; } - Vec4* getVertices() const { return vertices; } - Vec4* getNormals() const { return normals; } - Vec4* getTextureCoords() const { return textureCoords; } - Color* getColors() const { return colors; } - void print() const; void print(const char* name) const; void print(const std::string& name) const { print(name.c_str()); } @@ -43,9 +34,7 @@ class MeshFrame { private: u8 _isMother; BBox* bbox; - u32 id, vertexCount, textureCoordsCount, normalsCount, colorsCount; - Vec4 *vertices, *textureCoords, *normals; - Color* colors; + u32 id; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/mesh_material.hpp b/engine/inc/renderer/3d/mesh/mesh_material.hpp index 1a7253f..063c94f 100644 --- a/engine/inc/renderer/3d/mesh/mesh_material.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_material.hpp @@ -22,18 +22,18 @@ class MeshMaterial { explicit MeshMaterial(const MeshMaterial& material); ~MeshMaterial(); - Color singleColor; + Color color; const u32& getId() const { return id; } const std::string& getName() const { return _name; } - const u32& getFacesCount() const { return facesCount; } const u8& isMother() const { return _isMother; } - const u8& isSingleColorActivated() const { return singleColorFlag; } - u32* getVertexFaces() const { return vertexFaces; } - u32* getTextureCoordFaces() const { return textureCoordFaces; } - u32* getNormalFaces() const { return normalFaces; } - u32* getColorFaces() const { return normalFaces; } - MeshMaterialFrame* getFrames() const { return *frames; } + const u32& getFramesCount() const { return framesCount; } + const u8& isSingleColorActivated() const { + return singleColorFlag; + } // TODO: colormode -> color / lightmap + + MeshMaterialFrame** getFrames() const { return frames; } + MeshMaterialFrame* getFrame(const u32& i) const { return frames[i]; } const BBox& getBBox(const u32& frame) const; void setSingleColorFlag(const u8& flag); @@ -48,8 +48,7 @@ class MeshMaterial { std::string _name; u8 _isMother, singleColorFlag; - u32 id, facesCount, framesCount; - u32 *vertexFaces, *textureCoordFaces, *normalFaces, *colorFaces; + u32 id, framesCount; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp b/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp index d2fa17c..330744a 100644 --- a/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp +++ b/engine/inc/renderer/3d/mesh/mesh_material_frame.hpp @@ -26,11 +26,33 @@ class MeshMaterialFrame { const u8& isMother() const { return _isMother; } const BBox& getBBox() const { return *bbox; } + const u32& getVertexCount() const { return vertexCount; } + Vec4* getVertices() const { return vertices; } + Vec4* getNormals() const { return normals; } + Vec4* getTextureCoords() const { return textureCoords; } + Color* getColors() const { return colors; } + + void print() const; + void print(const char* name) const; + void print(const std::string& name) const { print(name.c_str()); } + std::string getPrint(const char* name = nullptr) const; + private: + void allocateVertices(const MeshBuilderData& data, const u32& frameIndex, + const u32& materialIndex); + void allocateTextureCoords(const MeshBuilderData& data, const u32& frameIndex, + const u32& materialIndex); + void allocateNormals(const MeshBuilderData& data, const u32& frameIndex, + const u32& materialIndex); + void allocateColors(const MeshBuilderData& data, const u32& frameIndex, + const u32& materialIndex); + BBox* bbox; u8 _isMother; - u32 id; + u32 id, vertexCount; + Vec4 *vertices, *textureCoords, *normals; + Color* colors; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 3b4e31e..664f717 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -36,6 +36,9 @@ class DynPipCore { */ void initParts(DynPipBag* data); + // TODO: TEST! + void renderTEST(DynPipBag** bags, const u32& count); + /** Render 3D via "bags" */ void renderPart(DynPipBag* data, const bool& frustumCull = true); diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp index 3fced1d..8b95cad 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp @@ -29,6 +29,7 @@ class DynPipRenderer { RendererCoreTextureBuffers* texBuffers) const; void render(DynPipBag* bag); + void renderTEST(DynPipBag** bags, const u32& count); void clearLastProgramName(); @@ -40,6 +41,8 @@ class DynPipRenderer { void uploadPrograms(); void setDoubleBuffer(); + void addBufferDataToPacketTEST(DynPipVU1Program* program, DynPipBag** bags, + const u32& count); void addBufferDataToPacket(DynPipVU1Program* program, DynPipBag* bag); void sendPacket(); diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index 9c6ceb4..b3ab7fb 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -40,21 +40,24 @@ class DynamicPipeline : public Renderer3DPipeline { RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(DynamicMesh* mesh, MeshMaterial* material, DynPipBag* bag, - MeshFrame* frameFrom, MeshFrame* frameTo, + void addVertices(MeshMaterialFrame* materialFrameFrom, + MeshMaterialFrame* materialFrameTo, DynPipBag* bag, const u32& startIndex) const; + PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const DynPipOptions* options, M4x4* model) const; + DynPipColorBag* getColorBag(MeshMaterial* material) const; - DynPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo, - const u32& count, const u32& startIndex); - DynPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, - M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, - const DynPipOptions* options, + + DynPipTextureBag* getTextureBag(MeshMaterial* material, + MeshMaterialFrame* materialFrameFrom, + MeshMaterialFrame* materialFrameTo, + const u32& startIndex); + + DynPipLightingBag* getLightingBag(MeshMaterialFrame* materialFrameFrom, + MeshMaterialFrame* materialFrameTo, + M4x4* model, const DynPipOptions* options, PipelineDirLightsBag* dirLightsBag, - const u32& count, const u32& startIndex) const; void setLightingColorsCache(PipelineLightingOptions* lightingOptions); diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 09fa39f..8ec7172 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -41,18 +41,21 @@ class StaticPipeline : public Renderer3DPipeline { RendererCore* rendererCore; Vec4* colorsCache; - void addVertices(DynamicMesh* mesh, MeshMaterial* material, StaPipBag* bag, - MeshFrame* frameFrom, MeshFrame* frameTo) const; + void addVertices(MeshMaterialFrame* materialFrame, StaPipBag* bag) const; + PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const StaPipOptions* options, M4x4* model) const; - StaPipColorBag* getColorBag(DynamicMesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo) const; - StaPipTextureBag* getTextureBag(DynamicMesh* mesh, MeshMaterial* material, - MeshFrame* frameFrom, MeshFrame* frameTo); - StaPipLightingBag* getLightingBag(DynamicMesh* mesh, MeshMaterial* material, - M4x4* model, MeshFrame* frameFrom, - MeshFrame* frameTo, + + StaPipColorBag* getColorBag(MeshMaterial* material, + MeshMaterialFrame* materialFrame) const; + + StaPipTextureBag* getTextureBag(MeshMaterial* material, + MeshMaterialFrame* materialFrame); + + StaPipLightingBag* getLightingBag(MeshMaterialFrame* materialFrame, + M4x4* model, const StaPipOptions* options) const; + void deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const; void setLightingColorsCache(PipelineLightingOptions* lightingOptions); diff --git a/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp b/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp index c8f0b4e..e7d7513 100644 --- a/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp +++ b/engine/src/loaders/3d/builder/mesh_builder_frame_data.cpp @@ -24,7 +24,20 @@ MeshBuilderFrameData::MeshBuilderFrameData() { colorsCount = 0; } -MeshBuilderFrameData::~MeshBuilderFrameData() {} +MeshBuilderFrameData::~MeshBuilderFrameData() { + if (vertices) { + delete[] vertices; + } + if (normals) { + delete[] normals; + } + if (textureCoords) { + delete[] textureCoords; + } + if (colors) { + delete[] colors; + } +} void MeshBuilderFrameData::allocateTextureCoords(const u32& count) { textureCoordsCount = count; diff --git a/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp b/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp index 712daec..7eff1e7 100644 --- a/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp +++ b/engine/src/loaders/3d/builder/mesh_builder_material_data.cpp @@ -22,7 +22,20 @@ MeshBuilderMaterialData::MeshBuilderMaterialData() { count = 0; } -MeshBuilderMaterialData::~MeshBuilderMaterialData() {} +MeshBuilderMaterialData::~MeshBuilderMaterialData() { + if (vertexFaces) { + delete[] vertexFaces; + } + if (textureCoordFaces) { + delete[] textureCoordFaces; + } + if (normalFaces) { + delete[] normalFaces; + } + if (colorFaces) { + delete[] colorFaces; + } +} void MeshBuilderMaterialData::allocateFaces(const u32& t_count) { vertexFaces = new u32[t_count]; diff --git a/engine/src/renderer/3d/mesh/mesh_frame.cpp b/engine/src/renderer/3d/mesh/mesh_frame.cpp index 0d47b2e..a3e8b47 100644 --- a/engine/src/renderer/3d/mesh/mesh_frame.cpp +++ b/engine/src/renderer/3d/mesh/mesh_frame.cpp @@ -25,38 +25,6 @@ MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) { id = rand() % 1000000; - vertices = data.frames[index]->vertices; - TYRA_ASSERT(vertices != nullptr, "Vertices are required"); - vertexCount = data.frames[index]->verticesCount; - TYRA_ASSERT(vertexCount > 0, "Vertices count must be greater than 0"); - - if (data.normalsEnabled) { - normals = data.frames[index]->normals; - normalsCount = data.frames[index]->normalsCount; - TYRA_ASSERT(normals != nullptr, "Normals are required"); - } else { - normalsCount = 0; - normals = nullptr; - } - - if (data.textureCoordsEnabled) { - textureCoords = data.frames[index]->textureCoords; - textureCoordsCount = data.frames[index]->textureCoordsCount; - TYRA_ASSERT(textureCoords != nullptr, "Texture coordinates are required"); - } else { - textureCoordsCount = 0; - textureCoords = nullptr; - } - - if (data.manyColorsEnabled) { - colors = data.frames[index]->colors; - colorsCount = data.frames[index]->colorsCount; - TYRA_ASSERT(colors != nullptr, "Colors are required"); - } else { - colorsCount = 0; - colors = nullptr; - } - bbox = new BBox(data.frames[index]->vertices, data.frames[index]->verticesCount); @@ -66,16 +34,6 @@ MeshFrame::MeshFrame(const MeshBuilderData& data, const u32& index) { MeshFrame::MeshFrame(const MeshFrame& frame) { id = rand() % 1000000; - vertices = frame.vertices; - normals = frame.normals; - textureCoords = frame.textureCoords; - colors = frame.colors; - - vertexCount = frame.vertexCount; - normalsCount = frame.normalsCount; - textureCoordsCount = frame.textureCoordsCount; - colorsCount = frame.colorsCount; - bbox = frame.bbox; _isMother = false; @@ -83,10 +41,6 @@ MeshFrame::MeshFrame(const MeshFrame& frame) { MeshFrame::~MeshFrame() { if (_isMother) { - delete[] vertices; - if (normals) delete[] normals; - if (textureCoords) delete[] textureCoords; - if (colors) delete[] colors; delete bbox; } } @@ -109,40 +63,9 @@ std::string MeshFrame::getPrint(const char* name) const { res << "MeshFrame("; } res << std::fixed << std::setprecision(2); - + res << "Id: " << id << ", " << std::endl; - res << "VertexCount: " << vertexCount << ", " << std::endl; - res << "NormalsCount: " << normalsCount << ", " << std::endl; - res << "TextureCoordsCount: " << textureCoordsCount << ", " << std::endl; - res << "ColorsCount: " << colorsCount << ", " << std::endl; res << "BBox: " << bbox->getPrint() << ", " << std::endl; - - res << "Vertices: "; - for (u32 i = 0; i < vertexCount; i++) { - res << vertices[i].getPrint() << ", " << std::endl; - } - - if (normals) { - res << "Normals: "; - for (u32 i = 0; i < normalsCount; i++) { - res << normals[i].getPrint() << ", " << std::endl; - } - } - - if (textureCoords) { - res << "TextureCoords: "; - for (u32 i = 0; i < textureCoordsCount; i++) { - res << textureCoords[i].getPrint() << ", " << std::endl; - } - } - - if (colors) { - res << "Colors: "; - for (u32 i = 0; i < colorsCount; i++) { - res << colors[i].getPrint() << ", " << std::endl; - } - } - res << ")"; return res.str(); diff --git a/engine/src/renderer/3d/mesh/mesh_material.cpp b/engine/src/renderer/3d/mesh/mesh_material.cpp index e791505..8c583d5 100644 --- a/engine/src/renderer/3d/mesh/mesh_material.cpp +++ b/engine/src/renderer/3d/mesh/mesh_material.cpp @@ -19,43 +19,20 @@ namespace Tyra { MeshMaterial::MeshMaterial(const MeshBuilderData& data, const u32& materialIndex) - : singleColor(false) { + : color(false) { TYRA_ASSERT(materialIndex < data.materialsCount && materialIndex >= 0, "Provided index \"", materialIndex, "\" is out of range"); id = rand() % 1000000; - vertexFaces = data.materials[materialIndex]->vertexFaces; - TYRA_ASSERT(vertexFaces != nullptr, "Vertex faces are required"); - - if (data.textureCoordsEnabled) { - textureCoordFaces = data.materials[materialIndex]->textureCoordFaces; - TYRA_ASSERT(textureCoordFaces != nullptr, - "Texture coord faces are required"); - } else { - textureCoordFaces = nullptr; - } - - if (data.normalsEnabled) { - normalFaces = data.materials[materialIndex]->normalFaces; - TYRA_ASSERT(normalFaces != nullptr, "Normal faces are required"); - } else { - normalFaces = nullptr; - } - if (data.manyColorsEnabled) { - colorFaces = data.materials[materialIndex]->colorFaces; singleColorFlag = false; - TYRA_ASSERT(colorFaces != nullptr, "Colors faces are required"); + TYRA_ASSERT(data.frames[0]->colors != nullptr, "Colors faces are required"); } else { - colorFaces = nullptr; singleColorFlag = true; } - singleColor.set(128.0F, 128.0F, 128.0F, 128.0F); - - facesCount = data.materials[materialIndex]->count; - TYRA_ASSERT(facesCount > 0, "Faces count must be greater than 0"); + color.set(128.0F, 128.0F, 128.0F, 128.0F); _name = data.materials[materialIndex]->name; TYRA_ASSERT(_name.length() > 0, "MeshMaterial name cannot be empty"); @@ -72,16 +49,11 @@ MeshMaterial::MeshMaterial(const MeshBuilderData& data, MeshMaterial::MeshMaterial(const MeshMaterial& mesh) { id = rand() % 1000000; - vertexFaces = mesh.vertexFaces; - textureCoordFaces = mesh.textureCoordFaces; - normalFaces = mesh.normalFaces; - colorFaces = mesh.colorFaces; - - facesCount = mesh.facesCount; + singleColorFlag = mesh.singleColorFlag; framesCount = mesh.framesCount; _name = mesh._name; - singleColor.set(128.0F, 128.0F, 128.0F, 128.0F); + color.set(128.0F, 128.0F, 128.0F, 128.0F); frames = new MeshMaterialFrame*[framesCount]; for (u32 i = 0; i < framesCount; i++) { @@ -92,13 +64,6 @@ MeshMaterial::MeshMaterial(const MeshMaterial& mesh) { } MeshMaterial::~MeshMaterial() { - if (_isMother) { - delete[] vertexFaces; - if (textureCoordFaces) delete[] textureCoordFaces; - if (normalFaces) delete[] normalFaces; - if (colorFaces) delete[] colorFaces; - } - for (u32 i = 0; i < framesCount; i++) { delete frames[i]; } @@ -111,7 +76,7 @@ const BBox& MeshMaterial::getBBox(const u32& frame) const { void MeshMaterial::setSingleColorFlag(const u8& flag) { TYRA_ASSERT( - colorFaces != nullptr, + frames[0]->getColors() != nullptr, "Colors and color faces are required to use color-per-vertex mode"); singleColorFlag = flag; @@ -139,39 +104,8 @@ std::string MeshMaterial::getPrint(const char* name) const { res << std::fixed << std::setprecision(2); res << "Id: " << id << ", " << std::endl; res << "Name: " << _name << ", " << std::endl; - res << "FacesCount: " << facesCount << ", " << std::endl; - res << "FramesCount: " << framesCount << ", " << std::endl; - - res << "vertexFaces: " << std::endl; - for (u32 i = 0; i < facesCount; i++) { - res << vertexFaces[i] << ", "; - if (i % 3 == 2) res << std::endl; - } - - if (textureCoordFaces) { - res << "TextureCoordFaces: " << std::endl; - for (u32 i = 0; i < facesCount; i++) { - res << textureCoordFaces[i] << ", "; - if (i % 3 == 2) res << std::endl; - } - } - - if (normalFaces) { - res << "NormalFaces: " << std::endl; - for (u32 i = 0; i < facesCount; i++) { - res << normalFaces[i] << ", "; - if (i % 3 == 2) res << std::endl; - } - } - - if (colorFaces) { - res << "ColorFaces: " << std::endl; - for (u32 i = 0; i < facesCount; i++) { - res << colorFaces[i] << ", "; - if (i % 3 == 2) res << std::endl; - } - } - + res << "Frames count: " << framesCount << ", " << std::endl; + res << "Single color?: " << static_cast(singleColorFlag) << std::endl; res << ")"; return res.str(); diff --git a/engine/src/renderer/3d/mesh/mesh_material_frame.cpp b/engine/src/renderer/3d/mesh/mesh_material_frame.cpp index f4e8519..d151cb5 100644 --- a/engine/src/renderer/3d/mesh/mesh_material_frame.cpp +++ b/engine/src/renderer/3d/mesh/mesh_material_frame.cpp @@ -11,6 +11,8 @@ #include "debug/debug.hpp" #include +#include +#include #include "renderer/models/color.hpp" #include "loaders/3d/builder/mesh_builder_data.hpp" #include "renderer/3d/mesh/mesh_material_frame.hpp" @@ -31,12 +33,24 @@ MeshMaterialFrame::MeshMaterialFrame(const MeshBuilderData& data, data.materials[materialIndex]->vertexFaces, data.materials[materialIndex]->count); + allocateVertices(data, frameIndex, materialIndex); + allocateNormals(data, frameIndex, materialIndex); + allocateTextureCoords(data, frameIndex, materialIndex); + allocateColors(data, frameIndex, materialIndex); + _isMother = true; } MeshMaterialFrame::MeshMaterialFrame(const MeshMaterialFrame& frame) { id = rand() % 1000000; + vertexCount = frame.vertexCount; + + vertices = frame.vertices; + normals = frame.normals; + textureCoords = frame.textureCoords; + colors = frame.colors; + bbox = frame.bbox; _isMother = false; @@ -44,8 +58,124 @@ MeshMaterialFrame::MeshMaterialFrame(const MeshMaterialFrame& frame) { MeshMaterialFrame::~MeshMaterialFrame() { if (_isMother) { + delete[] vertices; + if (normals) delete[] normals; + if (textureCoords) delete[] textureCoords; + if (colors) delete[] colors; delete bbox; } } +std::string MeshMaterialFrame::getPrint(const char* name) const { + std::stringstream res; + if (name) { + res << name << "("; + } else { + res << "MeshMaterialFrame("; + } + res << std::fixed << std::setprecision(2); + + res << "Id: " << id << ", " << std::endl; + res << "Vertex count: " << vertexCount << ", " << std::endl; + res << "BBox: " << bbox->getPrint() << ", " << std::endl; + + res << "Vertices: "; + for (u32 i = 0; i < vertexCount; i++) { + res << vertices[i].getPrint() << ", " << std::endl; + } + + if (normals) { + res << "Normals: "; + for (u32 i = 0; i < vertexCount; i++) { + res << normals[i].getPrint() << ", " << std::endl; + } + } + + if (textureCoords) { + res << "TextureCoords: "; + for (u32 i = 0; i < vertexCount; i++) { + res << textureCoords[i].getPrint() << ", " << std::endl; + } + } + + if (colors) { + res << "Colors: "; + for (u32 i = 0; i < vertexCount; i++) { + res << colors[i].getPrint() << ", " << std::endl; + } + } + + res << ")"; + + return res.str(); +} + +void MeshMaterialFrame::allocateVertices(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { + vertexCount = data.materials[materialIndex]->count; // faces count + vertices = new Vec4[vertexCount]; + + TYRA_ASSERT(vertexCount > 0, "Vertex count must be greater than 0"); + + auto* rolled = data.frames[frameIndex]->vertices; + auto* faces = data.materials[materialIndex]->vertexFaces; + + TYRA_ASSERT(rolled != nullptr, "Vertices are required"); + TYRA_ASSERT(faces != nullptr, "Vertex faces are required"); + + for (u32 i = 0; i < vertexCount; i++) vertices[i] = rolled[faces[i]]; +} + +void MeshMaterialFrame::allocateTextureCoords(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { + textureCoords = nullptr; + if (!data.textureCoordsEnabled) return; + + textureCoords = new Vec4[vertexCount]; + + auto* rolled = data.frames[frameIndex]->textureCoords; + auto* faces = data.materials[materialIndex]->textureCoordFaces; + + TYRA_ASSERT(rolled != nullptr, "Texture coordinates are required"); + TYRA_ASSERT(faces != nullptr, "Texture coordinate faces are required"); + + for (u32 i = 0; i < vertexCount; i++) textureCoords[i] = rolled[faces[i]]; +} + +void MeshMaterialFrame::allocateNormals(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { + normals = nullptr; + if (!data.normalsEnabled) return; + + normals = new Vec4[vertexCount]; + + auto* rolled = data.frames[frameIndex]->normals; + auto* faces = data.materials[materialIndex]->normalFaces; + + TYRA_ASSERT(rolled != nullptr, "Normals are required"); + TYRA_ASSERT(faces != nullptr, "Normal faces are required"); + + for (u32 i = 0; i < vertexCount; i++) normals[i] = rolled[faces[i]]; +} + +void MeshMaterialFrame::allocateColors(const MeshBuilderData& data, + const u32& frameIndex, + const u32& materialIndex) { + colors = nullptr; + if (!data.manyColorsEnabled) return; + + colors = new Color[vertexCount]; + + auto* rolled = data.frames[frameIndex]->colors; + auto* faces = data.materials[materialIndex]->colorFaces; + + TYRA_ASSERT(rolled != nullptr, "Colors are required"); + TYRA_ASSERT(faces != nullptr, "Color faces are required"); + + for (u32 i = 0; i < vertexCount; i++) colors[i] = rolled[faces[i]]; +} + } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index 946b655..4f519d1 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -46,6 +46,10 @@ void DynPipCore::initParts(DynPipBag* bag) { delete texBuffers; } +void DynPipCore::renderTEST(DynPipBag** bags, const u32& count) { + qbufferRenderer.renderTEST(bags, count); +} + void DynPipCore::renderPart(DynPipBag* bag, const bool& frustumCull) { if (bag->count <= 0) return; diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index 56c0b52..438a7a8 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -41,7 +41,7 @@ void DynPipRenderer::init(RendererCore* t_core, dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); dma_channel_fast_waits(DMA_CHANNEL_VIF1); - const u32 VU1_PACKET_SIZE = 16; + const u32 VU1_PACKET_SIZE = 256; packets[0] = packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); @@ -143,10 +143,40 @@ void DynPipRenderer::render(DynPipBag* bag) { sendPacket(); } +void DynPipRenderer::renderTEST(DynPipBag** bags, const u32& count) { + if (count <= 0) return; + + auto* program = programsRepo->getProgramByBag(bags[0]); + addBufferDataToPacketTEST(program, bags, count); + sendPacket(); +} + +void DynPipRenderer::addBufferDataToPacketTEST(DynPipVU1Program* program, + DynPipBag** bags, + const u32& count) { + currentPacket = packets[context]; + packet2_reset(currentPacket, false); + + for (u32 i = 0; i < count; i++) { + program->addBufferDataToPacket(currentPacket, bags[i], + &rendererCore->gs.prim); + } + + if (lastProgramName != program->getName()) { + packet2_utils_vu_add_start_program(currentPacket, + program->getDestinationAddress()); + lastProgramName = program->getName(); + } else { + packet2_utils_vu_add_continue_program(currentPacket); + } + packet2_utils_vu_add_end_tag(currentPacket); +} + void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program, DynPipBag* bag) { currentPacket = packets[context]; packet2_reset(currentPacket, false); + program->addBufferDataToPacket(currentPacket, bag, &rendererCore->gs.prim); if (lastProgramName != program->getName()) { @@ -163,6 +193,9 @@ void DynPipRenderer::sendPacket() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); + // TODO + // TYRA_LOG(packet2_get_qw_count(currentPacket)); + // Switch packet, so we can proceed during DMA transfer context = !context; } diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index e5fc654..f1bd708 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -23,16 +23,17 @@ void DynamicPipeline::init(RendererCore* t_core) { void DynamicPipeline::onUse() { core.reinitVU1Programs(); } +#define BUFFER_COUNT 64 + void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto model = mesh->getModelMatrix(); - auto* frameFrom = mesh->getFrame(mesh->getCurrentAnimationFrame()); - auto* frameTo = mesh->getFrame(mesh->getNextAnimationFrame()); auto* infoBag = getInfoBag(mesh, options, &model); PipelineDirLightsBag* dirLights = nullptr; auto frustumCulling = options ? options->frustumCulling : DynPipFrustumCulling_Simple; if (frustumCulling == DynPipFrustumCulling_Simple) { + auto* frameTo = mesh->getFrame(mesh->getNextAnimationFrame()); if (frameTo->getBBox().isInFrustum( rendererCore->renderer3D.frustumPlanes.getAll(), model) == CoreBBoxFrustum::OUTSIDE_FRUSTUM) { @@ -47,7 +48,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { options->lighting->directionalDirections); } - DynPipBag buffers[2]; + DynPipBag buffers[BUFFER_COUNT]; u8 context = 0; setBuffersDefaultVars(buffers, mesh, infoBag); @@ -55,54 +56,78 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); - auto partSize = core.getMaxVertCountByParams( - options && options->lighting, material->getTextureCoordFaces()); + auto* frameFrom = material->getFrame(mesh->getCurrentAnimationFrame()); + auto* frameTo = material->getFrame(mesh->getNextAnimationFrame()); + + auto partSize = + core.getMaxVertCountByParams(options && options->lighting, + material->getFrame(0)->getTextureCoords()); + u32 partsCount = - ceil(material->getFacesCount() / static_cast(partSize)); + ceil(frameFrom->getVertexCount() / static_cast(partSize)); + auto* colorBag = getColorBag(material); + setBuffersColorBag(buffers, colorBag); u8 isPartInitialized = false; - for (u32 j = 0; j < partsCount; j++) { - auto& buffer = buffers[context]; + for (u32 k = 0; k < partsCount; k++) { + auto& buffer = buffers[context++]; freeBuffer(&buffer); - buffer.count = j == partsCount - 1 - ? material->getFacesCount() - j * partSize + buffer.count = k == partsCount - 1 + ? frameFrom->getVertexCount() - k * partSize : partSize; - u32 startIndex = j * partSize; + u32 startIndex = k * partSize; - addVertices(mesh, material, &buffer, frameFrom, frameTo, startIndex); - buffer.texture = getTextureBag(mesh, material, frameFrom, frameTo, - buffer.count, startIndex); - buffer.lighting = - getLightingBag(mesh, material, &model, frameFrom, frameTo, options, - dirLights, buffer.count, startIndex); + addVertices(frameFrom, frameTo, &buffer, startIndex); + buffer.texture = getTextureBag(material, frameFrom, frameTo, startIndex); + buffer.lighting = getLightingBag(frameFrom, frameTo, &model, options, + dirLights, startIndex); if (!isPartInitialized) { core.initParts(&buffer); isPartInitialized = true; } - core.renderPart(&buffer, frustumCulling == DynPipFrustumCulling_Precise); + // core.renderPart(&buffer, frustumCulling == + // DynPipFrustumCulling_Precise); - context = !context; + if (context == BUFFER_COUNT / 2 || context == BUFFER_COUNT) { + DynPipBag** sendBuffers = new DynPipBag*[BUFFER_COUNT / 2]; + for (u32 i = 0; i < BUFFER_COUNT / 2; i++) { + sendBuffers[i] = &buffers[context - ((BUFFER_COUNT / 2) - i)]; + } + core.renderTEST(sendBuffers, BUFFER_COUNT / 2); + + delete[] sendBuffers; + if (context == BUFFER_COUNT) context = 0; + } } - freeBuffer(&buffers[context]); - freeBuffer(&buffers[!context]); - delete colorBag; } + // TODO: Refactor (define itd, wywalic te wszystkie TEST i poprawic) + // TODO: Rozmiar pakietu VU1 na podstawie rozmiaru buforow + // TODO: Dorenderowac brakujace (np gdy context == 1-buffersize-1 itd) + // TODO: Program renderujacy w VU1 + // TODO: Github: Ten sam myk zrobic w static pipeline? + + for (u32 i = 0; i < BUFFER_COUNT; i++) freeBuffer(&buffers[i]); + + if (dirLights) { + delete dirLights; + } + delete infoBag; } void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, DynamicMesh* mesh, PipelineInfoBag* infoBag) { - for (int i = 0; i < 2; i++) { + for (int i = 0; i < BUFFER_COUNT; i++) { buffers[i].info = infoBag; buffers[i].interpolation = mesh->getAnimState().interpolation; } @@ -110,29 +135,19 @@ void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, void DynamicPipeline::setBuffersColorBag(DynPipBag* buffers, DynPipColorBag* colorBag) { - for (int i = 0; i < 2; i++) { + for (int i = 0; i < BUFFER_COUNT; i++) { buffers[i].color = colorBag; } } void DynamicPipeline::freeBuffer(DynPipBag* bag) { if (bag->texture) { - bag->texture->freeCoords(); delete bag->texture; } if (bag->lighting) { - bag->lighting->freeNormals(); delete bag->lighting; } - - if (bag->verticesFrom) { - delete[] bag->verticesFrom; - } - - if (bag->verticesTo) { - delete[] bag->verticesTo; - } } PipelineInfoBag* DynamicPipeline::getInfoBag(DynamicMesh* mesh, @@ -155,57 +170,42 @@ PipelineInfoBag* DynamicPipeline::getInfoBag(DynamicMesh* mesh, return result; } -void DynamicPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, - DynPipBag* bag, MeshFrame* frameFrom, - MeshFrame* frameTo, - const u32& startIndex) const { - bag->verticesFrom = new Vec4[bag->count]; - bag->verticesTo = new Vec4[bag->count]; - - for (u32 i = startIndex; i < startIndex + bag->count; i++) { - auto& face = material->getVertexFaces()[i]; - auto offset = i - startIndex; - bag->verticesFrom[offset] = frameFrom->getVertices()[face]; - bag->verticesTo[offset] = frameTo->getVertices()[face]; - } +void DynamicPipeline::addVertices(MeshMaterialFrame* materialFrameFrom, + MeshMaterialFrame* materialFrameTo, + DynPipBag* bag, const u32& startIndex) const { + bag->verticesFrom = &materialFrameFrom->getVertices()[startIndex]; + bag->verticesTo = &materialFrameTo->getVertices()[startIndex]; } DynPipColorBag* DynamicPipeline::getColorBag(MeshMaterial* material) const { auto* result = new DynPipColorBag(); - result->single = &material->singleColor; + result->single = &material->color; return result; } DynPipTextureBag* DynamicPipeline::getTextureBag( - DynamicMesh* mesh, MeshMaterial* material, MeshFrame* frameFrom, - MeshFrame* frameTo, const u32& count, const u32& startIndex) { - if (!material->getTextureCoordFaces()) return nullptr; + MeshMaterial* material, MeshMaterialFrame* materialFrameFrom, + MeshMaterialFrame* materialFrameTo, const u32& startIndex) { + if (!materialFrameFrom->getTextureCoords()) return nullptr; auto* result = new DynPipTextureBag(); + result->texture = rendererCore->texture.repository.getBySpriteOrMesh(material->getId()); TYRA_ASSERT(result->texture, "Texture for material id: ", material->getId(), "was not found in texture repository!"); - result->coordinatesFrom = new Vec4[count]; - result->coordinatesTo = new Vec4[count]; - - for (u32 i = startIndex; i < startIndex + count; i++) { - auto& face = material->getTextureCoordFaces()[i]; - auto offset = i - startIndex; - result->coordinatesFrom[offset] = frameFrom->getTextureCoords()[face]; - result->coordinatesTo[offset] = frameTo->getTextureCoords()[face]; - } + result->coordinatesFrom = &materialFrameFrom->getTextureCoords()[startIndex]; + result->coordinatesTo = &materialFrameTo->getTextureCoords()[startIndex]; return result; } DynPipLightingBag* DynamicPipeline::getLightingBag( - DynamicMesh* mesh, MeshMaterial* material, M4x4* model, - MeshFrame* frameFrom, MeshFrame* frameTo, const DynPipOptions* options, - PipelineDirLightsBag* dirLightsBag, const u32& count, - const u32& startIndex) const { - if (!material->getNormalFaces() || options == nullptr || + MeshMaterialFrame* materialFrameFrom, MeshMaterialFrame* materialFrameTo, + M4x4* model, const DynPipOptions* options, + PipelineDirLightsBag* dirLightsBag, const u32& startIndex) const { + if (!materialFrameFrom->getNormals() || options == nullptr || options->lighting == nullptr) return nullptr; @@ -213,15 +213,9 @@ DynPipLightingBag* DynamicPipeline::getLightingBag( result->lightMatrix = model; result->dirLights = dirLightsBag; - result->normalsFrom = new Vec4[count]; - result->normalsTo = new Vec4[count]; - for (u32 i = startIndex; i < startIndex + count; i++) { - auto& face = material->getNormalFaces()[i]; - auto offset = i - startIndex; - result->normalsFrom[offset] = frameFrom->getNormals()[face]; - result->normalsTo[offset] = frameTo->getNormals()[face]; - } + result->normalsFrom = &materialFrameFrom->getNormals()[startIndex]; + result->normalsTo = &materialFrameTo->getNormals()[startIndex]; return result; } diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 2e069c1..5f774ca 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -25,21 +25,13 @@ void StaticPipeline::onUse() { core.reinitVU1Programs(); } void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); - - MeshFrame* frameFrom = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getCurrentAnimationFrame()) - : mesh->getFrame(0); - - MeshFrame* frameTo = mesh->getFramesCount() > 0 - ? mesh->getFrame(mesh->getNextAnimationFrame()) - : nullptr; - auto* infoBag = getInfoBag(mesh, options, &model); if (options && options->lighting) setLightingColorsCache(options->lighting); for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); + auto* materialFrame = material->getFrame(0); // 2x bufory[maxVertCount*2] -> pętla po mniejszych częściach i czestsze // rendery @@ -50,12 +42,11 @@ void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { // material->getTextureCoordFaces()); StaPipBag bag; - addVertices(mesh, material, &bag, frameFrom, frameTo); + addVertices(materialFrame, &bag); bag.info = infoBag; - bag.color = getColorBag(mesh, material, frameFrom, frameTo); - bag.texture = getTextureBag(mesh, material, frameFrom, frameTo); - bag.lighting = - getLightingBag(mesh, material, &model, frameFrom, frameTo, options); + bag.color = getColorBag(material, materialFrame); + bag.texture = getTextureBag(material, materialFrame); + bag.lighting = getLightingBag(materialFrame, &model, options); core.render(&bag); @@ -65,22 +56,10 @@ void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { delete infoBag; } -void StaticPipeline::addVertices(DynamicMesh* mesh, MeshMaterial* material, - StaPipBag* bag, MeshFrame* frameFrom, - MeshFrame* frameTo) const { - bag->count = material->getFacesCount(); - bag->vertices = new Vec4[bag->count]; - - for (u32 i = 0; i < bag->count; i++) { - auto& face = material->getVertexFaces()[i]; - if (frameTo == nullptr) { - bag->vertices[i] = frameFrom->getVertices()[face]; - } else { - Vec4::setLerp(&bag->vertices[i], frameFrom->getVertices()[face], - frameTo->getVertices()[face], - mesh->getAnimState().interpolation); - } - } +void StaticPipeline::addVertices(MeshMaterialFrame* materialFrame, + StaPipBag* bag) const { + bag->count = materialFrame->getVertexCount(); + bag->vertices = materialFrame->getVertices(); } PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, @@ -105,39 +84,22 @@ PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, return result; } -StaPipColorBag* StaticPipeline::getColorBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) const { +StaPipColorBag* StaticPipeline::getColorBag( + MeshMaterial* material, MeshMaterialFrame* materialFrame) const { auto* result = new StaPipColorBag(); if (material->isSingleColorActivated()) { - result->single = &material->singleColor; + result->single = &material->color; } else { - result->many = new Color[material->getFacesCount()]; - - for (u32 i = 0; i < material->getFacesCount(); i++) { - auto& face = material->getColorFaces()[i]; - if (frameTo == nullptr) { - result->many[i] = frameFrom->getColors()[face]; - } else { - Vec4::setLerp( - reinterpret_cast(&result->many[i]), - reinterpret_cast(frameFrom->getColors()[face]), - reinterpret_cast(frameTo->getColors()[face]), - mesh->getAnimState().interpolation); - } - } + result->many = materialFrame->getColors(); } return result; } -StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, - MeshMaterial* material, - MeshFrame* frameFrom, - MeshFrame* frameTo) { - if (!material->getTextureCoordFaces()) return nullptr; +StaPipTextureBag* StaticPipeline::getTextureBag( + MeshMaterial* material, MeshMaterialFrame* materialFrame) { + if (!materialFrame->getTextureCoords()) return nullptr; auto* result = new StaPipTextureBag(); @@ -146,28 +108,15 @@ StaPipTextureBag* StaticPipeline::getTextureBag(DynamicMesh* mesh, TYRA_ASSERT(result->texture, "Texture for material id: ", material->getId(), "was not found in texture repository!"); - result->coordinates = new Vec4[material->getFacesCount()]; - - for (u32 i = 0; i < material->getFacesCount(); i++) { - auto& face = material->getTextureCoordFaces()[i]; - if (frameTo == nullptr) { - result->coordinates[i] = frameFrom->getTextureCoords()[face]; - } else { - Vec4::setLerp(&result->coordinates[i], - frameFrom->getTextureCoords()[face], - frameTo->getTextureCoords()[face], - mesh->getAnimState().interpolation); - } - } + result->coordinates = materialFrame->getTextureCoords(); return result; } StaPipLightingBag* StaticPipeline::getLightingBag( - DynamicMesh* mesh, MeshMaterial* material, M4x4* model, - MeshFrame* frameFrom, MeshFrame* frameTo, + MeshMaterialFrame* materialFrame, M4x4* model, const StaPipOptions* options) const { - if (!material->getNormalFaces() || options == nullptr || + if (!materialFrame->getNormals() || options == nullptr || options->lighting == nullptr) return nullptr; @@ -181,18 +130,7 @@ StaPipLightingBag* StaticPipeline::getLightingBag( result->dirLights->setLightsManually( colorsCache, options->lighting->directionalDirections); - result->normals = new Vec4[material->getFacesCount()]; - - for (u32 i = 0; i < material->getFacesCount(); i++) { - auto& face = material->getNormalFaces()[i]; - if (frameTo == nullptr) { - result->normals[i] = frameFrom->getNormals()[face]; - } else { - Vec4::setLerp(&result->normals[i], frameFrom->getNormals()[face], - frameTo->getNormals()[face], - mesh->getAnimState().interpolation); - } - } + result->normals = materialFrame->getNormals(); return result; } @@ -208,22 +146,15 @@ void StaticPipeline::setLightingColorsCache( void StaticPipeline::deallocDrawBags(StaPipBag* bag, MeshMaterial* material) const { - if (bag->color->many) { - delete[] bag->color->many; - } - if (bag->texture) { - delete[] bag->texture->coordinates; delete bag->texture; } if (bag->lighting) { - delete[] bag->lighting->normals; delete bag->lighting->dirLights; // TODO delete bag->lighting; } - delete[] bag->vertices; delete bag->color; } diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index a92de55..bf40fb6 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -104,7 +104,7 @@ void H4570::init() { } engine->audio.playSong(); - // engine->renderer.setFrameLimit(false); + engine->renderer.setFrameLimit(false); } u32 counter = 0; @@ -149,9 +149,34 @@ void H4570::loop() { engine->renderer.renderer3D.usePipeline(&dynpip); { dynpip.render(warrior, dynOptions); + // dynpip.render(warrior2, dynOptions); // dynpip.render(warrior3, dynOptions); // dynpip.render(warrior4, dynOptions); + + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + // dynpip.render(warrior2, dynOptions); + + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); + // dynpip.render(warrior3, dynOptions); } engine->renderer.renderer3D.usePipeline(&mcPip); From 1ffba47119685c587b21c078200ba70a98e45927 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 15:55:38 +0200 Subject: [PATCH 21/33] spamming with vu1 packets 2 --- .../3d/pipeline/dynamic/core/dynpip_core.hpp | 8 +- .../pipeline/dynamic/core/dynpip_renderer.hpp | 11 +- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 10 ++ .../3d/pipeline/dynamic/core/dynpip_core.cpp | 61 ++++++----- .../pipeline/dynamic/core/dynpip_renderer.cpp | 47 +++----- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 101 +++++++++++++----- 6 files changed, 139 insertions(+), 99 deletions(-) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index 664f717..ffa127b 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -25,7 +25,7 @@ class DynPipCore { DynPipProgramsRepository repository; - void init(RendererCore* t_core); + void init(RendererCore* t_core, const u32& t_packetSize); /** Force starting VU1 program instead of continueing */ void clear() { qbufferRenderer.clearLastProgramName(); } @@ -36,11 +36,9 @@ class DynPipCore { */ void initParts(DynPipBag* data); - // TODO: TEST! - void renderTEST(DynPipBag** bags, const u32& count); - /** Render 3D via "bags" */ - void renderPart(DynPipBag* data, const bool& frustumCull = true); + void renderPart(DynPipBag** bags, const u32& count, + const bool& frustumCull = true); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isLightingEnabled, diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp index 8b95cad..bb111c8 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp @@ -21,15 +21,15 @@ class DynPipRenderer { DynPipRenderer(); ~DynPipRenderer(); - void init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo); + void init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo, + const u32& t_packetSize); void reinitVU1(); void sendObjectData(DynPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const; - void render(DynPipBag* bag); - void renderTEST(DynPipBag** bags, const u32& count); + void render(DynPipBag** bags, const u32& count); void clearLastProgramName(); @@ -41,9 +41,8 @@ class DynPipRenderer { void uploadPrograms(); void setDoubleBuffer(); - void addBufferDataToPacketTEST(DynPipVU1Program* program, DynPipBag** bags, - const u32& count); - void addBufferDataToPacket(DynPipVU1Program* program, DynPipBag* bag); + void addBufferDataToPacket(DynPipVU1Program* program, DynPipBag** bags, + const u32& count); void sendPacket(); packet2_t* packets[2]; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index b3ab7fb..8a53d21 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -24,6 +24,8 @@ class DynamicPipeline : public Renderer3DPipeline { DynamicPipeline(); ~DynamicPipeline(); + static const u32 buffersCount; + DynPipCore core; void init(RendererCore* core); @@ -39,6 +41,14 @@ class DynamicPipeline : public Renderer3DPipeline { private: RendererCore* rendererCore; Vec4* colorsCache; + DynPipBag* buffers; + static const u32 halfBuffersCount; + + void setBuffer(DynPipBag* buffers, DynPipBag* buffer, u16* bufferIndex, + const DynPipFrustumCulling& frustumCulling); + + void sendRestOfBuffers(DynPipBag* buffers, u16* bufferIndex, + const DynPipFrustumCulling& frustumCulling); void addVertices(MeshMaterialFrame* materialFrameFrom, MeshMaterialFrame* materialFrameTo, DynPipBag* bag, diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index 4f519d1..df289f3 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -19,9 +19,9 @@ DynPipCore::DynPipCore() {} DynPipCore::~DynPipCore() {} -void DynPipCore::init(RendererCore* t_core) { +void DynPipCore::init(RendererCore* t_core, const u32& t_packetSize) { rendererCore = t_core; - qbufferRenderer.init(t_core, &repository); + qbufferRenderer.init(t_core, &repository, t_packetSize); } void DynPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); } @@ -46,41 +46,54 @@ void DynPipCore::initParts(DynPipBag* bag) { delete texBuffers; } -void DynPipCore::renderTEST(DynPipBag** bags, const u32& count) { - qbufferRenderer.renderTEST(bags, count); -} +void DynPipCore::renderPart(DynPipBag** bags, const u32& count, + const bool& frustumCull) { + if (count <= 0) return; -void DynPipCore::renderPart(DynPipBag* bag, const bool& frustumCull) { - if (bag->count <= 0) return; - - TYRA_ASSERT(bag->verticesFrom != nullptr && bag->verticesTo != nullptr, - "Vertices are required in 3D render bag!"); - TYRA_ASSERT(bag->info != nullptr, "Info bag is required in 3D render bag!"); - TYRA_ASSERT(bag->info->model != nullptr, - "Info bag's model pointer is empty!"); - TYRA_ASSERT(bag->color != nullptr, "Color bag is required in 3D render bag!"); - TYRA_ASSERT(bag->color->single, "Color is required in 3D render bag!"); TYRA_ASSERT( - !bag->lighting || - (bag->lighting->lightMatrix && bag->lighting->normalsFrom && - bag->lighting->normalsTo && bag->lighting->dirLights), + bags[0]->verticesFrom != nullptr && bags[0]->verticesTo != nullptr, + "Vertices are required in 3D render bag!"); + TYRA_ASSERT(bags[0]->info != nullptr, + "Info bag is required in 3D render bag!"); + TYRA_ASSERT(bags[0]->info->model != nullptr, + "Info bag's model pointer is empty!"); + TYRA_ASSERT(bags[0]->color != nullptr, + "Color bag is required in 3D render bag!"); + TYRA_ASSERT(bags[0]->color->single, "Color is required in 3D render bag!"); + TYRA_ASSERT( + !bags[0]->lighting || + (bags[0]->lighting->lightMatrix && bags[0]->lighting->normalsFrom && + bags[0]->lighting->normalsTo && bags[0]->lighting->dirLights), "If you want lighting, please provide light matrix normals and dir " "lights!"); - TYRA_ASSERT(!bag->texture || - (bag->texture->texture && bag->texture->coordinatesFrom && - bag->texture->coordinatesTo), + TYRA_ASSERT(!bags[0]->texture || (bags[0]->texture->texture && + bags[0]->texture->coordinatesFrom && + bags[0]->texture->coordinatesTo), "If you want texture, please provide texture and coordinates!"); - if (frustumCull) { + if (!frustumCull) { + qbufferRenderer.render(bags, count); + return; + } + + DynPipBag** bagsToRender = new DynPipBag*[count]; + u32 inserted = 0; + + for (u32 i = 0; i < count; i++) { + auto* bag = bags[i]; + CoreBBox bbox(bag->verticesTo, bag->count); if (bbox.isInFrustum(rendererCore->renderer3D.frustumPlanes.getAll(), *bag->info->model) == CoreBBoxFrustum::OUTSIDE_FRUSTUM) { - return; + continue; } + + bagsToRender[inserted++] = bag; } - qbufferRenderer.render(bag); + qbufferRenderer.render(bagsToRender, inserted); + delete[] bagsToRender; } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index 438a7a8..e7ebad9 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -33,7 +33,8 @@ DynPipRenderer::~DynPipRenderer() { } void DynPipRenderer::init(RendererCore* t_core, - DynPipProgramsRepository* t_programRepo) { + DynPipProgramsRepository* t_programRepo, + const u32& t_packetSize) { path1 = t_core->getPath1(); rendererCore = t_core; programsRepo = t_programRepo; @@ -41,13 +42,11 @@ void DynPipRenderer::init(RendererCore* t_core, dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); dma_channel_fast_waits(DMA_CHANNEL_VIF1); - const u32 VU1_PACKET_SIZE = 256; - packets[0] = - packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); packets[1] = - packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); setProgramsCache(); @@ -137,47 +136,28 @@ void DynPipRenderer::sendObjectData( // dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } -void DynPipRenderer::render(DynPipBag* bag) { - auto* program = programsRepo->getProgramByBag(bag); - addBufferDataToPacket(program, bag); - sendPacket(); -} - -void DynPipRenderer::renderTEST(DynPipBag** bags, const u32& count) { +void DynPipRenderer::render(DynPipBag** bags, const u32& count) { if (count <= 0) return; auto* program = programsRepo->getProgramByBag(bags[0]); - addBufferDataToPacketTEST(program, bags, count); + addBufferDataToPacket(program, bags, count); sendPacket(); } -void DynPipRenderer::addBufferDataToPacketTEST(DynPipVU1Program* program, - DynPipBag** bags, - const u32& count) { +void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program, + DynPipBag** bags, const u32& count) { currentPacket = packets[context]; packet2_reset(currentPacket, false); + u32 sent = 0; for (u32 i = 0; i < count; i++) { + if (bags[i]->count <= 0) continue; program->addBufferDataToPacket(currentPacket, bags[i], &rendererCore->gs.prim); + sent++; } - if (lastProgramName != program->getName()) { - packet2_utils_vu_add_start_program(currentPacket, - program->getDestinationAddress()); - lastProgramName = program->getName(); - } else { - packet2_utils_vu_add_continue_program(currentPacket); - } - packet2_utils_vu_add_end_tag(currentPacket); -} - -void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program, - DynPipBag* bag) { - currentPacket = packets[context]; - packet2_reset(currentPacket, false); - - program->addBufferDataToPacket(currentPacket, bag, &rendererCore->gs.prim); + if (sent == 0) return; if (lastProgramName != program->getName()) { packet2_utils_vu_add_start_program(currentPacket, @@ -193,9 +173,6 @@ void DynPipRenderer::sendPacket() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); - // TODO - // TYRA_LOG(packet2_get_qw_count(currentPacket)); - // Switch packet, so we can proceed during DMA transfer context = !context; } diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index f1bd708..7d42752 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -12,19 +12,28 @@ namespace Tyra { -DynamicPipeline::DynamicPipeline() { colorsCache = new Vec4[4]; } +const u32 DynamicPipeline::buffersCount = 64; +const u32 DynamicPipeline::halfBuffersCount = buffersCount / 2; -DynamicPipeline::~DynamicPipeline() { delete[] colorsCache; } +DynamicPipeline::DynamicPipeline() { + colorsCache = new Vec4[4]; + buffers = new DynPipBag[buffersCount]; +} + +DynamicPipeline::~DynamicPipeline() { + delete[] colorsCache; + for (u32 i = 0; i < buffersCount; i++) freeBuffer(&buffers[i]); + delete[] buffers; +} void DynamicPipeline::init(RendererCore* t_core) { rendererCore = t_core; - core.init(t_core); + auto packetSize = buffersCount * 3.1F; + core.init(t_core, static_cast(packetSize)); } void DynamicPipeline::onUse() { core.reinitVU1Programs(); } -#define BUFFER_COUNT 64 - void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto model = mesh->getModelMatrix(); auto* infoBag = getInfoBag(mesh, options, &model); @@ -48,8 +57,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { options->lighting->directionalDirections); } - DynPipBag buffers[BUFFER_COUNT]; - u8 context = 0; + u16 bufferIndex = 0; setBuffersDefaultVars(buffers, mesh, infoBag); core.clear(); @@ -72,7 +80,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { u8 isPartInitialized = false; for (u32 k = 0; k < partsCount; k++) { - auto& buffer = buffers[context++]; + auto& buffer = buffers[bufferIndex]; freeBuffer(&buffer); buffer.count = k == partsCount - 1 @@ -91,31 +99,19 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { isPartInitialized = true; } - // core.renderPart(&buffer, frustumCulling == - // DynPipFrustumCulling_Precise); - - if (context == BUFFER_COUNT / 2 || context == BUFFER_COUNT) { - DynPipBag** sendBuffers = new DynPipBag*[BUFFER_COUNT / 2]; - for (u32 i = 0; i < BUFFER_COUNT / 2; i++) { - sendBuffers[i] = &buffers[context - ((BUFFER_COUNT / 2) - i)]; - } - core.renderTEST(sendBuffers, BUFFER_COUNT / 2); - - delete[] sendBuffers; - if (context == BUFFER_COUNT) context = 0; - } + setBuffer(buffers, &buffer, &bufferIndex, frustumCulling); } delete colorBag; } - // TODO: Refactor (define itd, wywalic te wszystkie TEST i poprawic) - // TODO: Rozmiar pakietu VU1 na podstawie rozmiaru buforow - // TODO: Dorenderowac brakujace (np gdy context == 1-buffersize-1 itd) - // TODO: Program renderujacy w VU1 - // TODO: Github: Ten sam myk zrobic w static pipeline? + sendRestOfBuffers(buffers, &bufferIndex, frustumCulling); - for (u32 i = 0; i < BUFFER_COUNT; i++) freeBuffer(&buffers[i]); + // TODO: Program renderujacy w VU1 + // TODO: Github: Ten sam myk zrobic w static pipeline + // TODO: Github: Ten sam myk zrobic w mc pipeline + // TODO: Github: Allocate dynamic pipeline memory only in "onUse" + // (core,qbuffrenderer,pipeline..) if (dirLights) { delete dirLights; @@ -124,10 +120,57 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { delete infoBag; } +void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, + u16* bufferIndex, + const DynPipFrustumCulling& frustumCulling) { + auto isHalf = *bufferIndex == halfBuffersCount - 1; + auto isFull = *bufferIndex == buffersCount - 1; + + if (isHalf || isFull) { + u32 offset = isHalf ? 0 : halfBuffersCount; + + DynPipBag** sendBuffers = new DynPipBag*[halfBuffersCount]; + + for (u32 i = 0; i < halfBuffersCount; i++) + sendBuffers[i] = &buffers[offset + i]; + + core.renderPart(sendBuffers, halfBuffersCount, + frustumCulling == DynPipFrustumCulling_Precise); + + delete[] sendBuffers; + } + + if (isFull) + *bufferIndex = 0; + else + *bufferIndex += 1; +} + +void DynamicPipeline::sendRestOfBuffers( + DynPipBag* buffers, u16* bufferIndex, + const DynPipFrustumCulling& frustumCulling) { + auto isHalf = *bufferIndex == halfBuffersCount - 1; + + u32 offset = isHalf ? 0 : halfBuffersCount; + u32 size = *bufferIndex - offset; + + if (size <= 0) return; + + DynPipBag** sendBuffers = new DynPipBag*[size]; + for (u32 i = 0; i < size; i++) { + sendBuffers[i] = &buffers[offset + i]; + } + + core.renderPart(sendBuffers, size, + frustumCulling == DynPipFrustumCulling_Precise); + + delete[] sendBuffers; +} + void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, DynamicMesh* mesh, PipelineInfoBag* infoBag) { - for (int i = 0; i < BUFFER_COUNT; i++) { + for (u32 i = 0; i < buffersCount; i++) { buffers[i].info = infoBag; buffers[i].interpolation = mesh->getAnimState().interpolation; } @@ -135,7 +178,7 @@ void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, void DynamicPipeline::setBuffersColorBag(DynPipBag* buffers, DynPipColorBag* colorBag) { - for (int i = 0; i < BUFFER_COUNT; i++) { + for (u32 i = 0; i < buffersCount; i++) { buffers[i].color = colorBag; } } From e7a9230b59430108de0b6f64465d5af25f58387c Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 18:32:38 +0200 Subject: [PATCH 22/33] vu1 animation --- ROADMAP.txt | 1 + .../core/programs/dynpip_vu1_shared_defines.h | 18 +-- .../pipeline/dynamic/core/dynpip_renderer.cpp | 90 ++++++----- .../dynamic/core/dynpip_vu1_program.cpp | 30 ++-- .../dynamic/core/programs/dynpip_td_vu1.vclpp | 143 +++++++++++++++++- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 43 +++--- .../renderer/3d/pipeline/shared/tyra_macros.i | 40 +++++ 7 files changed, 270 insertions(+), 95 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 55b2d8c..e569046 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -7,6 +7,7 @@ - [StaPip] Remove animation - [StaPip] Dbufferring during mesh unrolling - [StaPip] Info about: full plane clip +- [Game] Update intellisense from docker - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader as static Mesh loader diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h index 3f19da4..712c07a 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/programs/dynpip_vu1_shared_defines.h @@ -9,15 +9,15 @@ // // Updated once per mesh -// #define VU1_MVP_MATRIX_ADDR 0 -// #define VU1_LIGHTS_MATRIX_ADDR 4 -// #define VU1_SINGLE_COLOR_ADDR 7 -// #define VU1_OPTIONS_ADDR 8 -// #define VU1_LOD_ADDR 9 -// #define VU1_CLUT_ADDR 10 -// #define VU1_LIGHTS_DIRS_ADDR 11 -// #define VU1_LIGHTS_COLORS_ADDR 14 -// #define VU1_SET_GIFTAG_ADDR 18 +#define VU1_MVP_MATRIX_ADDR 0 +#define VU1_LIGHTS_MATRIX_ADDR 4 +#define VU1_SINGLE_COLOR_ADDR 7 +#define VU1_OPTIONS_ADDR 8 +#define VU1_LOD_ADDR 9 +#define VU1_CLUT_ADDR 10 +#define VU1_LIGHTS_DIRS_ADDR 11 +#define VU1_LIGHTS_COLORS_ADDR 14 +#define VU1_SET_GIFTAG_ADDR 18 #define VU1_LAST_ITEM_ADDR 18 // Buffer data (xtop) diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index e7ebad9..daa4976 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -73,67 +73,65 @@ void DynPipRenderer::setProgramsCache() { } void DynPipRenderer::sendStaticData() const { - // packet2_reset(staticDataPacket, false); - // packet2_utils_vu_open_unpack(staticDataPacket, VU1_SET_GIFTAG_ADDR, - // false); { packet2_utils_gif_add_set(staticDataPacket, 1); } - // packet2_utils_vu_close_unpack(staticDataPacket); + packet2_reset(staticDataPacket, false); + packet2_utils_vu_open_unpack(staticDataPacket, VU1_SET_GIFTAG_ADDR, false); + { packet2_utils_gif_add_set(staticDataPacket, 1); } + packet2_utils_vu_close_unpack(staticDataPacket); - // packet2_utils_vu_add_end_tag(staticDataPacket); - // dma_channel_wait(DMA_CHANNEL_VIF1, 0); - // dma_channel_send_packet2(staticDataPacket, DMA_CHANNEL_VIF1, true); + packet2_utils_vu_add_end_tag(staticDataPacket); + dma_channel_wait(DMA_CHANNEL_VIF1, 0); + dma_channel_send_packet2(staticDataPacket, DMA_CHANNEL_VIF1, true); } void DynPipRenderer::sendObjectData( DynPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { - // packet2_reset(objectDataPacket, false); - // packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_MVP_MATRIX_ADDR, - // mvp->data, 4, false); + packet2_reset(objectDataPacket, false); + packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_MVP_MATRIX_ADDR, + mvp->data, 4, false); - // if (bag->lighting) { - // packet2_utils_vu_add_unpack_data(objectDataPacket, - // VU1_LIGHTS_MATRIX_ADDR, - // bag->lighting->lightMatrix, 3, false); + if (bag->lighting) { + packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_LIGHTS_MATRIX_ADDR, + bag->lighting->lightMatrix, 3, false); - // packet2_utils_vu_add_unpack_data( - // objectDataPacket, VU1_LIGHTS_DIRS_ADDR, - // bag->lighting->dirLights->getLightDirections(), 3, false); + packet2_utils_vu_add_unpack_data( + objectDataPacket, VU1_LIGHTS_DIRS_ADDR, + bag->lighting->dirLights->getLightDirections(), 3, false); - // packet2_utils_vu_add_unpack_data(objectDataPacket, - // VU1_LIGHTS_COLORS_ADDR, - // bag->lighting->dirLights->getLightColors(), - // 4, false); - // } + packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_LIGHTS_COLORS_ADDR, + bag->lighting->dirLights->getLightColors(), + 4, false); + } - // u8 singleColorEnabled = bag->color->single != nullptr; + u8 singleColorEnabled = bag->color->single != nullptr; - // if (singleColorEnabled) // Color is placed in 4th slot of - // // VU1_LIGHTS_MATRIX_ADDR - // packet2_utils_vu_add_unpack_data(objectDataPacket, - // VU1_SINGLE_COLOR_ADDR, - // bag->color->single->rgba, 1, false); + if (singleColorEnabled) // Color is placed in 4th slot of + // VU1_LIGHTS_MATRIX_ADDR + packet2_utils_vu_add_unpack_data(objectDataPacket, VU1_SINGLE_COLOR_ADDR, + bag->color->single->rgba, 1, false); - // packet2_utils_vu_open_unpack(objectDataPacket, VU1_OPTIONS_ADDR, false); - // { - // packet2_add_u32(objectDataPacket, - // singleColorEnabled); // Single color enabled. - // packet2_add_u32(objectDataPacket, 0); // not used, padding - // packet2_add_u32(objectDataPacket, 0); // not used, padding - // packet2_add_u32(objectDataPacket, 0); // not used, padding + packet2_utils_vu_open_unpack(objectDataPacket, VU1_OPTIONS_ADDR, false); + { + packet2_add_u32(objectDataPacket, + singleColorEnabled); // Single color enabled. + packet2_add_float(objectDataPacket, + bag->interpolation); // Interpolation value + packet2_add_u32(objectDataPacket, 0); // not used, padding + packet2_add_u32(objectDataPacket, 0); // not used, padding - // packet2_utils_gs_add_lod(objectDataPacket, &rendererCore->gs.lod); + packet2_utils_gs_add_lod(objectDataPacket, &rendererCore->gs.lod); - // if (texBuffers != nullptr) { - // packet2_utils_gs_add_texbuff_clut(objectDataPacket, texBuffers->core, - // &rendererCore->texture.clut); + if (texBuffers != nullptr) { + packet2_utils_gs_add_texbuff_clut(objectDataPacket, texBuffers->core, + &rendererCore->texture.clut); - // rendererCore->texture.updateClutBuffer(texBuffers->clut); - // } - // } - // packet2_utils_vu_close_unpack(objectDataPacket); + rendererCore->texture.updateClutBuffer(texBuffers->clut); + } + } + packet2_utils_vu_close_unpack(objectDataPacket); - // packet2_utils_vu_add_end_tag(objectDataPacket); - // dma_channel_wait(DMA_CHANNEL_VIF1, 0); - // dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); + packet2_utils_vu_add_end_tag(objectDataPacket); + dma_channel_wait(DMA_CHANNEL_VIF1, 0); + dma_channel_send_packet2(objectDataPacket, DMA_CHANNEL_VIF1, true); } void DynPipRenderer::render(DynPipBag** bags, const u32& count) { diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp index 50b8819..6e20408 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_vu1_program.cpp @@ -41,23 +41,23 @@ void DynPipVU1Program::addBufferDataToPacket(packet2_t* packet, DynPipBag* bag, void DynPipVU1Program::addStandardBufferDataToPacket(packet2_t* packet, DynPipBag* bag, prim_t* prim) { - // if (buffer->bag->texture) - // prim->mapping = 1; - // else - // prim->mapping = 0; + if (bag->texture) + prim->mapping = 1; + else + prim->mapping = 0; - // packet2_utils_vu_open_unpack(packet, 0, true); - // { - // packet2_add_float(packet, 2048.0F); // scale - // packet2_add_float(packet, 2048.0F); // scale - // packet2_add_float(packet, - // static_cast(0xFFFFFF) / 32.0F); // scale - // packet2_add_u32(packet, buffer->size); // vertex count + packet2_utils_vu_open_unpack(packet, 0, true); + { + packet2_add_float(packet, 2048.0F); // scale + packet2_add_float(packet, 2048.0F); // scale + packet2_add_float(packet, + static_cast(0xFFFFFF) / 32.0F); // scale + packet2_add_u32(packet, bag->count); // vertex count - // packet2_utils_gs_add_prim_giftag(packet, prim, buffer->size, reglist, - // reglistCount, 0); - // } - // packet2_utils_vu_close_unpack(packet); + packet2_utils_gs_add_prim_giftag(packet, prim, bag->count, reglist, + reglistCount, 0); + } + packet2_utils_vu_close_unpack(packet); } u16 DynPipVU1Program::getMaxVertCount(const u16& bufferSize) const { diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp index 3c0beec..dfb19d1 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp @@ -32,14 +32,151 @@ #vuprog DynPipVU1TD -ResetClipFlags{ } + ResetClipFlags{ } + LoadTyraStaticData{ gifSetTag } + MatrixLoad{ mvp, VU1_MVP_MATRIX_ADDR, vi00 } + LoadTyraTags{ lodGifTag, texBufferClutGifTag, VU1_LOD_ADDR, VU1_CLUT_ADDR } begin: xtop buffer + LoadTyraPrimTag{ primTag, buffer } + ilw.w vertexCount, 0(buffer) + iaddiu vertexDataFrom, buffer, VU1_VERT_DATA_ADDR + + iadd stqDataFrom, vertexDataFrom, vertexCount + iadd stqDataFrom, stqDataFrom, vertexCount + + iadd normalDataFrom, stqDataFrom, vertexCount + iadd normalDataFrom, normalDataFrom, vertexCount + + iadd kickAddress, normalDataFrom, vertexCount + iadd destAddress, kickAddress, vertexCount + iadd kickAddress, kickAddress, vertexCount + + StoreTyraGifTags{ gifSetTag, lodGifTag, texBufferClutGifTag, primTag, destAddress } + LoadTyraLerpValue{ interp, VU1_OPTIONS_ADDR } + LoadTyraScaleValue{ scale, buffer } + + ;--- Loop + iadd vertexCounter, buffer, vertexCount +vertexLoop: + ;--- Vertex 1 - from-to -> lerp + lq vertex1From, (vertexDataFrom) + iadd vertexDataTo, vertexDataFrom, vertexCount + lq vertex1To, (vertexDataTo) + Lerp{ vertex1, vertex1From, vertex1To, interp } + + lq stq1From, (stqDataFrom) + iadd stqDataTo, stqDataFrom, vertexCount + lq stq1To, (stqDataTo) + Lerp{ stq1, stq1From, stq1To, interp } + + lq.xyz normal1From, (normalDataFrom) + iadd normalDataTo, normalDataFrom, vertexCount + lq.xyz normal1To, (normalDataTo) + LerpXYZ{ normal1, normal1From, normal1To, interp } + + ;--- Vertex 1 - Calculate + MatrixMultiplyVertex{ vertex1, mvp, vertex1 } + PerformClipCheck{ vertex1, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex1, vertex1 } + ScaleVertexToGSFormat{ scale, vertex1 } + PerformTexturePerspectiveCorrection{ outputStq1, stq1 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor1, normal1, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor1 } + + ;--- Vertex 1 - Store + sq outputStq1, STQ_STORE_OFFSET(destAddress) + sq outputColor1, RGBA_STORE_OFFSET(destAddress) + sq.xyz vertex1, XYZ2_STORE_OFFSET(destAddress) + + ; --------------------------------------- + + ;--- Vertex 2 - from-to -> lerp + lq vertex2From, 1(vertexDataFrom) + ; TODO: Move DataTo upper!!!!!!!!!!!!!! + iadd vertexDataTo, vertexDataFrom, vertexCount + lq vertex2To, 1(vertexDataTo) + Lerp{ vertex2, vertex2From, vertex2To, interp } + + lq stq2From, 1(stqDataFrom) + iadd stqDataTo, stqDataFrom, vertexCount + lq stq2To, 1(stqDataTo) + Lerp{ stq2, stq2From, stq2To, interp } + + lq.xyz normal2From, 1(normalDataFrom) + iadd normalDataTo, normalDataFrom, vertexCount + lq.xyz normal2To, 1(normalDataTo) + LerpXYZ{ normal2, normal2From, normal2To, interp } + + ;--- Vertex 2 - Calculate + MatrixMultiplyVertex{ vertex2, mvp, vertex2 } + PerformClipCheck{ vertex2, destAddress, XYZ2_STORE_OFFSET+3 } + VertexPersCorr{ vertex2, vertex2 } + ScaleVertexToGSFormat{ scale, vertex2 } + PerformTexturePerspectiveCorrection{ outputStq2, stq2 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor2, normal2, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor2 } + + ;--- Vertex 2 - Store + sq outputStq2, STQ_STORE_OFFSET+3(destAddress) + sq outputColor2, RGBA_STORE_OFFSET+3(destAddress) + sq.xyz vertex2, XYZ2_STORE_OFFSET+3(destAddress) + + ; --------------------------------------- + + ;--- Vertex 3 - from-to -> lerp + lq vertex3From, 2(vertexDataFrom) + iadd vertexDataTo, vertexDataFrom, vertexCount + lq vertex3To, 2(vertexDataTo) + Lerp{ vertex3, vertex3From, vertex3To, interp } + + lq stq3From, 2(stqDataFrom) + iadd stqDataTo, stqDataFrom, vertexCount + lq stq3To, 2(stqDataTo) + Lerp{ stq3, stq3From, stq3To, interp } + + lq.xyz normal3From, 2(normalDataFrom) + iadd normalDataTo, normalDataFrom, vertexCount + lq.xyz normal3To, 2(normalDataTo) + LerpXYZ{ normal3, normal3From, normal3To, interp } + + ;--- Vertex 3 - Calculate + MatrixMultiplyVertex{ vertex3, mvp, vertex3 } + PerformClipCheck{ vertex3, destAddress, XYZ2_STORE_OFFSET+6 } + VertexPersCorr{ vertex3, vertex3 } + ScaleVertexToGSFormat{ scale, vertex3 } + PerformTexturePerspectiveCorrection{ outputStq3, stq3 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor3, normal3, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor3 } + + ;--- Vertex 3 - Store + sq outputStq3, STQ_STORE_OFFSET+6(destAddress) + sq outputColor3, RGBA_STORE_OFFSET+6(destAddress) + sq.xyz vertex3, XYZ2_STORE_OFFSET+6(destAddress) + + ;------------------------------- + + iaddiu vertexDataFrom, vertexDataFrom, 3 + iaddiu stqDataFrom, stqDataFrom, 3 + iaddiu normalDataFrom, normalDataFrom, 3 + iaddiu destAddress, destAddress, 9 + + ;--- Fix loop + iaddi vertexCounter, vertexCounter, -3 ; decrement the loop counter + ibne vertexCounter, buffer, vertexLoop ; and repeat if needed + + xgkick kickAddress ; dispatch to the GS rasterizer. + +--barrier ; Why the hell I must add barrier AFTER XGKICK? VCL does not adds E bit without it... +--cont + + b begin -; --cont - #endvuprog --exit diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index 7d42752..ce665cc 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -28,7 +28,7 @@ DynamicPipeline::~DynamicPipeline() { void DynamicPipeline::init(RendererCore* t_core) { rendererCore = t_core; - auto packetSize = buffersCount * 3.1F; + auto packetSize = buffersCount * 4.8F; core.init(t_core, static_cast(packetSize)); } @@ -123,22 +123,21 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, u16* bufferIndex, const DynPipFrustumCulling& frustumCulling) { - auto isHalf = *bufferIndex == halfBuffersCount - 1; + // auto isHalf = *bufferIndex == halfBuffersCount - 1; auto isFull = *bufferIndex == buffersCount - 1; - if (isHalf || isFull) { - u32 offset = isHalf ? 0 : halfBuffersCount; + // if (isHalf || isFull) { + // u32 offset = isHalf ? 0 : halfBuffersCount; - DynPipBag** sendBuffers = new DynPipBag*[halfBuffersCount]; + DynPipBag** sendBuffers = new DynPipBag*[1]; - for (u32 i = 0; i < halfBuffersCount; i++) - sendBuffers[i] = &buffers[offset + i]; + sendBuffers[0] = buffer; - core.renderPart(sendBuffers, halfBuffersCount, - frustumCulling == DynPipFrustumCulling_Precise); + core.renderPart(sendBuffers, 1, + frustumCulling == DynPipFrustumCulling_Precise); - delete[] sendBuffers; - } + delete[] sendBuffers; + // } if (isFull) *bufferIndex = 0; @@ -149,22 +148,22 @@ void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, void DynamicPipeline::sendRestOfBuffers( DynPipBag* buffers, u16* bufferIndex, const DynPipFrustumCulling& frustumCulling) { - auto isHalf = *bufferIndex == halfBuffersCount - 1; + // auto isHalf = *bufferIndex == halfBuffersCount - 1; - u32 offset = isHalf ? 0 : halfBuffersCount; - u32 size = *bufferIndex - offset; + // u32 offset = isHalf ? 0 : halfBuffersCount; + // u32 size = *bufferIndex - offset; - if (size <= 0) return; + // if (size <= 0) return; - DynPipBag** sendBuffers = new DynPipBag*[size]; - for (u32 i = 0; i < size; i++) { - sendBuffers[i] = &buffers[offset + i]; - } + // DynPipBag** sendBuffers = new DynPipBag*[size]; + // for (u32 i = 0; i < size; i++) { + // sendBuffers[i] = &buffers[offset + i]; + // } - core.renderPart(sendBuffers, size, - frustumCulling == DynPipFrustumCulling_Precise); + // core.renderPart(sendBuffers, size, + // frustumCulling == DynPipFrustumCulling_Precise); - delete[] sendBuffers; + // delete[] sendBuffers; } void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, diff --git a/engine/src/renderer/3d/pipeline/shared/tyra_macros.i b/engine/src/renderer/3d/pipeline/shared/tyra_macros.i index 4b4214c..27f339e 100644 --- a/engine/src/renderer/3d/pipeline/shared/tyra_macros.i +++ b/engine/src/renderer/3d/pipeline/shared/tyra_macros.i @@ -17,6 +17,20 @@ ilw.x t_singleColorEnabled, t_optionsAddr(vi00) #endmacro +;//--------------------------------------------------------- +;// LoadTyraLerpValue - Loads interpolation value. +;//--------------------------------------------------------- +#macro LoadTyraLerpValue: t_lerpValue, t_optionsAddr + lq.y t_lerpValue, t_optionsAddr(vi00) +#endmacro + +;//--------------------------------------------------------- +;// LoadTyraScaleValue - Loads screen scales. +;//--------------------------------------------------------- +#macro LoadTyraScaleValue: t_scale, t_buffer + lq.xyz t_scale, 0(t_buffer) +#endmacro + ;//--------------------------------------------------------- ;// LoadTyraTags - Load lod, texture buffer and clut ;// 1 - GIF tag - texture LOD @@ -27,6 +41,14 @@ lq t_texBufferClutGifTag, t_ClutAddr(vi00) #endmacro +;//--------------------------------------------------------- +;// LoadTyraPrimTag - Load prim tag +;// 2 - GIF tag - tell GS how many data we will send +;//--------------------------------------------------------- +#macro LoadTyraPrimTag: t_primTag, t_buffer + lq t_primTag, 1(t_buffer) +#endmacro + ;//--------------------------------------------------------- ;// LoadTyraBufferTags - Load scales and prim tag ;// 1 - float : X, Y, Z - scale vector that we will use to scale the verts after projecting them, float : W - vert count. @@ -97,3 +119,21 @@ loi 128 addi.w t_outputColor, vf00, i #endmacro + +;//--------------------------------------------------------- +;// LerpXYZ - Linear interpolation between two points +;//--------------------------------------------------------- +#macro LerpXYZ: t_output, t_from, t_to, t_interp + sub.xyz temp1, t_to, t_from + mul.xyz temp2, temp1, t_interp[y] + add.xyz t_output, temp2, t_from +#endmacro + +;//--------------------------------------------------------- +;// Lerp - Linear interpolation between two points +;//--------------------------------------------------------- +#macro Lerp: t_output, t_from, t_to, t_interp + sub temp1, t_to, t_from + mul temp2, temp1, t_interp[y] + add t_output, temp2, t_from +#endmacro \ No newline at end of file From 91ba265310d38c74c8d472b71ce32eaa41421cb7 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 20:25:08 +0200 Subject: [PATCH 23/33] dynpip vu1 programs --- ROADMAP.txt | 4 +- .../renderer/3d/mesh/dynamic/dynamic_mesh.hpp | 10 +- .../3d/pipeline/shared/pipeline_options.hpp | 2 +- .../pipeline/dynamic/core/dynpip_renderer.cpp | 21 ++-- .../dynamic/core/programs/dynpip_c_vu1.vclpp | 93 +++++++++++++- .../core/programs/dynpip_c_vu1_program.cpp | 18 ++- .../dynamic/core/programs/dynpip_d_vu1.vclpp | 117 +++++++++++++++++- .../core/programs/dynpip_d_vu1_program.cpp | 32 ++--- .../dynamic/core/programs/dynpip_tc_vu1.vclpp | 116 ++++++++++++++++- .../core/programs/dynpip_tc_vu1_program.cpp | 32 ++--- .../dynamic/core/programs/dynpip_td_vu1.vclpp | 17 +-- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 54 ++++---- samples/h4570/inc/h4570.hpp | 5 +- samples/h4570/src/h4570.cpp | 105 +++++----------- 14 files changed, 448 insertions(+), 178 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index e569046..631fbf6 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -2,11 +2,13 @@ --- H4570 - [DynPip] TD VU1 program -- [DynPip] C++ pipeline - [DynPip] Info about: simple clip - [StaPip] Remove animation - [StaPip] Dbufferring during mesh unrolling +- [StaPip] VU1 packets spamming +- [McPip] VU1 packets spamming - [StaPip] Info about: full plane clip +- [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) - [Game] Update intellisense from docker - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) diff --git a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp index 42fb100..d8f47d4 100644 --- a/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp +++ b/engine/inc/renderer/3d/mesh/dynamic/dynamic_mesh.hpp @@ -35,15 +35,17 @@ class DynamicMesh : public Mesh { const u32& getFramesCount() const { return framesCount; } const u32& getCurrentAnimationFrame() const { return animState.currentFrame; } - const u32& getNextAnimationFrame() const { return animState.nextFrame; } - const u32& getStartAnimationFrame() const { return animState.startFrame; } - const u32& getEndAnimationFrame() const { return animState.endFrame; } - const u32& getStayAnimationFrame() const { return animState.stayFrame; } + void setCurrentAnimationFrame(const u32& v) { animState.currentFrame = v; } + void setNextAnimationFrame(const u32& v) { animState.nextFrame = v; } + void setStartAnimationFrame(const u32& v) { animState.startFrame = v; } + void setEndAnimationFrame(const u32& v) { animState.endFrame = v; } + void setStayAnimationFrame(const u32& v) { animState.stayFrame = v; } + /** @returns bounding box object of current frame. */ const BBox& getCurrentBoundingBox() const { return frames[animState.currentFrame]->getBBox(); diff --git a/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp index 000ccdd..ced7f37 100644 --- a/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp @@ -17,7 +17,7 @@ namespace Tyra { class PipelineOptions { public: - PipelineOptions() {} + PipelineOptions() { lighting = nullptr; } ~PipelineOptions() {} PipelineShadingType shadingType; diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index daa4976..2ddc43f 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -146,31 +146,28 @@ void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program, DynPipBag** bags, const u32& count) { currentPacket = packets[context]; packet2_reset(currentPacket, false); - u32 sent = 0; for (u32 i = 0; i < count; i++) { if (bags[i]->count <= 0) continue; + program->addBufferDataToPacket(currentPacket, bags[i], &rendererCore->gs.prim); - sent++; + + if (lastProgramName != program->getName()) { + packet2_utils_vu_add_start_program(currentPacket, + program->getDestinationAddress()); + lastProgramName = program->getName(); + } else { + packet2_utils_vu_add_continue_program(currentPacket); + } } - if (sent == 0) return; - - if (lastProgramName != program->getName()) { - packet2_utils_vu_add_start_program(currentPacket, - program->getDestinationAddress()); - lastProgramName = program->getName(); - } else { - packet2_utils_vu_add_continue_program(currentPacket); - } packet2_utils_vu_add_end_tag(currentPacket); } void DynPipRenderer::sendPacket() { dma_channel_wait(DMA_CHANNEL_VIF1, 0); dma_channel_send_packet2(currentPacket, DMA_CHANNEL_VIF1, true); - // Switch packet, so we can proceed during DMA transfer context = !context; } diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp index 0d3cec6..273ea2e 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1.vclpp @@ -10,7 +10,7 @@ ; Triangle list ; Cull = Standard PS2 way. clipw polys are culled. ; Animation -; Colors +; Color ;--------------------------------------------------------------- .syntax new @@ -31,8 +31,99 @@ #vuprog DynPipVU1C + ResetClipFlags{ } + LoadTyraStaticData{ gifSetTag } + MatrixLoad{ mvp, VU1_MVP_MATRIX_ADDR, vi00 } + LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } + LoadTyraTags{ lodGifTag, texBufferClutGifTag, VU1_LOD_ADDR, VU1_CLUT_ADDR } + FixColor{ singleColor } + +begin: + xtop buffer + LoadTyraPrimTag{ primTag, buffer } + + ilw.w vertexCount, 0(buffer) + iaddiu vertexDataFrom, buffer, VU1_VERT_DATA_ADDR + + iadd kickAddress, vertexDataFrom, vertexCount + iadd destAddress, kickAddress, vertexCount + iadd kickAddress, kickAddress, vertexCount + + StoreTyraGifTags{ gifSetTag, lodGifTag, texBufferClutGifTag, primTag, destAddress } + LoadTyraLerpValue{ interp, VU1_OPTIONS_ADDR } + LoadTyraScaleValue{ scale, buffer } + + ;--- Loop + iadd vertexCounter, buffer, vertexCount +vertexLoop: + + iadd vertexDataTo, vertexDataFrom, vertexCount + + ;--- Vertex 1 - from-to -> lerp + lq vertex1From, (vertexDataFrom) + lq vertex1To, (vertexDataTo) + Lerp{ vertex1, vertex1From, vertex1To, interp } + + ;--- Vertex 1 - Calculate + MatrixMultiplyVertex{ vertex1, mvp, vertex1 } + PerformClipCheck{ vertex1, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex1, vertex1 } + ScaleVertexToGSFormat{ scale, vertex1 } + + ;--- Vertex 1 - Store + sq singleColor, RGBA_STORE_OFFSET(destAddress) + sq.xyz vertex1, XYZ2_STORE_OFFSET(destAddress) + + ; --------------------------------------- + + ;--- Vertex 2 - from-to -> lerp + lq vertex2From, 1(vertexDataFrom) + lq vertex2To, 1(vertexDataTo) + Lerp{ vertex2, vertex2From, vertex2To, interp } + + ;--- Vertex 2 - Calculate + MatrixMultiplyVertex{ vertex2, mvp, vertex2 } + PerformClipCheck{ vertex2, destAddress, XYZ2_STORE_OFFSET+2 } + VertexPersCorr{ vertex2, vertex2 } + ScaleVertexToGSFormat{ scale, vertex2 } + + ;--- Vertex 2 - Store + sq singleColor, RGBA_STORE_OFFSET+2(destAddress) + sq.xyz vertex2, XYZ2_STORE_OFFSET+2(destAddress) + + ; --------------------------------------- + + ;--- Vertex 3 - from-to -> lerp + lq vertex3From, 2(vertexDataFrom) + lq vertex3To, 2(vertexDataTo) + Lerp{ vertex3, vertex3From, vertex3To, interp } + + ;--- Vertex 3 - Calculate + MatrixMultiplyVertex{ vertex3, mvp, vertex3 } + PerformClipCheck{ vertex3, destAddress, XYZ2_STORE_OFFSET+4 } + VertexPersCorr{ vertex3, vertex3 } + ScaleVertexToGSFormat{ scale, vertex3 } + + ;--- Vertex 3 - Store + sq singleColor, RGBA_STORE_OFFSET+4(destAddress) + sq.xyz vertex3, XYZ2_STORE_OFFSET+4(destAddress) + + ;------------------------------- + + iaddiu vertexDataFrom, vertexDataFrom, 3 + iaddiu destAddress, destAddress, 6 + + ;--- Fix loop + iaddi vertexCounter, vertexCounter, -3 ; decrement the loop counter + ibne vertexCounter, buffer, vertexLoop ; and repeat if needed + + xgkick kickAddress ; dispatch to the GS rasterizer. + +--barrier ; Why the hell I must add barrier AFTER XGKICK? VCL does not adds E bit without it... --cont + b begin + #endvuprog --exit diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp index 497efdc..986098e 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_c_vu1_program.cpp @@ -29,18 +29,14 @@ std::string DynPipCVU1Program::getStringName() const { void DynPipCVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const { - // u32 addr = VU1_VERT_DATA_ADDR; + u32 addr = VU1_VERT_DATA_ADDR; - // // Add vertices - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, - // qbuffer->size, true); - - // // Add colors - // if (qbuffer->bag->color->single == nullptr) { - // addr += qbuffer->size; - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, - // qbuffer->size, true); - // } + // Add vertices + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesFrom, bag->count, + true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesTo, bag->count, + true); } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp index b5f6e8b..d7ab38f 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1.vclpp @@ -31,7 +31,122 @@ #vuprog DynPipVU1D - --cont + ResetClipFlags{ } + LoadTyraStaticData{ gifSetTag } + MatrixLoad{ mvp, VU1_MVP_MATRIX_ADDR, vi00 } + LoadTyraTags{ lodGifTag, texBufferClutGifTag, VU1_LOD_ADDR, VU1_CLUT_ADDR } + +begin: + xtop buffer + LoadTyraPrimTag{ primTag, buffer } + + ilw.w vertexCount, 0(buffer) + iaddiu vertexDataFrom, buffer, VU1_VERT_DATA_ADDR + + iadd normalDataFrom, vertexDataFrom, vertexCount + iadd normalDataFrom, normalDataFrom, vertexCount + + iadd kickAddress, normalDataFrom, vertexCount + iadd destAddress, kickAddress, vertexCount + iadd kickAddress, kickAddress, vertexCount + + StoreTyraGifTags{ gifSetTag, lodGifTag, texBufferClutGifTag, primTag, destAddress } + LoadTyraLerpValue{ interp, VU1_OPTIONS_ADDR } + LoadTyraScaleValue{ scale, buffer } + + ;--- Loop + iadd vertexCounter, buffer, vertexCount +vertexLoop: + + iadd vertexDataTo, vertexDataFrom, vertexCount + iadd normalDataTo, normalDataFrom, vertexCount + + ;--- Vertex 1 - from-to -> lerp + lq vertex1From, (vertexDataFrom) + lq vertex1To, (vertexDataTo) + Lerp{ vertex1, vertex1From, vertex1To, interp } + + lq.xyz normal1From, (normalDataFrom) + lq.xyz normal1To, (normalDataTo) + LerpXYZ{ normal1, normal1From, normal1To, interp } + + ;--- Vertex 1 - Calculate + MatrixMultiplyVertex{ vertex1, mvp, vertex1 } + PerformClipCheck{ vertex1, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex1, vertex1 } + ScaleVertexToGSFormat{ scale, vertex1 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor1, normal1, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor1 } + + ;--- Vertex 1 - Store + sq outputColor1, RGBA_STORE_OFFSET(destAddress) + sq.xyz vertex1, XYZ2_STORE_OFFSET(destAddress) + + ; --------------------------------------- + + ;--- Vertex 2 - from-to -> lerp + lq vertex2From, 1(vertexDataFrom) + lq vertex2To, 1(vertexDataTo) + Lerp{ vertex2, vertex2From, vertex2To, interp } + + lq.xyz normal2From, 1(normalDataFrom) + lq.xyz normal2To, 1(normalDataTo) + LerpXYZ{ normal2, normal2From, normal2To, interp } + + ;--- Vertex 2 - Calculate + MatrixMultiplyVertex{ vertex2, mvp, vertex2 } + PerformClipCheck{ vertex2, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex2, vertex2 } + ScaleVertexToGSFormat{ scale, vertex2 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor2, normal2, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor2 } + + ;--- Vertex 2 - Store + sq outputColor2, RGBA_STORE_OFFSET+2(destAddress) + sq.xyz vertex2, XYZ2_STORE_OFFSET+2(destAddress) + + ; --------------------------------------- + + ;--- Vertex 3 - from-to -> lerp + lq vertex3From, 2(vertexDataFrom) + lq vertex3To, 2(vertexDataTo) + Lerp{ vertex3, vertex3From, vertex3To, interp } + + lq.xyz normal3From, 2(normalDataFrom) + lq.xyz normal3To, 2(normalDataTo) + LerpXYZ{ normal3, normal3From, normal3To, interp } + + ;--- Vertex 3 - Calculate + MatrixMultiplyVertex{ vertex3, mvp, vertex3 } + PerformClipCheck{ vertex3, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex3, vertex3 } + ScaleVertexToGSFormat{ scale, vertex3 } + LoadTyraDirectionalLights{ lightMatrix, lightDirections, lightColors, ambientColor, VU1_LIGHTS_DIRS_ADDR, VU1_LIGHTS_COLORS_ADDR, VU1_LIGHTS_MATRIX_ADDR } + CalculateTyraDirectionalLights{ outputColor3, normal3, lightDirections, lightColors, lightMatrix, ambientColor } + FixColor{ outputColor3 } + + ;--- Vertex 3 - Store + sq outputColor3, RGBA_STORE_OFFSET+4(destAddress) + sq.xyz vertex3, XYZ2_STORE_OFFSET+4(destAddress) + + ;------------------------------- + + iaddiu vertexDataFrom, vertexDataFrom, 3 + iaddiu normalDataFrom, normalDataFrom, 3 + iaddiu destAddress, destAddress, 6 + + ;--- Fix loop + iaddi vertexCounter, vertexCounter, -3 ; decrement the loop counter + ibne vertexCounter, buffer, vertexLoop ; and repeat if needed + + xgkick kickAddress ; dispatch to the GS rasterizer. + +--barrier ; Why the hell I must add barrier AFTER XGKICK? VCL does not adds E bit without it... +--cont + + b begin #endvuprog diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp index 6bd8653..0be32ed 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_d_vu1_program.cpp @@ -29,23 +29,25 @@ std::string DynPipDVU1Program::getStringName() const { void DynPipDVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const { - // u32 addr = VU1_VERT_DATA_ADDR; + u32 addr = VU1_VERT_DATA_ADDR; - // // Add vertices - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, - // qbuffer->size, true); - // addr += qbuffer->size; + // Add vertices + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesFrom, bag->count, + true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesTo, bag->count, + true); + addr += bag->count; - // // Add normal - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->normals, - // qbuffer->size, true); - - // // Add colors - // if (qbuffer->bag->color->single == nullptr) { - // addr += qbuffer->size; - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, - // qbuffer->size, true); - // } + if (bag->lighting) { + // Add normal + packet2_utils_vu_add_unpack_data(packet, addr, bag->lighting->normalsFrom, + bag->count, true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->lighting->normalsTo, + bag->count, true); + addr += bag->count; + } } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp index cd13d85..3d4a361 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1.vclpp @@ -10,7 +10,7 @@ ; Triangle list ; Cull = Standard PS2 way. clipw polys are culled. ; Animation -; Lighting, texture, colors +; Lighting, texture, color ;--------------------------------------------------------------- .syntax new @@ -32,8 +32,122 @@ #vuprog DynPipVU1TC + ResetClipFlags{ } + LoadTyraStaticData{ gifSetTag } + MatrixLoad{ mvp, VU1_MVP_MATRIX_ADDR, vi00 } + LoadTyraSingleColor{ singleColor, singleColorEnabled, VU1_SINGLE_COLOR_ADDR, VU1_OPTIONS_ADDR } + LoadTyraTags{ lodGifTag, texBufferClutGifTag, VU1_LOD_ADDR, VU1_CLUT_ADDR } + FixColor{ singleColor } + +begin: + xtop buffer + LoadTyraPrimTag{ primTag, buffer } + + ilw.w vertexCount, 0(buffer) + iaddiu vertexDataFrom, buffer, VU1_VERT_DATA_ADDR + + iadd stqDataFrom, vertexDataFrom, vertexCount + iadd stqDataFrom, stqDataFrom, vertexCount + + iadd kickAddress, stqDataFrom, vertexCount + iadd destAddress, kickAddress, vertexCount + iadd kickAddress, kickAddress, vertexCount + + StoreTyraGifTags{ gifSetTag, lodGifTag, texBufferClutGifTag, primTag, destAddress } + LoadTyraLerpValue{ interp, VU1_OPTIONS_ADDR } + LoadTyraScaleValue{ scale, buffer } + + ;--- Loop + iadd vertexCounter, buffer, vertexCount +vertexLoop: + + iadd vertexDataTo, vertexDataFrom, vertexCount + iadd stqDataTo, stqDataFrom, vertexCount + + ;--- Vertex 1 - from-to -> lerp + lq vertex1From, (vertexDataFrom) + lq vertex1To, (vertexDataTo) + Lerp{ vertex1, vertex1From, vertex1To, interp } + + lq stq1From, (stqDataFrom) + lq stq1To, (stqDataTo) + Lerp{ stq1, stq1From, stq1To, interp } + + ;--- Vertex 1 - Calculate + MatrixMultiplyVertex{ vertex1, mvp, vertex1 } + PerformClipCheck{ vertex1, destAddress, XYZ2_STORE_OFFSET } + VertexPersCorr{ vertex1, vertex1 } + ScaleVertexToGSFormat{ scale, vertex1 } + PerformTexturePerspectiveCorrection{ outputStq1, stq1 } + + ;--- Vertex 1 - Store + sq outputStq1, STQ_STORE_OFFSET(destAddress) + sq singleColor, RGBA_STORE_OFFSET(destAddress) + sq.xyz vertex1, XYZ2_STORE_OFFSET(destAddress) + + ; --------------------------------------- + + ;--- Vertex 2 - from-to -> lerp + lq vertex2From, 1(vertexDataFrom) + lq vertex2To, 1(vertexDataTo) + Lerp{ vertex2, vertex2From, vertex2To, interp } + + lq stq2From, 1(stqDataFrom) + lq stq2To, 1(stqDataTo) + Lerp{ stq2, stq2From, stq2To, interp } + + ;--- Vertex 2 - Calculate + MatrixMultiplyVertex{ vertex2, mvp, vertex2 } + PerformClipCheck{ vertex2, destAddress, XYZ2_STORE_OFFSET+3 } + VertexPersCorr{ vertex2, vertex2 } + ScaleVertexToGSFormat{ scale, vertex2 } + PerformTexturePerspectiveCorrection{ outputStq2, stq2 } + + ;--- Vertex 2 - Store + sq outputStq2, STQ_STORE_OFFSET+3(destAddress) + sq singleColor, RGBA_STORE_OFFSET+3(destAddress) + sq.xyz vertex2, XYZ2_STORE_OFFSET+3(destAddress) + + ; --------------------------------------- + + ;--- Vertex 3 - from-to -> lerp + lq vertex3From, 2(vertexDataFrom) + lq vertex3To, 2(vertexDataTo) + Lerp{ vertex3, vertex3From, vertex3To, interp } + + lq stq3From, 2(stqDataFrom) + lq stq3To, 2(stqDataTo) + Lerp{ stq3, stq3From, stq3To, interp } + + ;--- Vertex 3 - Calculate + MatrixMultiplyVertex{ vertex3, mvp, vertex3 } + PerformClipCheck{ vertex3, destAddress, XYZ2_STORE_OFFSET+6 } + VertexPersCorr{ vertex3, vertex3 } + ScaleVertexToGSFormat{ scale, vertex3 } + PerformTexturePerspectiveCorrection{ outputStq3, stq3 } + + ;--- Vertex 3 - Store + sq outputStq3, STQ_STORE_OFFSET+6(destAddress) + sq singleColor, RGBA_STORE_OFFSET+6(destAddress) + sq.xyz vertex3, XYZ2_STORE_OFFSET+6(destAddress) + + ;------------------------------- + + iaddiu vertexDataFrom, vertexDataFrom, 3 + iaddiu stqDataFrom, stqDataFrom, 3 + iaddiu destAddress, destAddress, 9 + + ;--- Fix loop + iaddi vertexCounter, vertexCounter, -3 ; decrement the loop counter + ibne vertexCounter, buffer, vertexLoop ; and repeat if needed + + xgkick kickAddress ; dispatch to the GS rasterizer. + +--barrier ; Why the hell I must add barrier AFTER XGKICK? VCL does not adds E bit without it... --cont + b begin + #endvuprog --exit diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp index 676fd6d..73572c0 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_tc_vu1_program.cpp @@ -31,23 +31,25 @@ std::string DynPipTCVU1Program::getStringName() const { void DynPipTCVU1Program::addProgramQBufferDataToPacket(packet2_t* packet, DynPipBag* bag) const { - // u32 addr = VU1_VERT_DATA_ADDR; + u32 addr = VU1_VERT_DATA_ADDR; - // // Add vertices - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->vertices, - // qbuffer->size, true); - // addr += qbuffer->size; + // Add vertices + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesFrom, bag->count, + true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->verticesTo, bag->count, + true); + addr += bag->count; - // // Add sts - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->sts, qbuffer->size, - // true); - - // // Add colors - // if (qbuffer->bag->color->single == nullptr) { - // addr += qbuffer->size; - // packet2_utils_vu_add_unpack_data(packet, addr, qbuffer->colors, - // qbuffer->size, true); - // } + if (bag->texture) { + // Add sts + packet2_utils_vu_add_unpack_data( + packet, addr, bag->texture->coordinatesFrom, bag->count, true); + addr += bag->count; + packet2_utils_vu_add_unpack_data(packet, addr, bag->texture->coordinatesTo, + bag->count, true); + addr += bag->count; + } } } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp index dfb19d1..ec06ea3 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/programs/dynpip_td_vu1.vclpp @@ -61,19 +61,21 @@ begin: ;--- Loop iadd vertexCounter, buffer, vertexCount vertexLoop: + + iadd vertexDataTo, vertexDataFrom, vertexCount + iadd stqDataTo, stqDataFrom, vertexCount + iadd normalDataTo, normalDataFrom, vertexCount + ;--- Vertex 1 - from-to -> lerp lq vertex1From, (vertexDataFrom) - iadd vertexDataTo, vertexDataFrom, vertexCount lq vertex1To, (vertexDataTo) Lerp{ vertex1, vertex1From, vertex1To, interp } lq stq1From, (stqDataFrom) - iadd stqDataTo, stqDataFrom, vertexCount lq stq1To, (stqDataTo) Lerp{ stq1, stq1From, stq1To, interp } - lq.xyz normal1From, (normalDataFrom) - iadd normalDataTo, normalDataFrom, vertexCount + lq.xyz normal1From, (normalDataFrom) lq.xyz normal1To, (normalDataTo) LerpXYZ{ normal1, normal1From, normal1To, interp } @@ -96,18 +98,14 @@ vertexLoop: ;--- Vertex 2 - from-to -> lerp lq vertex2From, 1(vertexDataFrom) - ; TODO: Move DataTo upper!!!!!!!!!!!!!! - iadd vertexDataTo, vertexDataFrom, vertexCount lq vertex2To, 1(vertexDataTo) Lerp{ vertex2, vertex2From, vertex2To, interp } lq stq2From, 1(stqDataFrom) - iadd stqDataTo, stqDataFrom, vertexCount lq stq2To, 1(stqDataTo) Lerp{ stq2, stq2From, stq2To, interp } lq.xyz normal2From, 1(normalDataFrom) - iadd normalDataTo, normalDataFrom, vertexCount lq.xyz normal2To, 1(normalDataTo) LerpXYZ{ normal2, normal2From, normal2To, interp } @@ -130,17 +128,14 @@ vertexLoop: ;--- Vertex 3 - from-to -> lerp lq vertex3From, 2(vertexDataFrom) - iadd vertexDataTo, vertexDataFrom, vertexCount lq vertex3To, 2(vertexDataTo) Lerp{ vertex3, vertex3From, vertex3To, interp } lq stq3From, 2(stqDataFrom) - iadd stqDataTo, stqDataFrom, vertexCount lq stq3To, 2(stqDataTo) Lerp{ stq3, stq3From, stq3To, interp } lq.xyz normal3From, 2(normalDataFrom) - iadd normalDataTo, normalDataFrom, vertexCount lq.xyz normal3To, 2(normalDataTo) LerpXYZ{ normal3, normal3From, normal3To, interp } diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index ce665cc..f2f81ba 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -28,7 +28,8 @@ DynamicPipeline::~DynamicPipeline() { void DynamicPipeline::init(RendererCore* t_core) { rendererCore = t_core; - auto packetSize = buffersCount * 4.8F; + auto packetSize = + buffersCount * 5.1F; // 5.1 = packet2_get_qw_count / buffersCount core.init(t_core, static_cast(packetSize)); } @@ -107,12 +108,6 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { sendRestOfBuffers(buffers, &bufferIndex, frustumCulling); - // TODO: Program renderujacy w VU1 - // TODO: Github: Ten sam myk zrobic w static pipeline - // TODO: Github: Ten sam myk zrobic w mc pipeline - // TODO: Github: Allocate dynamic pipeline memory only in "onUse" - // (core,qbuffrenderer,pipeline..) - if (dirLights) { delete dirLights; } @@ -123,23 +118,24 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, u16* bufferIndex, const DynPipFrustumCulling& frustumCulling) { - // auto isHalf = *bufferIndex == halfBuffersCount - 1; - auto isFull = *bufferIndex == buffersCount - 1; + auto isEndOf1stDBuffer = *bufferIndex == halfBuffersCount - 1; + auto isEndOf2ndDBuffer = *bufferIndex == buffersCount - 1; - // if (isHalf || isFull) { - // u32 offset = isHalf ? 0 : halfBuffersCount; + if (isEndOf1stDBuffer || isEndOf2ndDBuffer) { + u32 offset = isEndOf1stDBuffer ? 0 : halfBuffersCount; - DynPipBag** sendBuffers = new DynPipBag*[1]; + DynPipBag** sendBuffers = new DynPipBag*[halfBuffersCount]; - sendBuffers[0] = buffer; + for (u32 i = 0; i < halfBuffersCount; i++) + sendBuffers[i] = &buffers[offset + i]; - core.renderPart(sendBuffers, 1, - frustumCulling == DynPipFrustumCulling_Precise); + core.renderPart(sendBuffers, halfBuffersCount, + frustumCulling == DynPipFrustumCulling_Precise); - delete[] sendBuffers; - // } + delete[] sendBuffers; + } - if (isFull) + if (isEndOf2ndDBuffer) *bufferIndex = 0; else *bufferIndex += 1; @@ -148,22 +144,22 @@ void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, void DynamicPipeline::sendRestOfBuffers( DynPipBag* buffers, u16* bufferIndex, const DynPipFrustumCulling& frustumCulling) { - // auto isHalf = *bufferIndex == halfBuffersCount - 1; + auto isEndOf1stDBuffer = *bufferIndex <= halfBuffersCount - 1; - // u32 offset = isHalf ? 0 : halfBuffersCount; - // u32 size = *bufferIndex - offset; + u32 offset = isEndOf1stDBuffer ? 0 : halfBuffersCount; + u32 size = *bufferIndex - offset; - // if (size <= 0) return; + if (size <= 0) return; - // DynPipBag** sendBuffers = new DynPipBag*[size]; - // for (u32 i = 0; i < size; i++) { - // sendBuffers[i] = &buffers[offset + i]; - // } + DynPipBag** sendBuffers = new DynPipBag*[size]; + for (u32 i = 0; i < size; i++) { + sendBuffers[i] = &buffers[offset + i]; + } - // core.renderPart(sendBuffers, size, - // frustumCulling == DynPipFrustumCulling_Precise); + core.renderPart(sendBuffers, size, + frustumCulling == DynPipFrustumCulling_Precise); - // delete[] sendBuffers; + delete[] sendBuffers; } void DynamicPipeline::setBuffersDefaultVars(DynPipBag* buffers, diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index 6dc7d89..30bd4ab 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -30,9 +30,8 @@ class H4570 : public Game { Engine* engine; DynamicMesh* warrior; - DynamicMesh* warrior2; - DynamicMesh* warrior3; - DynamicMesh* warrior4; + u8 warriorsCount; + DynamicMesh** warriors; Sprite* picture; audsrv_adpcm_t* adpcmSample; Timer adpcmTimer; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index bf40fb6..9584b78 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -11,9 +11,19 @@ #include "h4570.hpp" #include "file/file_utils.hpp" #include "loaders/3d/md2/md2_loader.hpp" +#include "thread/threading.hpp" namespace Tyra { +float getRandomFloat(float a, float b) { + float random = ((float)rand()) / (float)RAND_MAX; + float diff = b - a; + float r = random * diff; + return a + r; +} + +int getRandomInt(int a, int b) { return (rand() % (b - a + 1)) + a; } + H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} @@ -39,23 +49,20 @@ void H4570::init() { warriorTex = engine->renderer.core.texture.repository.getBySpriteOrMesh( warrior->getMaterial(0)->getId()); - warrior2 = new DynamicMesh(*warrior); - warrior2->translation.translateX(-3.0F); - warriorTex->addLink(warrior2->getMaterial(0)->getId()); - warrior2->playAnimation(0, warrior2->getFramesCount() - 1); - warrior2->setAnimSpeed(0.10F); - - warrior3 = new DynamicMesh(*warrior); - warrior3->translation.translateX(-6.0F); - warriorTex->addLink(warrior3->getMaterial(0)->getId()); - warrior3->playAnimation(0, warrior3->getFramesCount() - 1); - warrior3->setAnimSpeed(0.7F); - - warrior4 = new DynamicMesh(*warrior); - warrior4->translation.translateX(3.0F); - warriorTex->addLink(warrior4->getMaterial(0)->getId()); - warrior4->playAnimation(0, warrior4->getFramesCount() - 1); - warrior4->setAnimSpeed(0.5F); + warriorsCount = 22; + warriors = new DynamicMesh*[warriorsCount]; + for (u8 i = 0; i < warriorsCount; i++) { + warriors[i] = new DynamicMesh(*warrior); + warriors[i]->translation.translateX(-40.0F + static_cast(i) * 4); + warriors[i]->translation.translateY(30.0F); + warriors[i]->translation.translateZ(-10.0F); + warriors[i]->translation.rotateX(-1.5F); + warriorTex->addLink(warriors[i]->getMaterial(0)->getId()); + warriors[i]->playAnimation(0, warriors[i]->getFramesCount() - 1); + warriors[i]->setCurrentAnimationFrame( + getRandomInt(0, warriors[i]->getFramesCount() - 1)); + warriors[i]->setAnimSpeed(getRandomFloat(0.1F, 0.9F)); + } staOptions = getStaPipOptions(); dynOptions = getDynPipOptions(); @@ -107,27 +114,8 @@ void H4570::init() { engine->renderer.setFrameLimit(false); } -u32 counter = 0; - void H4570::loop() { - if (counter++ > 100) { - counter = 0; - TYRA_LOG(engine->info.getFps()); - } - - warrior->animate(); - warrior2->animate(); - warrior3->animate(); - warrior4->animate(); - - // if ((engine->pad.getPressed().DpadUp || engine->pad.getPressed().DpadDown - // || - // engine->pad.getPressed().DpadLeft || - // engine->pad.getPressed().DpadRight) && - // adpcmTimer.getTimeDelta() > 8000) { - // adpcmTimer.prime(); - // engine->audio.playADPCM(adpcmSample, 1); - // } + for (u8 i = 0; i < warriorsCount; i++) warriors[i]->animate(); engine->renderer.beginFrame(CameraInfo3D(&cameraPosition, &cameraLookAt)); { @@ -139,44 +127,15 @@ void H4570::loop() { blocks[i].model = translations[i] * rotations[i] * scales[i]; } - // engine->renderer.renderer2D.render(picture); - - // engine->renderer.renderer3D.usePipeline(&stapip); - // { - // stapip.render(terrain, staOptions); - // } - engine->renderer.renderer3D.usePipeline(&dynpip); { - dynpip.render(warrior, dynOptions); - - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior4, dynOptions); - - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - // dynpip.render(warrior2, dynOptions); - - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); - // dynpip.render(warrior3, dynOptions); + Threading::switchThread(); + for (u8 i = 0; i < warriorsCount; i++) { + dynpip.render(warriors[i], dynOptions); + if (i == 5) Threading::switchThread(); + if (i == 10) Threading::switchThread(); + if (i == 15) Threading::switchThread(); + } } engine->renderer.renderer3D.usePipeline(&mcPip); From 91e425e0f8577c0e3ce4657465abad664ed6f328 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 21:05:20 +0200 Subject: [PATCH 24/33] small documentation --- ROADMAP.txt | 6 ++---- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 8 +++++++- .../3d/pipeline/minecraft/minecraft_pipeline.hpp | 16 +++++++++++++++- .../3d/pipeline/static/static_pipeline.hpp | 8 +++++++- .../3d/pipeline/minecraft/minecraft_pipeline.cpp | 4 ++-- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 631fbf6..80e1492 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,18 +1,16 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [DynPip] TD VU1 program -- [DynPip] Info about: simple clip - [StaPip] Remove animation - [StaPip] Dbufferring during mesh unrolling - [StaPip] VU1 packets spamming - [McPip] VU1 packets spamming -- [StaPip] Info about: full plane clip +- [Loaders] MD2 loader - choose between static/dynamic mesh - [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) -- [Game] Update intellisense from docker - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader as static Mesh loader +- [Game] Update intellisense from docker - [Texture] Test cache hits with large amount of textures (dolphin sample?) - [Demo] Create cool demo which will show all features of Tyra (I will take this one) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index 8a53d21..bb755fa 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -19,6 +19,12 @@ namespace Tyra { +/** + * Pipeline for animated models (DynamicMesh). + * Supports: + * - Simple PS2 clipping (culling) + * - Modes: color, texture+color, dir lights, texture + dir lights + */ class DynamicPipeline : public Renderer3DPipeline { public: DynamicPipeline(); @@ -33,7 +39,7 @@ class DynamicPipeline : public Renderer3DPipeline { void onUse(); /** - * Render 3D via "meshes". + * Render dynamic model. * This render() method is a bridge to core.render() method. */ void render(DynamicMesh* mesh, const DynPipOptions* options = nullptr); diff --git a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp index 7a270e8..ca762dd 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp @@ -18,6 +18,10 @@ namespace Tyra { +/** + * Pipeline specialized in fast rendering of voxels + * Supports full "against each plane" clipping + */ class MinecraftPipeline : public Renderer3DPipeline { public: MinecraftPipeline(); @@ -27,8 +31,18 @@ class MinecraftPipeline : public Renderer3DPipeline { void onUse(); + /** + * @brief Render voxels + * + * @param blocks blocks to render + * @param count number of blocks to render + * @param t_tex texture to use + * @param isMulti is this a 6 texture voxel? + * @param noFullClipChecks true = faster, simple PS2 clipping. False = slower + * "against each plane" clipping. + */ void render(McpipBlock* blocks, const u32& count, Texture* t_tex, - const bool& isMulti = false, const bool& noClipChecks = true); + const bool& isMulti = false, const bool& noFullClipChecks = true); inline const float& getTextureOffset() const { return manager.getTextureOffset(); diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 8ec7172..3931bb1 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -20,6 +20,12 @@ namespace Tyra { +/** + * Pipeline for static models (StaticMesh). + * Supports: + * - Full "against each plane" clipping, + * - Modes: color(s), texture+color(s), dir lights, texture + dir lights + */ class StaticPipeline : public Renderer3DPipeline { public: StaticPipeline(); @@ -32,7 +38,7 @@ class StaticPipeline : public Renderer3DPipeline { void onUse(); /** - * Render 3D via "meshes". + * Render static model * This render() method is a bridge to core.render() method. */ void render(DynamicMesh* mesh, const StaPipOptions* options = nullptr); diff --git a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp index 19c4487..3f27ddc 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp @@ -42,14 +42,14 @@ void MinecraftPipeline::initBBox() { void MinecraftPipeline::render(McpipBlock* blocks, const u32& count, Texture* t_tex, const bool& isMulti, - const bool& noClipChecks) { + const bool& noFullClipChecks) { auto texBuffers = rendererCore->texture.useTexture(t_tex); rendererCore->gs.prim.mapping = 1; manager.clearLastProgram(); std::vector cullIndexes; - if (noClipChecks) { + if (noFullClipChecks) { for (u32 i = 0; i < count; i++) cullIndexes.push_back(i); cull(blocks, cullIndexes, &texBuffers, isMulti); } else { From 9a5993232a860a513bf026ae5554c13097f64e04 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 21:11:10 +0200 Subject: [PATCH 25/33] local todolist --- ROADMAP.txt | 4 ---- engine/src/renderer/3d/pipeline/static/static_pipeline.cpp | 7 +++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 80e1492..a8f8e7c 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,11 +1,7 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [StaPip] Remove animation -- [StaPip] Dbufferring during mesh unrolling -- [StaPip] VU1 packets spamming - [McPip] VU1 packets spamming -- [Loaders] MD2 loader - choose between static/dynamic mesh - [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) - [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 5f774ca..898acdf 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -23,6 +23,13 @@ void StaticPipeline::init(RendererCore* t_core) { void StaticPipeline::onUse() { core.reinitVU1Programs(); } +// TODO - Clipping mode +// TODO - StaPipCore::render(StaPipBag* bags, StaPipBagPackagesBBox* bboxes, +// const u32& count) +// TODO - MD2 loader - choose between static/dynamic mesh +// TODO - Dynamic -> StaticMesh +// TODO - DBuffering + spamming + void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); auto* infoBag = getInfoBag(mesh, options, &model); From f5a7b7519ec7fa89da68fc0cd7e27c4898a4db44 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 21:14:17 +0200 Subject: [PATCH 26/33] roadmap update --- ROADMAP.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index a8f8e7c..1ffc8e1 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,9 +1,8 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 +- [McPip] Clipping mode - [McPip] VU1 packets spamming -- [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) -- [Renderer] Add possibility to on/off frustum check in all pipelines (renderOptions?) - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader as static Mesh loader - [Game] Update intellisense from docker @@ -57,4 +56,5 @@ because Mesh rendering uses only core.render() ------------ Github issues for Tyra v2 ------------ - [3D] Add drawLine(x, y , color, size) -- [3D] Add drawBBox(x, y , color, size) \ No newline at end of file +- [3D] Add drawBBox(x, y , color, size) +- [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) \ No newline at end of file From cf8ca23ba99a2ff7463ad43efbb59d227e5ba186 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sat, 23 Jul 2022 21:47:18 +0200 Subject: [PATCH 27/33] small documentation --- engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp | 1 + .../inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp | 4 +++- .../inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp | 2 +- engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp | 4 +++- .../src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp | 1 + engine/src/renderer/3d/pipeline/static/static_pipeline.cpp | 1 - 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index bb755fa..a3273e1 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -23,6 +23,7 @@ namespace Tyra { * Pipeline for animated models (DynamicMesh). * Supports: * - Simple PS2 clipping (culling) + * - Frustum culling * - Modes: color, texture+color, dir lights, texture + dir lights */ class DynamicPipeline : public Renderer3DPipeline { diff --git a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp index ca762dd..0801d40 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp @@ -20,7 +20,9 @@ namespace Tyra { /** * Pipeline specialized in fast rendering of voxels - * Supports full "against each plane" clipping + * Supports: + * - Full "against each plane" clipping + * - Frustum culling (on noFullClipChecks = false) */ class MinecraftPipeline : public Renderer3DPipeline { public: diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp index 4a5e07c..cc7492a 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp @@ -31,7 +31,7 @@ class PipelineInfoBag { /** * @brief True -> disables "clip against each plane" algorithm. - * Mandatory, default: false. + * Default: false. * * Full clip checks are slow, but they are * preventing visual artifacts, which can happen diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 3931bb1..6fca5d4 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -23,7 +23,9 @@ namespace Tyra { /** * Pipeline for static models (StaticMesh). * Supports: - * - Full "against each plane" clipping, + * - Full "against each plane" clipping and simple PS2 clipping + * (noFullClipChecks), + * - Force enabled precise frustum culling (checks parts of given mesh) * - Modes: color(s), texture+color(s), dir lights, texture + dir lights */ class StaticPipeline : public Renderer3DPipeline { diff --git a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp index 3f27ddc..7db26ba 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp @@ -52,6 +52,7 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count, if (noFullClipChecks) { for (u32 i = 0; i < count; i++) cullIndexes.push_back(i); cull(blocks, cullIndexes, &texBuffers, isMulti); + return; } else { u32 culled = 0, clipped = 0; std::vector clipIndexes; diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 898acdf..c2ca289 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -23,7 +23,6 @@ void StaticPipeline::init(RendererCore* t_core) { void StaticPipeline::onUse() { core.reinitVU1Programs(); } -// TODO - Clipping mode // TODO - StaPipCore::render(StaPipBag* bags, StaPipBagPackagesBBox* bboxes, // const u32& count) // TODO - MD2 loader - choose between static/dynamic mesh From 9d18a81c2a96b77f790e8c07ac78459d8e1e6e52 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 24 Jul 2022 12:21:21 +0200 Subject: [PATCH 28/33] vu1 packet spamming in static pipeline --- ROADMAP.txt | 11 +- .../3d/pipeline/static/core/stapip_core.hpp | 2 +- .../static/core/stapip_qbuffer_renderer.hpp | 18 ++- .../3d/pipeline/static/static_pipeline.hpp | 6 +- .../core/texture/texture_repository.hpp | 7 +- .../renderer/3d/mesh/static/static_mesh.cpp | 7 +- .../3d/pipeline/static/core/stapip_core.cpp | 2 + .../static/core/stapip_qbuffer_renderer.cpp | 132 ++++++++++++++---- .../3d/pipeline/static/static_pipeline.cpp | 10 +- .../core/texture/texture_repository.cpp | 2 +- samples/h4570/inc/h4570.hpp | 2 + samples/h4570/src/h4570.cpp | 26 ++++ 12 files changed, 173 insertions(+), 52 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 1ffc8e1..06048de 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,6 +1,16 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ +- [StaPip] FPS before: 175 +- [StaPip] FPS spamming: 190 + --- H4570 +- [Renderer] Fix current visual bug +- [StaPip] Te same parametry frustumcheck jak w dynamic +- [StaPip] No frustum check -> bez +- [StaPip] Simple frustum check -> check bboxa z Mesh +- [StaPip] Precise frustum check -> tak jak teraz? +- [StaPip] Poprawic opis od noFullClipChecks, ze bedzie tylko dzialac na PreciseFrustumCheck +- [Renderer] Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) - [McPip] Clipping mode - [McPip] VU1 packets spamming - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) @@ -57,4 +67,3 @@ because Mesh rendering uses only core.render() ------------ Github issues for Tyra v2 ------------ - [3D] Add drawLine(x, y , color, size) - [3D] Add drawBBox(x, y , color, size) -- [Renderer] Github: Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) \ No newline at end of file diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp index 2a7e4e9..33d70c1 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp @@ -27,7 +27,7 @@ class StaPipCore { void init(RendererCore* t_core); /** Render 3D via "bags" */ - void render(StaPipBag* data, StaPipBagPackagesBBox* bbox = nullptr); + void render(StaPipBag* bag, StaPipBagPackagesBBox* bbox = nullptr); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isSingleColor, diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp index 9426861..3b1201e 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp @@ -54,6 +54,8 @@ class StaPipQBufferRenderer { /** Slower render with clipping */ void clip(StaPipQBuffer* buffer); + void flushBuffers(); + void clearLastProgramName(); StaPipVU1Program* getCullProgramByBag(const StaPipBag* bag); @@ -64,22 +66,30 @@ class StaPipQBufferRenderer { const u16& getBufferSize() { return bufferSize; } private: + bool is1stDBufferFlushTime(); + bool is2ndDBufferFlushTime(); + void sendStaticData() const; void setProgramsCache(); void uploadPrograms(); void setDoubleBuffer(); + u16 getQBufferIndex(StaPipQBuffer* buffer); + + static const u16 buffersCount; StaPipVU1Program* getProgramByName(const StaPipProgramName& name); - void addBufferDataToPacket(StaPipVU1Program* program, StaPipQBuffer* buffer); + void addBufferDataToPacket(StaPipQBuffer** buffers, const u32& count); void sendPacket(); StaPipVU1Program* getAsIsProgramByBag(const StaPipBag* bag); StaPipVU1Program* getCullProgramByType(const StaPipProgramType& programType); StaPipProgramType getDrawProgramTypeByBag(const StaPipBag* bag) const; StaPipProgramType getDrawProgramTypeByParams( const bool& isLightingEnabled, const bool& isTextureEnabled) const; - packet2_t* packets[2]; packet2_t* programsPacket; - StaPipQBuffer buffers[2]; + + packet2_t** packets; + StaPipVU1Program** programs; // dbuffer + StaPipQBuffer** buffers; packet2_t* currentPacket; packet2_t* staticDataPacket; packet2_t* objectDataPacket; @@ -91,7 +101,7 @@ class StaPipQBufferRenderer { StaPipClipper clipper; StaPipProgramsRepository repository; - u16 bufferSize; + u16 bufferSize, nextBufferIndex, currentBufferIndex; u8 context; }; diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index 6fca5d4..e3d45ec 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -14,7 +14,7 @@ #include "../renderer_3d_pipeline.hpp" #include "../shared/pipeline_lighting_options.hpp" #include "renderer/core/renderer_core.hpp" -#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" +#include "renderer/3d/mesh/static/static_mesh.hpp" #include "./core/stapip_core.hpp" #include "./stapip_options.hpp" @@ -43,7 +43,7 @@ class StaticPipeline : public Renderer3DPipeline { * Render static model * This render() method is a bridge to core.render() method. */ - void render(DynamicMesh* mesh, const StaPipOptions* options = nullptr); + void render(StaticMesh* mesh, const StaPipOptions* options = nullptr); private: RendererCore* rendererCore; @@ -51,7 +51,7 @@ class StaticPipeline : public Renderer3DPipeline { void addVertices(MeshMaterialFrame* materialFrame, StaPipBag* bag) const; - PipelineInfoBag* getInfoBag(DynamicMesh* mesh, const StaPipOptions* options, + PipelineInfoBag* getInfoBag(StaticMesh* mesh, const StaPipOptions* options, M4x4* model) const; StaPipColorBag* getColorBag(MeshMaterial* material, diff --git a/engine/inc/renderer/core/texture/texture_repository.hpp b/engine/inc/renderer/core/texture/texture_repository.hpp index 6ab1638..0382337 100644 --- a/engine/inc/renderer/core/texture/texture_repository.hpp +++ b/engine/inc/renderer/core/texture/texture_repository.hpp @@ -14,7 +14,7 @@ #include #include #include "./models/texture.hpp" -#include "renderer/3d/mesh/dynamic/dynamic_mesh.hpp" +#include "renderer/3d/mesh/mesh.hpp" #include "loaders/texture/base/texture_loader_selector.hpp" #include @@ -81,13 +81,12 @@ class TextureRepository { /** * Add linked textures in given path for mesh material names. */ - void addByMesh(DynamicMesh* mesh, const char* directory, - const char* extension); + void addByMesh(Mesh* mesh, const char* directory, const char* extension); /** * Add linked textures in given path for mesh material names. */ - inline void addByMesh(DynamicMesh* mesh, const std::string& directory, + inline void addByMesh(Mesh* mesh, const std::string& directory, const char* extension) { addByMesh(mesh, directory.c_str(), extension); } diff --git a/engine/src/renderer/3d/mesh/static/static_mesh.cpp b/engine/src/renderer/3d/mesh/static/static_mesh.cpp index e324d1d..e1b4392 100644 --- a/engine/src/renderer/3d/mesh/static/static_mesh.cpp +++ b/engine/src/renderer/3d/mesh/static/static_mesh.cpp @@ -14,7 +14,12 @@ namespace Tyra { StaticMesh::StaticMesh(const MeshBuilderData& data) : Mesh(data) { - TYRA_ASSERT(data.framesCount == 1, "Static meshes must have only one frame"); + TYRA_ASSERT(data.framesCount > 0, "Frames count must be greater than 0"); + + if (data.framesCount > 1) + TYRA_WARN("Static meshes should have only one frame, but ", + data.framesCount, " frames were found"); + frame = new MeshFrame(data, 0); } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp index ce1daf5..0027df7 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp @@ -136,6 +136,8 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { if (!bbox) delete renderBbox; if (texBuffers) delete texBuffers; + qbufferRenderer.flushBuffers(); + Verbose("Render finished"); } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 4d9efc9..10e4a01 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -34,18 +34,45 @@ namespace Tyra { * */ +const u16 StaPipQBufferRenderer::buffersCount = 16; + StaPipQBufferRenderer::StaPipQBufferRenderer() { + currentBufferIndex = 0; + nextBufferIndex = 0; context = 0; lastProgramName = StaPipUndefinedProgram; + + u32 qbuffersPacketSize = 4 * buffersCount; + + packets = new packet2_t*[buffersCount]; + packets[0] = + packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + packets[1] = + packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + programsPacket = nullptr; + + buffers = new StaPipQBuffer*[buffersCount]; + programs = new StaPipVU1Program*[buffersCount]; + for (u16 i = 0; i < buffersCount; i++) { + buffers[i] = new StaPipQBuffer(); + } } StaPipQBufferRenderer::~StaPipQBufferRenderer() { - packet2_free(packets[0]); - packet2_free(packets[1]); packet2_free(staticDataPacket); packet2_free(objectDataPacket); + packet2_free(packets[0]); + packet2_free(packets[1]); + + for (u16 i = 0; i < buffersCount; i++) { + delete buffers[i]; + } + + delete[] packets; + delete[] buffers; if (programsPacket) packet2_free(programsPacket); } @@ -58,14 +85,6 @@ void StaPipQBufferRenderer::init(RendererCore* t_core) { dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); dma_channel_fast_waits(DMA_CHANNEL_VIF1); - const u32 VU1_PACKET_SIZE = 16; - - packets[0] = - packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - - packets[1] = - packet2_create(VU1_PACKET_SIZE, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - setProgramsCache(); reinitVU1(); @@ -79,8 +98,6 @@ void StaPipQBufferRenderer::reinitVU1() { setDoubleBuffer(); } -StaPipQBuffer* StaPipQBufferRenderer::getBuffer() { return &buffers[context]; } - void StaPipQBufferRenderer::sendObjectData( StaPipBag* bag, M4x4* mvp, RendererCoreTextureBuffers* texBuffers) const { packet2_reset(objectDataPacket, false); @@ -179,14 +196,59 @@ void StaPipQBufferRenderer::setDoubleBuffer() { // buffer, to first addr of second buffer } +StaPipQBuffer* StaPipQBufferRenderer::getBuffer() { + currentBufferIndex = nextBufferIndex++; + auto* result = buffers[currentBufferIndex]; + if (nextBufferIndex >= buffersCount) nextBufferIndex = 0; + return result; +} + +u16 StaPipQBufferRenderer::getQBufferIndex(StaPipQBuffer* buffer) { + for (u16 i = 0; i < buffersCount; i++) { + if (buffers[i] == buffer) return i; + } + return 0; +} + +bool StaPipQBufferRenderer::is1stDBufferFlushTime() { + return nextBufferIndex == buffersCount / 2; +} + +bool StaPipQBufferRenderer::is2ndDBufferFlushTime() { + return nextBufferIndex == 0; +} + +void StaPipQBufferRenderer::flushBuffers() { + auto is1stDBuffer = is1stDBufferFlushTime(); + auto is2ndDBuffer = is2ndDBufferFlushTime(); + + if (!is1stDBuffer && !is2ndDBuffer) { + auto offset = currentBufferIndex >= buffersCount / 2 ? buffersCount / 2 : 0; + auto size = (currentBufferIndex + 1) - offset; + auto dbuffer = &buffers[offset]; + addBufferDataToPacket(dbuffer, size); + sendPacket(); + } + + currentBufferIndex = 0; + nextBufferIndex = 0; +} + void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) { if (buffer->size == 0) { return; } - auto program = getCullProgramByBag(buffer->bag); - addBufferDataToPacket(program, buffer); - sendPacket(); + programs[getQBufferIndex(buffer)] = getCullProgramByBag(buffer->bag); + + auto is1stDBuffer = is1stDBufferFlushTime(); + auto is2ndDBuffer = is2ndDBufferFlushTime(); + + if (is1stDBuffer || is2ndDBuffer) { + auto dbuffer = &buffers[is1stDBuffer ? 0 : buffersCount / 2]; + addBufferDataToPacket(dbuffer, buffersCount / 2); + sendPacket(); + } } void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { @@ -194,11 +256,16 @@ void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { return; } - auto program = getAsIsProgramByBag(buffer->bag); + programs[getQBufferIndex(buffer)] = getAsIsProgramByBag(buffer->bag); + clipper.clip(buffer); - if (buffer->any()) { - if (buffer) addBufferDataToPacket(program, buffer); + auto is1stDBuffer = is1stDBufferFlushTime(); + auto is2ndDBuffer = is2ndDBufferFlushTime(); + + if (is1stDBuffer || is2ndDBuffer) { + auto dbuffer = &buffers[is1stDBuffer ? 0 : buffersCount / 2]; + addBufferDataToPacket(dbuffer, buffersCount / 2); sendPacket(); } } @@ -207,20 +274,26 @@ void StaPipQBufferRenderer::clearLastProgramName() { lastProgramName = StaPipUndefinedProgram; } -void StaPipQBufferRenderer::addBufferDataToPacket(StaPipVU1Program* program, - StaPipQBuffer* buffer) { +void StaPipQBufferRenderer::addBufferDataToPacket(StaPipQBuffer** buffers, + const u32& count) { currentPacket = packets[context]; packet2_reset(currentPacket, false); - program->addBufferDataToPacket(currentPacket, buffer, &rendererCore->gs.prim); + for (u32 i = 0; i < count; i++) { + if (!buffers[i]->any()) continue; - if (lastProgramName != program->getName()) { - packet2_utils_vu_add_start_program(currentPacket, - program->getDestinationAddress()); - lastProgramName = program->getName(); - } else { - packet2_utils_vu_add_continue_program(currentPacket); + programs[i]->addBufferDataToPacket(currentPacket, buffers[i], + &rendererCore->gs.prim); + + if (lastProgramName != programs[i]->getName()) { + packet2_utils_vu_add_start_program(currentPacket, + programs[i]->getDestinationAddress()); + lastProgramName = programs[i]->getName(); + } else { + packet2_utils_vu_add_continue_program(currentPacket); + } } + packet2_utils_vu_add_end_tag(currentPacket); } @@ -233,8 +306,9 @@ void StaPipQBufferRenderer::sendPacket() { } void StaPipQBufferRenderer::setMaxVertCount(const u32& count) { - buffers[0].setMaxVertCount(count); - buffers[1].setMaxVertCount(count); + for (u32 i = 0; i < buffersCount; i++) { + buffers[i]->setMaxVertCount(count); + } clipper.setMaxVertCount(count); } diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index c2ca289..119aa15 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -23,13 +23,7 @@ void StaticPipeline::init(RendererCore* t_core) { void StaticPipeline::onUse() { core.reinitVU1Programs(); } -// TODO - StaPipCore::render(StaPipBag* bags, StaPipBagPackagesBBox* bboxes, -// const u32& count) -// TODO - MD2 loader - choose between static/dynamic mesh -// TODO - Dynamic -> StaticMesh -// TODO - DBuffering + spamming - -void StaticPipeline::render(DynamicMesh* mesh, const StaPipOptions* options) { +void StaticPipeline::render(StaticMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); auto* infoBag = getInfoBag(mesh, options, &model); @@ -68,7 +62,7 @@ void StaticPipeline::addVertices(MeshMaterialFrame* materialFrame, bag->vertices = materialFrame->getVertices(); } -PipelineInfoBag* StaticPipeline::getInfoBag(DynamicMesh* mesh, +PipelineInfoBag* StaticPipeline::getInfoBag(StaticMesh* mesh, const StaPipOptions* options, M4x4* model) const { auto* result = new PipelineInfoBag(); diff --git a/engine/src/renderer/core/texture/texture_repository.cpp b/engine/src/renderer/core/texture/texture_repository.cpp index 92952cc..63ec8a1 100644 --- a/engine/src/renderer/core/texture/texture_repository.cpp +++ b/engine/src/renderer/core/texture/texture_repository.cpp @@ -57,7 +57,7 @@ Texture* TextureRepository::add(const char* fullpath) { return texture; } -void TextureRepository::addByMesh(DynamicMesh* mesh, const char* directory, +void TextureRepository::addByMesh(Mesh* mesh, const char* directory, const char* extension) { auto& loader = texLoaderSelector.getLoaderByExtension(extension); diff --git a/samples/h4570/inc/h4570.hpp b/samples/h4570/inc/h4570.hpp index 30bd4ab..d340a18 100644 --- a/samples/h4570/inc/h4570.hpp +++ b/samples/h4570/inc/h4570.hpp @@ -15,6 +15,7 @@ #include "renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp" #include "renderer/3d/pipeline/static/static_pipeline.hpp" #include "renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp" +#include "renderer/3d/mesh/static/static_mesh.hpp" namespace Tyra { @@ -29,6 +30,7 @@ class H4570 : public Game { private: Engine* engine; + StaticMesh* staticMesh; DynamicMesh* warrior; u8 warriorsCount; DynamicMesh** warriors; diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 9584b78..0785eed 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -27,6 +27,7 @@ int getRandomInt(int a, int b) { return (rand() % (b - a + 1)) + a; } H4570::H4570(Engine* t_engine) { engine = t_engine; } H4570::~H4570() {} +StaticMesh* getStaticMesh(Renderer* renderer); DynamicMesh* getWarrior(Renderer* renderer); StaPipOptions* getStaPipOptions(); DynPipOptions* getDynPipOptions(); @@ -45,6 +46,8 @@ void H4570::init() { engine->renderer.setClearScreenColor(Color(64.0F, 64.0F, 64.0F)); + staticMesh = getStaticMesh(&engine->renderer); + warrior = getWarrior(&engine->renderer); warriorTex = engine->renderer.core.texture.repository.getBySpriteOrMesh( warrior->getMaterial(0)->getId()); @@ -114,7 +117,14 @@ void H4570::init() { engine->renderer.setFrameLimit(false); } +u32 counter = 0; + void H4570::loop() { + if (counter++ > 30) { + TYRA_LOG(engine->info.getFps()); + counter = 0; + } + for (u8 i = 0; i < warriorsCount; i++) warriors[i]->animate(); engine->renderer.beginFrame(CameraInfo3D(&cameraPosition, &cameraLookAt)); @@ -127,6 +137,9 @@ void H4570::loop() { blocks[i].model = translations[i] * rotations[i] * scales[i]; } + engine->renderer.renderer3D.usePipeline(&stapip); + { stapip.render(staticMesh, staOptions); } + engine->renderer.renderer3D.usePipeline(&dynpip); { Threading::switchThread(); @@ -144,6 +157,19 @@ void H4570::loop() { engine->renderer.endFrame(); } +StaticMesh* getStaticMesh(Renderer* renderer) { + MD2Loader loader; + auto* data = loader.load(FileUtils::fromCwd("warrior.md2"), .08F, false); + auto* result = new StaticMesh(*data); + // result->translation.translateZ(-30.0F); + delete data; + + renderer->core.texture.repository.addByMesh(result, FileUtils::getCwd(), + "png"); + + return result; +} + DynamicMesh* getWarrior(Renderer* renderer) { MD2Loader loader; auto* data = loader.load(FileUtils::fromCwd("warrior.md2"), .08F, false); From 7c1ab0bfaa9a2ea955caa778bea01d0bd8c53d09 Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 24 Jul 2022 23:03:06 +0200 Subject: [PATCH 29/33] texture allocation bugfix --- .../texture/renderer_core_texture_sender.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/engine/src/renderer/core/texture/renderer_core_texture_sender.cpp b/engine/src/renderer/core/texture/renderer_core_texture_sender.cpp index ca2df10..7e47a1c 100644 --- a/engine/src/renderer/core/texture/renderer_core_texture_sender.cpp +++ b/engine/src/renderer/core/texture/renderer_core_texture_sender.cpp @@ -30,7 +30,8 @@ RendererCoreTextureBuffers RendererCoreTextureSender::allocate( texbuffer_t* core = allocateTextureCore(t_texture); texbuffer_t* clut = nullptr; - if (t_texture->getClutData() != nullptr) { + auto texClut = t_texture->getClutData(); + if (texClut != nullptr && texClut->width + texClut->height > 0) { clut = allocateTextureClut(t_texture); } return {t_texture->getId(), core, clut}; @@ -66,12 +67,11 @@ texbuffer_t* RendererCoreTextureSender::allocateTextureCore( TYRA_ASSERT(t_texture->getSizeInMB() <= getFreeVRamInMB(), "Not enough VRAM memory for texture!"); - result->address = + auto address = graph_vram_allocate(t_texture->getWidth(), t_texture->getHeight(), result->psm, GRAPH_ALIGN_BLOCK); - - TYRA_ASSERT(result->address > 0, - "Texture buffer allocation error. No memory!"); + TYRA_ASSERT(address > 0, "Texture buffer allocation error, no memory!"); + result->address = address; allocatedVRamMemForTextures += t_texture->getSizeInMB(); result->info.width = draw_log2(t_texture->getWidth()); @@ -89,8 +89,10 @@ texbuffer_t* RendererCoreTextureSender::allocateTextureClut( result->psm = clut->psm; result->info.components = clut->components; - result->address = graph_vram_allocate(clut->width, clut->height, result->psm, - GRAPH_ALIGN_BLOCK); + auto address = graph_vram_allocate(clut->width, clut->height, result->psm, + GRAPH_ALIGN_BLOCK); + TYRA_ASSERT(address > 0, "Texture clut buffer allocation error, no memory!"); + result->address = address; result->info.width = draw_log2(clut->width); result->info.height = draw_log2(clut->height); From c1f88d2f15fd82648bff0b7c902ba72e105aa64a Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 24 Jul 2022 23:03:48 +0200 Subject: [PATCH 30/33] interlacing mode --- engine/inc/renderer/renderer_settings.hpp | 5 ++++ .../src/renderer/core/2d/renderer_core_2d.cpp | 9 +++--- .../src/renderer/core/3d/renderer_core_3d.cpp | 2 +- .../src/renderer/core/gs/renderer_core_gs.cpp | 28 +++++++++++-------- samples/h4570/src/h4570.cpp | 2 +- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/engine/inc/renderer/renderer_settings.hpp b/engine/inc/renderer/renderer_settings.hpp index f696329..3317c7d 100644 --- a/engine/inc/renderer/renderer_settings.hpp +++ b/engine/inc/renderer/renderer_settings.hpp @@ -33,6 +33,11 @@ class RendererSettings { const float& getProjectionScale() const { return projectionScale; } const float& getAspectRatio() const { return aspectRatio; } + float getInterlacedHeightF() const { return getHeight() / 2; } + unsigned int getInterlacedHeightUI() const { + return static_cast(getInterlacedHeightF()); + } + static void copy(RendererSettings* out, const RendererSettings* in); void set(const RendererSettings& v); diff --git a/engine/src/renderer/core/2d/renderer_core_2d.cpp b/engine/src/renderer/core/2d/renderer_core_2d.cpp index 11c6aab..cfc0377 100644 --- a/engine/src/renderer/core/2d/renderer_core_2d.cpp +++ b/engine/src/renderer/core/2d/renderer_core_2d.cpp @@ -88,10 +88,11 @@ void RendererCore2D::render(Sprite* sprite, packet2_utils_gs_add_texbuff_clut(packet, texBuffers.core, clutBuffer); draw_enable_blending(); packet2_update(packet, draw_rect_textured(packet->next, 0, rect)); - packet2_update(packet, draw_primitive_xyoffset( - packet->next, 0, - SCREEN_CENTER - (settings->getWidth() / 2.0F), - SCREEN_CENTER - (settings->getHeight() / 2.0F))); + packet2_update( + packet, + draw_primitive_xyoffset( + packet->next, 0, SCREEN_CENTER - (settings->getWidth() / 2.0F), + SCREEN_CENTER - (settings->getInterlacedHeightF() / 2.0F))); draw_disable_blending(); packet2_update(packet, draw_finish(packet->next)); diff --git a/engine/src/renderer/core/3d/renderer_core_3d.cpp b/engine/src/renderer/core/3d/renderer_core_3d.cpp index 189d400..9658ee9 100644 --- a/engine/src/renderer/core/3d/renderer_core_3d.cpp +++ b/engine/src/renderer/core/3d/renderer_core_3d.cpp @@ -37,7 +37,7 @@ void RendererCore3D::setFov(const float& t_fov) { void RendererCore3D::setProjection() { projection = M4x4::perspective( - fov, settings->getWidth(), settings->getHeight(), + fov, settings->getWidth(), settings->getInterlacedHeightF(), settings->getProjectionScale(), settings->getAspectRatio(), settings->getNear(), settings->getFar()); } diff --git a/engine/src/renderer/core/gs/renderer_core_gs.cpp b/engine/src/renderer/core/gs/renderer_core_gs.cpp index 2b6ac67..37085d6 100644 --- a/engine/src/renderer/core/gs/renderer_core_gs.cpp +++ b/engine/src/renderer/core/gs/renderer_core_gs.cpp @@ -52,12 +52,12 @@ void RendererCoreGS::initChannels() { } void RendererCoreGS::allocateBuffers() { - const u16 psm = 24; + const u16 psm = 32; frameBuffers[0].width = static_cast(settings->getWidth()); - frameBuffers[0].height = static_cast(settings->getHeight()); + frameBuffers[0].height = settings->getInterlacedHeightUI(); frameBuffers[0].mask = 0; - frameBuffers[0].psm = GS_PSM_24; + frameBuffers[0].psm = GS_PSM_32; frameBuffers[0].address = graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height, frameBuffers[0].psm, GRAPH_ALIGN_PAGE); @@ -73,15 +73,20 @@ void RendererCoreGS::allocateBuffers() { zBuffer.enable = DRAW_ENABLE; zBuffer.mask = 0; zBuffer.method = ZTEST_METHOD_GREATER_EQUAL; - zBuffer.zsm = GS_ZBUF_24; + zBuffer.zsm = GS_ZBUF_32; zBuffer.address = graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height, zBuffer.zsm, GRAPH_ALIGN_PAGE); TYRA_LOG("Framebuffers, zBuffer set and allocated!"); - // Initialize the screen and tie the first framebuffer to the read circuits. - graph_initialize(frameBuffers[1].address, frameBuffers[1].width, - frameBuffers[1].height, frameBuffers[1].psm, 0, 0); + graph_set_mode(GRAPH_MODE_INTERLACED, GRAPH_MODE_NTSC, GRAPH_MODE_FRAME, + GRAPH_ENABLE); + graph_set_screen(0, 0, static_cast(settings->getWidth()), + static_cast(settings->getHeight())); + graph_set_bgcolor(0, 0, 0); + graph_set_framebuffer_filtered(frameBuffers[1].address, frameBuffers[1].width, + frameBuffers[1].psm, 0, 0); + graph_enable_output(); spaceOccupiedByFrameBuffers = ((frameBuffers[0].width / 100.0F) * (frameBuffers[0].height / 100.0F) * @@ -96,10 +101,11 @@ void RendererCoreGS::initDrawingEnvironment() { packet2_t* packet2 = packet2_create(20, P2_TYPE_NORMAL, P2_MODE_NORMAL, 0); packet2_update(packet2, draw_setup_environment(packet2->base, 0, frameBuffers, &zBuffer)); - packet2_update(packet2, draw_primitive_xyoffset( - packet2->next, 0, - screenCenter - (settings->getWidth() / 2.0F), - screenCenter - (settings->getHeight() / 2.0F))); + packet2_update( + packet2, + draw_primitive_xyoffset( + packet2->next, 0, screenCenter - (settings->getWidth() / 2.0F), + screenCenter - (settings->getInterlacedHeightF() / 2.0F))); packet2_update(packet2, draw_finish(packet2->next)); dma_channel_send_packet2(packet2, DMA_CHANNEL_GIF, true); dma_channel_wait(DMA_CHANNEL_GIF, 0); diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 0785eed..5cbce43 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -113,7 +113,7 @@ void H4570::init() { blocks[i].color = Color(128.0F, 128.0F, 128.0F, 128.0F); } - engine->audio.playSong(); + // engine->audio.playSong(); engine->renderer.setFrameLimit(false); } From 819a7c3de35561b852ccb9c26027a8a7cf3ad7dd Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 24 Jul 2022 23:08:10 +0200 Subject: [PATCH 31/33] documentation update --- ROADMAP.txt | 1 - .../inc/renderer/core/texture/models/texture_bpp.hpp | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index 06048de..69d723e 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -4,7 +4,6 @@ - [StaPip] FPS spamming: 190 --- H4570 -- [Renderer] Fix current visual bug - [StaPip] Te same parametry frustumcheck jak w dynamic - [StaPip] No frustum check -> bez - [StaPip] Simple frustum check -> check bboxa z Mesh diff --git a/engine/inc/renderer/core/texture/models/texture_bpp.hpp b/engine/inc/renderer/core/texture/models/texture_bpp.hpp index 69bd7df..32c748f 100644 --- a/engine/inc/renderer/core/texture/models/texture_bpp.hpp +++ b/engine/inc/renderer/core/texture/models/texture_bpp.hpp @@ -14,29 +14,29 @@ namespace Tyra { enum TextureBpp { - // Tyra has 1.3MB~ free VRAM for textures. + // Tyra has 2.27MB~ free VRAM for textures. /** * @brief 32-bit RGBA - Slowest - * Tyra can cache about 4~ of these textures (256x256) + * Tyra can cache about 8~ of these textures (256x256) */ bpp32 = 32, /** * @brief 24-bit RGB - Slow - * Tyra can cache about 6~ of these textures (256x256) + * Tyra can cache about 11~ of these textures (256x256) */ bpp24 = 24, /** * @brief 8-bit palletized (indexed) - Super fast - * Tyra can cache about 19~ of these textures (256x256) + * Tyra can cache about 34~ of these textures (256x256) */ bpp8 = 8, /** * @brief 4-bit palletized (indexed) - Super, super fast - * Tyra can cache about 39~ of these textures (256x256) + * Tyra can cache about 69~ of these textures (256x256) */ bpp4 = 4, }; From 0c63de8ac949daaea10f28d66e1b664564bf3f19 Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 25 Jul 2022 20:10:46 +0200 Subject: [PATCH 32/33] core renderer refactor finish --- ROADMAP.txt | 18 +--- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 4 +- .../3d/pipeline/dynamic/dynpip_options.hpp | 9 -- .../pipeline/minecraft/minecraft_pipeline.hpp | 19 +++- .../programs/mcpip_programs_manager.hpp | 5 + .../pipeline/shared/bag/pipeline_info_bag.hpp | 6 +- .../shared/pipeline_frustum_culling.hpp | 24 +++++ .../3d/pipeline/shared/pipeline_options.hpp | 2 + .../3d/pipeline/static/core/stapip_core.hpp | 6 +- .../3d/pipeline/static/stapip_options.hpp | 8 +- .../3d/pipeline/static/static_pipeline.hpp | 2 +- .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 12 +-- .../pipeline/minecraft/minecraft_pipeline.cpp | 100 +++++++++++++----- .../minecraft/programs/cull/mcpip_cull.cpp | 2 - .../programs/mcpip_programs_manager.cpp | 40 ++++++- .../bag/packaging/stapip_bag_packager.cpp | 2 + .../3d/pipeline/static/core/stapip_core.cpp | 76 ++++++++----- .../3d/pipeline/static/static_pipeline.cpp | 32 ++++-- 18 files changed, 258 insertions(+), 109 deletions(-) create mode 100644 engine/inc/renderer/3d/pipeline/shared/pipeline_frustum_culling.hpp diff --git a/ROADMAP.txt b/ROADMAP.txt index 69d723e..eac4da5 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,17 +1,10 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ -- [StaPip] FPS before: 175 -- [StaPip] FPS spamming: 190 - --- H4570 -- [StaPip] Te same parametry frustumcheck jak w dynamic -- [StaPip] No frustum check -> bez -- [StaPip] Simple frustum check -> check bboxa z Mesh -- [StaPip] Precise frustum check -> tak jak teraz? -- [StaPip] Poprawic opis od noFullClipChecks, ze bedzie tylko dzialac na PreciseFrustumCheck - [Renderer] Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) -- [McPip] Clipping mode -- [McPip] VU1 packets spamming +- [Texture] Unload texture +- [Texture] Dont load loaded texture by name + - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader as static Mesh loader - [Game] Update intellisense from docker @@ -25,8 +18,6 @@ - [General] Control generated id to avoid duplication. Maybe Just increment from 0? Add interface IIdentificable? -- [General] rsync is excluding folder like "objects" lol XD - - [DMA] Check if all chain transfers have end tag! - [General] Change libs of sample? (remove -lpng, -lz...), probably they are not required @@ -36,7 +27,7 @@ - [General] Check all TYRA_ASSERT() if there are no asserts like (TYRA_ASSERT(!audsrv_load_adpcm(result, data, adpcmFileSize))) because this lines will be removed on make-release. Only debug stuff should be checked in assert -- [General] All Copyrights to 2020-2022 +- [General] All Copyrights to 2022 - [General] CI in Github via docker image @@ -66,3 +57,4 @@ because Mesh rendering uses only core.render() ------------ Github issues for Tyra v2 ------------ - [3D] Add drawLine(x, y , color, size) - [3D] Add drawBBox(x, y , color, size) +- [File] Async file loading diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index a3273e1..ae1d64d 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -52,10 +52,10 @@ class DynamicPipeline : public Renderer3DPipeline { static const u32 halfBuffersCount; void setBuffer(DynPipBag* buffers, DynPipBag* buffer, u16* bufferIndex, - const DynPipFrustumCulling& frustumCulling); + const PipelineFrustumCulling& frustumCulling); void sendRestOfBuffers(DynPipBag* buffers, u16* bufferIndex, - const DynPipFrustumCulling& frustumCulling); + const PipelineFrustumCulling& frustumCulling); void addVertices(MeshMaterialFrame* materialFrameFrom, MeshMaterialFrame* materialFrameTo, DynPipBag* bag, diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp index 9f0ce84..ece1bad 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynpip_options.hpp @@ -14,19 +14,10 @@ namespace Tyra { -enum DynPipFrustumCulling { - DynPipFrustumCulling_None = 0, - DynPipFrustumCulling_Simple = 1, - DynPipFrustumCulling_Precise = 2, -}; - class DynPipOptions : public PipelineOptions { public: DynPipOptions() {} ~DynPipOptions() {} - - /** Default: Simple */ - DynPipFrustumCulling frustumCulling; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp index 0801d40..275b83f 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp @@ -22,7 +22,7 @@ namespace Tyra { * Pipeline specialized in fast rendering of voxels * Supports: * - Full "against each plane" clipping - * - Frustum culling (on noFullClipChecks = false) + * - Frustum culling (on fullClipChecks = true) */ class MinecraftPipeline : public Renderer3DPipeline { public: @@ -40,11 +40,11 @@ class MinecraftPipeline : public Renderer3DPipeline { * @param count number of blocks to render * @param t_tex texture to use * @param isMulti is this a 6 texture voxel? - * @param noFullClipChecks true = faster, simple PS2 clipping. False = slower + * @param fullClipChecks false = faster, simple PS2 clipping. True = slower * "against each plane" clipping. */ void render(McpipBlock* blocks, const u32& count, Texture* t_tex, - const bool& isMulti = false, const bool& noFullClipChecks = true); + const bool& isMulti = false, const bool& fullClipChecks = false); inline const float& getTextureOffset() const { return manager.getTextureOffset(); @@ -58,12 +58,17 @@ class MinecraftPipeline : public Renderer3DPipeline { RenderBBox* bbox; McpipProgramName latestMode; + McpipBlock*** spamBuffers; + u32* spamCounts; + u32 spamBuffersCount; + u32 spammerIndex; + void initBBox(); void changeMode(const McpipProgramName& requestedMode, const u8& force); void cull(McpipBlock* blocks, const std::vector& indexes, - RendererCoreTextureBuffers* texBuffers, + RendererCoreTextureBuffers* texBuffers, const bool& isCullOnly, const bool& isMulti = false); void clip(McpipBlock* blocks, const std::vector& indexes, @@ -71,6 +76,12 @@ class MinecraftPipeline : public Renderer3DPipeline { const bool& isMulti = false); Tyra::CoreBBoxFrustum isInFrustum(const McpipBlock& block) const; + + void addToSpammer(McpipBlock** blockPointerArray, const u32& count, + RendererCoreTextureBuffers* texBuffers, + const bool& isMulti); + void flushSpammer(RendererCoreTextureBuffers* texBuffers, + const bool& isMulti); }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp b/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp index aecff93..2864a46 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp @@ -42,6 +42,10 @@ class BlockizerProgramsManager { void clearLastProgram() { lastProgramName = UndefinedMcpipProgram; } + void cullSpam(McpipBlock*** blockPointerArrays, u32* blockPointerArrayCounts, + u32 blockPointerArraysCount, + RendererCoreTextureBuffers* texBuffers, const bool& isMulti); + void cull(McpipBlock** blockPointerArray, u32 blockPointerArrayCount, RendererCoreTextureBuffers* texBuffers, const bool& isMulti); @@ -69,6 +73,7 @@ class BlockizerProgramsManager { void setProgramsCache(); void uploadBlock(bool isMulti); + void addProgram(McpipProgram* program); void sendPacket(McpipProgram* program); }; diff --git a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp index cc7492a..aa14523 100644 --- a/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/bag/pipeline_info_bag.hpp @@ -30,15 +30,15 @@ class PipelineInfoBag { bool antiAliasingEnabled; /** - * @brief True -> disables "clip against each plane" algorithm. - * Default: false. + * @brief False -> disables "clip against each plane" algorithm. + * Default: True. * * Full clip checks are slow, but they are * preventing visual artifacts, which can happen * for big 3D objects (or objects near camera eyes) * Force enabled in dynamic pipe, because of efficiency. */ - bool noFullClipChecks; + bool fullClipChecks; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/shared/pipeline_frustum_culling.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_frustum_culling.hpp new file mode 100644 index 0000000..a374e44 --- /dev/null +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_frustum_culling.hpp @@ -0,0 +1,24 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +namespace Tyra { + +enum PipelineFrustumCulling { + /** No frustum culling */ + PipelineFrustumCulling_None = 0, + /** Frustum culling of whole object */ + PipelineFrustumCulling_Simple = 1, + /** Frustum culling of parts of an object */ + PipelineFrustumCulling_Precise = 2, +}; + +} diff --git a/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp index ced7f37..214f999 100644 --- a/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp +++ b/engine/inc/renderer/3d/pipeline/shared/pipeline_options.hpp @@ -12,6 +12,7 @@ #include "renderer/3d/pipeline/shared/pipeline_shading_type.hpp" #include "../shared/pipeline_lighting_options.hpp" +#include "./pipeline_frustum_culling.hpp" namespace Tyra { @@ -20,6 +21,7 @@ class PipelineOptions { PipelineOptions() { lighting = nullptr; } ~PipelineOptions() {} + PipelineFrustumCulling frustumCulling; PipelineShadingType shadingType; bool blendingEnabled; bool antiAliasingEnabled; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp index 33d70c1..0573b66 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp @@ -16,6 +16,7 @@ #include "./bag/packaging/stapip_bag_package.hpp" #include "./bag/packaging/stapip_bag_packager.hpp" #include "./stapip_qbuffer_renderer.hpp" +#include "renderer/3d/pipeline/shared/pipeline_frustum_culling.hpp" namespace Tyra { @@ -27,7 +28,8 @@ class StaPipCore { void init(RendererCore* t_core); /** Render 3D via "bags" */ - void render(StaPipBag* bag, StaPipBagPackagesBBox* bbox = nullptr); + void render(StaPipBag* bag, const bool& frustumCull, + StaPipBagPackagesBBox* bbox = nullptr); /** Get max vert count of VU1 qbuffer (for optimizations) */ u32 getMaxVertCountByParams(const bool& isSingleColor, @@ -52,7 +54,7 @@ class StaPipCore { void setMaxVertCount(const u32& count); StaPipBagPackager packager; StaPipQBufferRenderer qbufferRenderer; - void renderPkgs(StaPipBagPackage* packages, u16 count); + void renderPkgs(StaPipBagPackage* packages, const bool& doClip, u16 count); void renderSubpkgs(StaPipBagPackage* packages, u16 count); }; diff --git a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp index 17108d6..90c23c2 100644 --- a/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp +++ b/engine/inc/renderer/3d/pipeline/static/stapip_options.hpp @@ -16,18 +16,18 @@ namespace Tyra { class StaPipOptions : public PipelineOptions { public: - StaPipOptions() {} + StaPipOptions() { fullClipChecks = false; } ~StaPipOptions() {} /** - * @brief True -> disables "clip against each plane" algorithm. - * Mandatory, default: false. + * @brief False -> disables "clip against each plane" algorithm. + * Mandatory, default: True. * * Full clip checks are slow, but they are * preventing visual artifacts, which can happen * for big 3D objects (or objects near camera eyes) */ - bool noFullClipChecks; + bool fullClipChecks; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index e3d45ec..b5c3d50 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -24,7 +24,7 @@ namespace Tyra { * Pipeline for static models (StaticMesh). * Supports: * - Full "against each plane" clipping and simple PS2 clipping - * (noFullClipChecks), + * (fullClipChecks), * - Force enabled precise frustum culling (checks parts of given mesh) * - Modes: color(s), texture+color(s), dir lights, texture + dir lights */ diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index f2f81ba..c40dc2e 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -40,9 +40,9 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto* infoBag = getInfoBag(mesh, options, &model); PipelineDirLightsBag* dirLights = nullptr; auto frustumCulling = - options ? options->frustumCulling : DynPipFrustumCulling_Simple; + options ? options->frustumCulling : PipelineFrustumCulling_Simple; - if (frustumCulling == DynPipFrustumCulling_Simple) { + if (frustumCulling == PipelineFrustumCulling_Simple) { auto* frameTo = mesh->getFrame(mesh->getNextAnimationFrame()); if (frameTo->getBBox().isInFrustum( rendererCore->renderer3D.frustumPlanes.getAll(), model) == @@ -117,7 +117,7 @@ void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, u16* bufferIndex, - const DynPipFrustumCulling& frustumCulling) { + const PipelineFrustumCulling& frustumCulling) { auto isEndOf1stDBuffer = *bufferIndex == halfBuffersCount - 1; auto isEndOf2ndDBuffer = *bufferIndex == buffersCount - 1; @@ -130,7 +130,7 @@ void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, sendBuffers[i] = &buffers[offset + i]; core.renderPart(sendBuffers, halfBuffersCount, - frustumCulling == DynPipFrustumCulling_Precise); + frustumCulling == PipelineFrustumCulling_Precise); delete[] sendBuffers; } @@ -143,7 +143,7 @@ void DynamicPipeline::setBuffer(DynPipBag* buffers, DynPipBag* buffer, void DynamicPipeline::sendRestOfBuffers( DynPipBag* buffers, u16* bufferIndex, - const DynPipFrustumCulling& frustumCulling) { + const PipelineFrustumCulling& frustumCulling) { auto isEndOf1stDBuffer = *bufferIndex <= halfBuffersCount - 1; u32 offset = isEndOf1stDBuffer ? 0 : halfBuffersCount; @@ -157,7 +157,7 @@ void DynamicPipeline::sendRestOfBuffers( } core.renderPart(sendBuffers, size, - frustumCulling == DynPipFrustumCulling_Precise); + frustumCulling == PipelineFrustumCulling_Precise); delete[] sendBuffers; } diff --git a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp index 7db26ba..4cca364 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp @@ -14,12 +14,20 @@ namespace Tyra { -MinecraftPipeline::MinecraftPipeline() { latestMode = UndefinedMcpipProgram; } +MinecraftPipeline::MinecraftPipeline() { + latestMode = UndefinedMcpipProgram; + spamBuffersCount = 4; + spamBuffers = new McpipBlock**[spamBuffersCount]; + spamCounts = new u32[spamBuffersCount]; + spammerIndex = 0; +} MinecraftPipeline::~MinecraftPipeline() { if (bbox) { delete bbox; } + delete[] spamBuffers; + delete[] spamCounts; } void MinecraftPipeline::init(RendererCore* core) { @@ -42,35 +50,35 @@ void MinecraftPipeline::initBBox() { void MinecraftPipeline::render(McpipBlock* blocks, const u32& count, Texture* t_tex, const bool& isMulti, - const bool& noFullClipChecks) { + const bool& fullClipChecks) { auto texBuffers = rendererCore->texture.useTexture(t_tex); rendererCore->gs.prim.mapping = 1; manager.clearLastProgram(); std::vector cullIndexes; - if (noFullClipChecks) { + if (!fullClipChecks) { for (u32 i = 0; i < count; i++) cullIndexes.push_back(i); - cull(blocks, cullIndexes, &texBuffers, isMulti); + cull(blocks, cullIndexes, &texBuffers, true, isMulti); return; - } else { - u32 culled = 0, clipped = 0; - std::vector clipIndexes; - - for (u32 i = 0; i < count; i++) { - auto frustum = isInFrustum(blocks[i]); - if (frustum == CoreBBoxFrustum::IN_FRUSTUM) { - cullIndexes.push_back(i); - culled++; - } else if (frustum == CoreBBoxFrustum::PARTIALLY_IN_FRUSTUM) { - clipIndexes.push_back(i); - clipped++; - } - } - - if (culled > 0) cull(blocks, cullIndexes, &texBuffers, isMulti); - if (clipped > 0) clip(blocks, clipIndexes, &texBuffers, isMulti); } + + u32 culled = 0, clipped = 0; + std::vector clipIndexes; + + for (u32 i = 0; i < count; i++) { + auto frustum = isInFrustum(blocks[i]); + if (frustum == CoreBBoxFrustum::IN_FRUSTUM) { + cullIndexes.push_back(i); + culled++; + } else if (frustum == CoreBBoxFrustum::PARTIALLY_IN_FRUSTUM) { + clipIndexes.push_back(i); + clipped++; + } + } + + if (culled > 0) cull(blocks, cullIndexes, &texBuffers, false, isMulti); + if (clipped > 0) clip(blocks, clipIndexes, &texBuffers, isMulti); } CoreBBoxFrustum MinecraftPipeline::isInFrustum(const McpipBlock& block) const { @@ -81,7 +89,7 @@ CoreBBoxFrustum MinecraftPipeline::isInFrustum(const McpipBlock& block) const { void MinecraftPipeline::cull(McpipBlock* blocks, const std::vector& indexes, RendererCoreTextureBuffers* texBuffers, - const bool& isMulti) { + const bool& isCullOnly, const bool& isMulti) { changeMode(McPipCull, false); auto maxBlocksPerQBuffer = manager.culler.getMaxBlocksCountPerQBuffer(); @@ -100,10 +108,18 @@ void MinecraftPipeline::cull(McpipBlock* blocks, &blocks[indexes[i * maxBlocksPerQBuffer + j]]; } - manager.cull(blockPointerArray, blockPointerArrayCount, texBuffers, - isMulti); + if (isCullOnly) { + addToSpammer(blockPointerArray, blockPointerArrayCount, texBuffers, + isMulti); + } else { + manager.cull(blockPointerArray, blockPointerArrayCount, texBuffers, + isMulti); + delete[] blockPointerArray; + } + } - delete[] blockPointerArray; + if (isCullOnly) { + flushSpammer(texBuffers, isMulti); } } @@ -139,4 +155,38 @@ void MinecraftPipeline::changeMode(const McpipProgramName& requestedMode, } } +void MinecraftPipeline::addToSpammer(McpipBlock** blockPointerArray, + const u32& count, + RendererCoreTextureBuffers* texBuffers, + const bool& isMulti) { + spamBuffers[spammerIndex] = blockPointerArray; + spamCounts[spammerIndex] = count; + + spammerIndex++; + + if (spammerIndex == spamBuffersCount) { + spammerIndex = 0; + + manager.cullSpam(spamBuffers, spamCounts, spamBuffersCount, texBuffers, + isMulti); + + for (u32 i = 0; i < spamBuffersCount; i++) { + delete[] spamBuffers[i]; + } + } +} + +void MinecraftPipeline::flushSpammer(RendererCoreTextureBuffers* texBuffers, + const bool& isMulti) { + if (spammerIndex == 0) return; + + manager.cullSpam(spamBuffers, spamCounts, spammerIndex, texBuffers, isMulti); + + for (u32 i = 0; i < spammerIndex; i++) { + delete[] spamBuffers[i]; + } + + spammerIndex = 0; +} + } // namespace Tyra diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull.cpp index e3c3fe4..5f04d46 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/cull/mcpip_cull.cpp @@ -107,8 +107,6 @@ void McpipCull::sendVU1StaticData() { void McpipCull::addData(packet2_t* packet, McpipBlock** blockPointerArray, u32 blockPointerArrayCount, RendererCoreTextureBuffers* texBuffers, bool isMulti) { - packet2_reset(packet, false); - rendererCore->texture.updateClutBuffer(texBuffers->clut); packet2_utils_vu_open_unpack( diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp index aa89c39..7e6c95b 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp @@ -16,8 +16,8 @@ BlockizerProgramsManager::BlockizerProgramsManager() { lastProgramName = UndefinedMcpipProgram; context = 0; vu1BlockData = BlockNotUploaded; - dynamicPackets[0] = packet2_create(100, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - dynamicPackets[1] = packet2_create(100, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + dynamicPackets[0] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + dynamicPackets[1] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); staticPacket = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); setProgramsCache(); } @@ -79,6 +79,32 @@ void BlockizerProgramsManager::uploadBlock(bool isMulti) { dma_channel_send_packet2(staticPacket, DMA_CHANNEL_VIF1, true); } +void BlockizerProgramsManager::cullSpam(McpipBlock*** blockPointerArrays, + u32* blockPointerArrayCounts, + u32 blockPointerArraysCount, + RendererCoreTextureBuffers* texBuffers, + const bool& isMulti) { + uploadBlock(isMulti); + + auto* currentPacket = dynamicPackets[context]; + + auto* program = repo.getProgram(McpipProgramName::McPipCull); + + packet2_reset(currentPacket, false); + + for (u32 i = 0; i < blockPointerArraysCount; i++) { + auto* blockPointerArray = blockPointerArrays[i]; + auto blockPointerArrayCount = blockPointerArrayCounts[i]; + + culler.addData(currentPacket, blockPointerArray, blockPointerArrayCount, + texBuffers, isMulti); + + addProgram(program); + } + + sendPacket(program); +} + void BlockizerProgramsManager::cull(McpipBlock** blockPointerArray, u32 blockPointerArrayCount, RendererCoreTextureBuffers* texBuffers, @@ -89,9 +115,12 @@ void BlockizerProgramsManager::cull(McpipBlock** blockPointerArray, auto* program = repo.getProgram(McpipProgramName::McPipCull); + packet2_reset(currentPacket, false); + culler.addData(currentPacket, blockPointerArray, blockPointerArrayCount, texBuffers, isMulti); + addProgram(program); sendPacket(program); } @@ -106,10 +135,11 @@ void BlockizerProgramsManager::clip(McpipBlock* block, clipper.addData(block, isMulti, texBuffers, currentPacket, context); + addProgram(program); sendPacket(program); } -void BlockizerProgramsManager::sendPacket(McpipProgram* program) { +void BlockizerProgramsManager::addProgram(McpipProgram* program) { auto* currentPacket = dynamicPackets[context]; if (lastProgramName != program->getName()) { @@ -119,6 +149,10 @@ void BlockizerProgramsManager::sendPacket(McpipProgram* program) { } else { packet2_utils_vu_add_continue_program(currentPacket); } +} + +void BlockizerProgramsManager::sendPacket(McpipProgram* program) { + auto* currentPacket = dynamicPackets[context]; packet2_utils_vu_add_end_tag(currentPacket); diff --git a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp index f484702..649e4a8 100644 --- a/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/bag/packaging/stapip_bag_packager.cpp @@ -100,6 +100,8 @@ StaPipBagPackage* StaPipBagPackager::create(u16* o_count, } CoreBBoxFrustum StaPipBagPackager::checkFrustum(const StaPipBagPackage& pkg) { + if (!renderBBox) return CoreBBoxFrustum::OUTSIDE_FRUSTUM; + if (pkg.size <= (maxVertCount / 3)) { // Is subpackage auto& bbox = renderBBox->getChildBBox1By3(pkg.indexOf1By3BBox); return bbox.clipIsInFrustum(frustumPlanes->getAll(), *pkg.bag->info->model); diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp index 0027df7..efb179b 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_core.cpp @@ -47,7 +47,8 @@ u32 StaPipCore::getMaxVertCountByParams(const bool& isSingleColor, ->getMaxVertCount(isSingleColor, qbufferRenderer.getBufferSize()); } -void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { +void StaPipCore::render(StaPipBag* bag, const bool& frustumCull, + StaPipBagPackagesBBox* bbox) { if (bag->count <= 0) return; TYRA_ASSERT(bag->vertices != nullptr, @@ -70,25 +71,33 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { TYRA_ASSERT( !bag->texture || (bag->texture->texture && bag->texture->coordinates), "If you want texture, please provide texture and coordinates!"); - - StaPipBagPackagesBBox* renderBbox; + TYRA_ASSERT(!(frustumCull == false && bag->info->fullClipChecks == true), + "Full clip checks are not supported with frustum culling = off!"); u32 maxVertCount = getMaxVertCountByBag(bag); - setMaxVertCount(maxVertCount); - if (!bbox) - renderBbox = - new StaPipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); - else - renderBbox = bbox; + StaPipBagPackagesBBox* renderBbox = nullptr; + + CoreBBoxFrustum frustumCheck = OUTSIDE_FRUSTUM; + + if (frustumCull) { + if (!bbox) + renderBbox = + new StaPipBagPackagesBBox(bag->vertices, bag->count, maxVertCount); + else + renderBbox = bbox; + + frustumCheck = renderBbox->getMainBBox()->clipIsInFrustum( + rendererCore->renderer3D.frustumPlanes.getAll(), *bag->info->model); + + if (frustumCheck == OUTSIDE_FRUSTUM) return; + } + + packager.setRenderBBox(renderBbox); - auto frustumCheck = renderBbox->getMainBBox()->clipIsInFrustum( - rendererCore->renderer3D.frustumPlanes.getAll(), *bag->info->model); auto mvp = rendererCore->renderer3D.getViewProj() * *bag->info->model; - if (frustumCheck == OUTSIDE_FRUSTUM) return; - RendererCoreTextureBuffers* texBuffers = nullptr; if (bag->texture) { auto temp = rendererCore->texture.useTexture(bag->texture->texture); @@ -99,14 +108,28 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { qbufferRenderer.sendObjectData(bag, &mvp, texBuffers); - packager.setRenderBBox(renderBbox); - qbufferRenderer.setClipperMVP(&mvp); qbufferRenderer.setInfo(bag->info); - if (frustumCheck == IN_FRUSTUM || - (frustumCheck == PARTIALLY_IN_FRUSTUM && bag->info->noFullClipChecks)) { + auto checkYesFrustumInClipYes = // cull all + frustumCull && frustumCheck == IN_FRUSTUM && bag->info->fullClipChecks; + + auto checkYesFrustumPartialClipYes = // pkgs, cull + clip + frustumCull && frustumCheck == PARTIALLY_IN_FRUSTUM && + bag->info->fullClipChecks; + + auto checkYesFrustumInClipNo = // cull all + frustumCull && frustumCheck == IN_FRUSTUM && !bag->info->fullClipChecks; + + auto checkYesFrustumPartialClipNo = // pkgs, cull all + frustumCull && frustumCheck == PARTIALLY_IN_FRUSTUM && + !bag->info->fullClipChecks; + + auto checkNoClipNo = // cull all + !frustumCull && !bag->info->fullClipChecks; + + if (checkYesFrustumInClipYes || checkYesFrustumInClipNo || checkNoClipNo) { u16 packagesCount = 0; auto biggerPkgs = packager.create(&packagesCount, bag, maxVertCount); Verbose("Material - in frustum. Pkgs: ", packagesCount, @@ -118,12 +141,13 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { qbufferRenderer.cull(buffer); } delete[] biggerPkgs; - } else if (frustumCheck == PARTIALLY_IN_FRUSTUM) { + } else if (checkYesFrustumPartialClipYes || checkYesFrustumPartialClipNo) { u16 packagesCount = 0; - if (bag->count >= maxVertCount * 2) { + auto doClip = checkYesFrustumPartialClipYes; + if (!doClip || bag->count >= maxVertCount * 2) { auto packages = packager.create(&packagesCount, bag, maxVertCount); Verbose("Material - partial. Packages: ", packagesCount); - renderPkgs(packages, packagesCount); + renderPkgs(packages, doClip, packagesCount); delete[] packages; } else { auto subpkgs = packager.create(&packagesCount, bag, maxVertCount / 3); @@ -133,7 +157,7 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { } } - if (!bbox) delete renderBbox; + if (frustumCull && !bbox) delete renderBbox; if (texBuffers) delete texBuffers; qbufferRenderer.flushBuffers(); @@ -141,14 +165,18 @@ void StaPipCore::render(StaPipBag* bag, StaPipBagPackagesBBox* bbox) { Verbose("Render finished"); } -void StaPipCore::renderPkgs(StaPipBagPackage* packages, u16 count) { +void StaPipCore::renderPkgs(StaPipBagPackage* packages, const bool& doClip, + u16 count) { for (u16 i = 0; i < count; i++) { - if (packages[i].isInFrustum == IN_FRUSTUM) { + auto cull = (doClip && packages[i].isInFrustum == IN_FRUSTUM) || !doClip; + auto doSubpkgs = doClip && packages[i].isInFrustum == PARTIALLY_IN_FRUSTUM; + + if (cull) { Verbose(i, " - package in frustum -> cull"); auto buffer = qbufferRenderer.getBuffer(); buffer->fillByPointer(packages[i]); qbufferRenderer.cull(buffer); - } else if (packages[i].isInFrustum == PARTIALLY_IN_FRUSTUM) { + } else if (doSubpkgs) { u16 subpkgsSize = 0; auto packages1By3 = packager.create(&subpkgsSize, packages[i], maxVertCount / 3); diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index 119aa15..c1fbf7c 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -9,6 +9,7 @@ */ #include "renderer/3d/pipeline/static/static_pipeline.hpp" +#include "debug/debug.hpp" namespace Tyra { @@ -27,20 +28,29 @@ void StaticPipeline::render(StaticMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); auto* infoBag = getInfoBag(mesh, options, &model); + auto frustumCulling = + options ? options->frustumCulling : PipelineFrustumCulling_Simple; + + TYRA_ASSERT( + !(frustumCulling != PipelineFrustumCulling_Precise && + infoBag->fullClipChecks == true), + "Full clip checks are only supported with frustum culling == Precise!"); + + if (frustumCulling == PipelineFrustumCulling_Simple) { + auto* frame = mesh->getFrame(); + if (frame->getBBox().isInFrustum( + rendererCore->renderer3D.frustumPlanes.getAll(), model) == + CoreBBoxFrustum::OUTSIDE_FRUSTUM) { + return; + } + } + if (options && options->lighting) setLightingColorsCache(options->lighting); for (u32 i = 0; i < mesh->getMaterialsCount(); i++) { auto* material = mesh->getMaterial(i); auto* materialFrame = material->getFrame(0); - // 2x bufory[maxVertCount*2] -> pętla po mniejszych częściach i czestsze - // rendery - - // TODO: Double buffering in future - // auto maxVertCount = core->renderer3D.getMaxVertCountByParams( - // material->isSingleColorActivated(), material->getNormalFaces(), - // material->getTextureCoordFaces()); - StaPipBag bag; addVertices(materialFrame, &bag); bag.info = infoBag; @@ -48,7 +58,7 @@ void StaticPipeline::render(StaticMesh* mesh, const StaPipOptions* options) { bag.texture = getTextureBag(material, materialFrame); bag.lighting = getLightingBag(materialFrame, &model, options); - core.render(&bag); + core.render(&bag, frustumCulling == PipelineFrustumCulling_Precise); deallocDrawBags(&bag, material); } @@ -71,12 +81,12 @@ PipelineInfoBag* StaticPipeline::getInfoBag(StaticMesh* mesh, result->antiAliasingEnabled = options->antiAliasingEnabled; result->blendingEnabled = options->blendingEnabled; result->shadingType = options->shadingType; - result->noFullClipChecks = options->noFullClipChecks; + result->fullClipChecks = options->fullClipChecks; } else { result->antiAliasingEnabled = false; result->blendingEnabled = true; result->shadingType = TyraShadingFlat; - result->noFullClipChecks = false; + result->fullClipChecks = false; } result->model = model; From 237066bfd4f4f31c8c92b4d5755622c78a48963f Mon Sep 17 00:00:00 2001 From: h4570 Date: Mon, 25 Jul 2022 21:00:33 +0200 Subject: [PATCH 33/33] finish of renderer refactor --- ROADMAP.txt | 4 -- .../3d/pipeline/dynamic/core/dynpip_core.hpp | 7 ++- .../pipeline/dynamic/core/dynpip_renderer.hpp | 6 ++- .../3d/pipeline/dynamic/dynamic_pipeline.hpp | 4 +- .../pipeline/minecraft/minecraft_pipeline.hpp | 3 +- .../programs/mcpip_programs_manager.hpp | 3 ++ .../3d/pipeline/renderer_3d_pipeline.hpp | 3 +- .../3d/pipeline/static/core/stapip_core.hpp | 3 ++ .../static/core/stapip_qbuffer_renderer.hpp | 6 ++- .../3d/pipeline/static/static_pipeline.hpp | 4 +- .../core/texture/texture_repository.hpp | 16 +++--- .../3d/pipeline/dynamic/core/dynpip_core.cpp | 4 +- .../pipeline/dynamic/core/dynpip_renderer.cpp | 36 +++++++------ .../3d/pipeline/dynamic/dynamic_pipeline.cpp | 35 +++++++----- .../pipeline/minecraft/minecraft_pipeline.cpp | 16 ++++-- .../programs/mcpip_programs_manager.cpp | 15 ++++-- .../static/core/stapip_qbuffer_renderer.cpp | 54 ++++++++++--------- .../3d/pipeline/static/static_pipeline.cpp | 18 +++++-- engine/src/renderer/3d/renderer_3d.cpp | 1 + .../core/texture/texture_repository.cpp | 20 +++++++ samples/h4570/src/h4570.cpp | 8 +-- samples/wellinator/src/wellinator.cpp | 4 +- 22 files changed, 176 insertions(+), 94 deletions(-) diff --git a/ROADMAP.txt b/ROADMAP.txt index eac4da5..f960a19 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,10 +1,6 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ --- H4570 -- [Renderer] Allocate dynamic pipeline memory only in "onUse" (core,qbuffrenderer,pipeline..) -- [Texture] Unload texture -- [Texture] Dont load loaded texture by name - - [Loaders] Think about ".tyrobj" format - implement it (add multicolor support) - [Loaders] DFF loader as static Mesh loader - [Game] Update intellisense from docker diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp index ffa127b..2e4dca0 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_core.hpp @@ -25,7 +25,7 @@ class DynPipCore { DynPipProgramsRepository repository; - void init(RendererCore* t_core, const u32& t_packetSize); + void init(RendererCore* t_core); /** Force starting VU1 program instead of continueing */ void clear() { qbufferRenderer.clearLastProgramName(); } @@ -52,6 +52,11 @@ class DynPipCore { */ void reinitVU1Programs(); + void allocateOnUse(const u32& t_packetSize) { + qbufferRenderer.allocateOnUse(t_packetSize); + } + void deallocateOnUse() { qbufferRenderer.deallocateOnUse(); } + private: M4x4 mvp; RendererCore* rendererCore; diff --git a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp index bb111c8..e5a33c6 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/core/dynpip_renderer.hpp @@ -21,8 +21,7 @@ class DynPipRenderer { DynPipRenderer(); ~DynPipRenderer(); - void init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo, - const u32& t_packetSize); + void init(RendererCore* t_core, DynPipProgramsRepository* t_programRepo); void reinitVU1(); @@ -35,6 +34,9 @@ class DynPipRenderer { const u16& getBufferSize() { return bufferSize; } + void allocateOnUse(const u32& t_packetSize); + void deallocateOnUse(); + private: void sendStaticData() const; void setProgramsCache(); diff --git a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp index ae1d64d..b77a604 100644 --- a/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/dynamic/dynamic_pipeline.hpp @@ -35,10 +35,12 @@ class DynamicPipeline : public Renderer3DPipeline { DynPipCore core; - void init(RendererCore* core); + void setRenderer(RendererCore* core); void onUse(); + void onUseEnd(); + /** * Render dynamic model. * This render() method is a bridge to core.render() method. diff --git a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp index 275b83f..dded51d 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/minecraft_pipeline.hpp @@ -29,9 +29,10 @@ class MinecraftPipeline : public Renderer3DPipeline { MinecraftPipeline(); ~MinecraftPipeline(); - void init(RendererCore* core); + void setRenderer(RendererCore* core); void onUse(); + void onUseEnd(); /** * @brief Render voxels diff --git a/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp b/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp index 2864a46..6dac5c4 100644 --- a/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp +++ b/engine/inc/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.hpp @@ -58,6 +58,9 @@ class BlockizerProgramsManager { const McpipBlockData& getBlockData() const { return singleTexBlockData; } + void allocateOnUse(); + void deallocateOnUse(); + private: McpipProgramsRepository repo; Renderer* renderer; diff --git a/engine/inc/renderer/3d/pipeline/renderer_3d_pipeline.hpp b/engine/inc/renderer/3d/pipeline/renderer_3d_pipeline.hpp index 7b9f3a6..d447c71 100644 --- a/engine/inc/renderer/3d/pipeline/renderer_3d_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/renderer_3d_pipeline.hpp @@ -19,8 +19,9 @@ class Renderer3DPipeline { Renderer3DPipeline() {} ~Renderer3DPipeline() {} - virtual void init(RendererCore* core) = 0; + virtual void setRenderer(RendererCore* core) = 0; virtual void onUse() = 0; + virtual void onUseEnd() = 0; }; } // namespace Tyra diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp index 0573b66..6c95766 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_core.hpp @@ -47,6 +47,9 @@ class StaPipCore { */ void reinitVU1Programs(); + void allocateOnUse() { qbufferRenderer.allocateOnUse(); } + void deallocateOnUse() { qbufferRenderer.deallocateOnUse(); } + private: u32 maxVertCount; RendererCore* rendererCore; diff --git a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp index 3b1201e..4db373e 100644 --- a/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp +++ b/engine/inc/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.hpp @@ -65,6 +65,9 @@ class StaPipQBufferRenderer { const u16& getBufferSize() { return bufferSize; } + void allocateOnUse(); + void deallocateOnUse(); + private: bool is1stDBufferFlushTime(); bool is2ndDBufferFlushTime(); @@ -74,6 +77,7 @@ class StaPipQBufferRenderer { void uploadPrograms(); void setDoubleBuffer(); u16 getQBufferIndex(StaPipQBuffer* buffer); + u16 qbuffersPacketSize; static const u16 buffersCount; @@ -88,7 +92,7 @@ class StaPipQBufferRenderer { packet2_t* programsPacket; packet2_t** packets; - StaPipVU1Program** programs; // dbuffer + StaPipVU1Program** dBufferPrograms; StaPipQBuffer** buffers; packet2_t* currentPacket; packet2_t* staticDataPacket; diff --git a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp index b5c3d50..1131bc0 100644 --- a/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp +++ b/engine/inc/renderer/3d/pipeline/static/static_pipeline.hpp @@ -35,10 +35,12 @@ class StaticPipeline : public Renderer3DPipeline { StaPipCore core; - void init(RendererCore* core); + void setRenderer(RendererCore* core); void onUse(); + void onUseEnd(); + /** * Render static model * This render() method is a bridge to core.render() method. diff --git a/engine/inc/renderer/core/texture/texture_repository.hpp b/engine/inc/renderer/core/texture/texture_repository.hpp index 0382337..e4a7ed5 100644 --- a/engine/inc/renderer/core/texture/texture_repository.hpp +++ b/engine/inc/renderer/core/texture/texture_repository.hpp @@ -95,19 +95,19 @@ class TextureRepository { * Remove texture from repository. * Texture is NOT destructed. */ - void removeByIndex(const u32& t_index) { - textures.erase(textures.begin() + t_index); - } + void removeByIndex(const u32& t_index); /** * Remove texture from repository. * Texture is NOT destructed. */ - const void removeById(const u32& t_texId) { - s32 index = getIndexOf(t_texId); - TYRA_ASSERT(index != -1, "Cant remove texture, because it was not found!"); - removeByIndex(index); - } + void removeById(const u32& t_texId); + + /** + * Remove texture from repository. + * Texture IS destructed. + */ + void free(const u32& t_texId); private: std::vector textures; diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp index df289f3..5ee7f90 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_core.cpp @@ -19,9 +19,9 @@ DynPipCore::DynPipCore() {} DynPipCore::~DynPipCore() {} -void DynPipCore::init(RendererCore* t_core, const u32& t_packetSize) { +void DynPipCore::init(RendererCore* t_core) { rendererCore = t_core; - qbufferRenderer.init(t_core, &repository, t_packetSize); + qbufferRenderer.init(t_core, &repository); } void DynPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); } diff --git a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp index 2ddc43f..760290f 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/core/dynpip_renderer.cpp @@ -18,23 +18,34 @@ DynPipRenderer::DynPipRenderer() { context = 0; bufferSize = 0; lastProgramName = DynPipProgramName::DynPipUndefinedProgram; - staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + programsPacket = nullptr; } DynPipRenderer::~DynPipRenderer() { - packet2_free(packets[0]); - packet2_free(packets[1]); - packet2_free(staticDataPacket); - packet2_free(objectDataPacket); - if (programsPacket) packet2_free(programsPacket); } +void DynPipRenderer::allocateOnUse(const u32& t_packetSize) { + staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + + for (u16 i = 0; i < 2; i++) + packets[i] = + packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + + sendStaticData(); +} + +void DynPipRenderer::deallocateOnUse() { + packet2_free(staticDataPacket); + packet2_free(objectDataPacket); + + for (u16 i = 0; i < 2; i++) packet2_free(packets[i]); +} + void DynPipRenderer::init(RendererCore* t_core, - DynPipProgramsRepository* t_programRepo, - const u32& t_packetSize) { + DynPipProgramsRepository* t_programRepo) { path1 = t_core->getPath1(); rendererCore = t_core; programsRepo = t_programRepo; @@ -42,12 +53,6 @@ void DynPipRenderer::init(RendererCore* t_core, dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0); dma_channel_fast_waits(DMA_CHANNEL_VIF1); - packets[0] = - packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - - packets[1] = - packet2_create(t_packetSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - setProgramsCache(); reinitVU1(); @@ -56,7 +61,6 @@ void DynPipRenderer::init(RendererCore* t_core, } void DynPipRenderer::reinitVU1() { - sendStaticData(); uploadPrograms(); setDoubleBuffer(); } diff --git a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp index c40dc2e..1ec4de8 100644 --- a/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/dynamic/dynamic_pipeline.cpp @@ -15,25 +15,36 @@ namespace Tyra { const u32 DynamicPipeline::buffersCount = 64; const u32 DynamicPipeline::halfBuffersCount = buffersCount / 2; -DynamicPipeline::DynamicPipeline() { - colorsCache = new Vec4[4]; - buffers = new DynPipBag[buffersCount]; -} +DynamicPipeline::DynamicPipeline() {} -DynamicPipeline::~DynamicPipeline() { - delete[] colorsCache; - for (u32 i = 0; i < buffersCount; i++) freeBuffer(&buffers[i]); - delete[] buffers; -} +DynamicPipeline::~DynamicPipeline() {} -void DynamicPipeline::init(RendererCore* t_core) { +void DynamicPipeline::setRenderer(RendererCore* t_core) { rendererCore = t_core; + + core.init(t_core); +} + +void DynamicPipeline::onUse() { + colorsCache = new Vec4[4]; + + buffers = new DynPipBag[buffersCount]; + auto packetSize = buffersCount * 5.1F; // 5.1 = packet2_get_qw_count / buffersCount - core.init(t_core, static_cast(packetSize)); + + core.allocateOnUse(static_cast(packetSize)); + core.reinitVU1Programs(); } -void DynamicPipeline::onUse() { core.reinitVU1Programs(); } +void DynamicPipeline::onUseEnd() { + delete[] colorsCache; + + for (u32 i = 0; i < buffersCount; i++) freeBuffer(&buffers[i]); + delete[] buffers; + + core.deallocateOnUse(); +} void DynamicPipeline::render(DynamicMesh* mesh, const DynPipOptions* options) { auto model = mesh->getModelMatrix(); diff --git a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp index 4cca364..49ab140 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/minecraft_pipeline.cpp @@ -17,8 +17,6 @@ namespace Tyra { MinecraftPipeline::MinecraftPipeline() { latestMode = UndefinedMcpipProgram; spamBuffersCount = 4; - spamBuffers = new McpipBlock**[spamBuffersCount]; - spamCounts = new u32[spamBuffersCount]; spammerIndex = 0; } @@ -26,11 +24,9 @@ MinecraftPipeline::~MinecraftPipeline() { if (bbox) { delete bbox; } - delete[] spamBuffers; - delete[] spamCounts; } -void MinecraftPipeline::init(RendererCore* core) { +void MinecraftPipeline::setRenderer(RendererCore* core) { rendererCore = core; manager.init(core); @@ -38,11 +34,21 @@ void MinecraftPipeline::init(RendererCore* core) { } void MinecraftPipeline::onUse() { + spamBuffers = new McpipBlock**[spamBuffersCount]; + spamCounts = new u32[spamBuffersCount]; + manager.allocateOnUse(); + manager.uploadVU1Programs(); changeMode(McPipCull, true); } +void MinecraftPipeline::onUseEnd() { + delete[] spamBuffers; + delete[] spamCounts; + manager.deallocateOnUse(); +} + void MinecraftPipeline::initBBox() { const auto& block = manager.getBlockData(); bbox = new RenderBBox(block.vertices, block.count); diff --git a/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp b/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp index 7e6c95b..69e5632 100644 --- a/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp +++ b/engine/src/renderer/3d/pipeline/minecraft/programs/mcpip_programs_manager.cpp @@ -16,16 +16,23 @@ BlockizerProgramsManager::BlockizerProgramsManager() { lastProgramName = UndefinedMcpipProgram; context = 0; vu1BlockData = BlockNotUploaded; - dynamicPackets[0] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - dynamicPackets[1] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - staticPacket = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + setProgramsCache(); } -BlockizerProgramsManager::~BlockizerProgramsManager() { +void BlockizerProgramsManager::allocateOnUse() { + dynamicPackets[0] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + dynamicPackets[1] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + staticPacket = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); +} + +void BlockizerProgramsManager::deallocateOnUse() { packet2_free(dynamicPackets[0]); packet2_free(dynamicPackets[1]); packet2_free(staticPacket); +} + +BlockizerProgramsManager::~BlockizerProgramsManager() { packet2_free(programsPacket); } diff --git a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp index 10e4a01..4c9eb45 100644 --- a/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp +++ b/engine/src/renderer/3d/pipeline/static/core/stapip_qbuffer_renderer.cpp @@ -42,38 +42,43 @@ StaPipQBufferRenderer::StaPipQBufferRenderer() { context = 0; lastProgramName = StaPipUndefinedProgram; - u32 qbuffersPacketSize = 4 * buffersCount; - - packets = new packet2_t*[buffersCount]; - packets[0] = - packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - packets[1] = - packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); + qbuffersPacketSize = 4 * buffersCount; + programsPacket = nullptr; +} +void StaPipQBufferRenderer::allocateOnUse() { staticDataPacket = packet2_create(3, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); objectDataPacket = packet2_create(16, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); - programsPacket = nullptr; + packets = new packet2_t*[buffersCount]; + for (u16 i = 0; i < 2; i++) + packets[i] = + packet2_create(qbuffersPacketSize, P2_TYPE_NORMAL, P2_MODE_CHAIN, true); buffers = new StaPipQBuffer*[buffersCount]; - programs = new StaPipVU1Program*[buffersCount]; for (u16 i = 0; i < buffersCount; i++) { buffers[i] = new StaPipQBuffer(); } + + dBufferPrograms = new StaPipVU1Program*[buffersCount]; + + sendStaticData(); } -StaPipQBufferRenderer::~StaPipQBufferRenderer() { + +void StaPipQBufferRenderer::deallocateOnUse() { packet2_free(staticDataPacket); packet2_free(objectDataPacket); - packet2_free(packets[0]); - packet2_free(packets[1]); - - for (u16 i = 0; i < buffersCount; i++) { - delete buffers[i]; - } + for (u16 i = 0; i < 2; i++) packet2_free(packets[i]); delete[] packets; + + for (u16 i = 0; i < buffersCount; i++) delete buffers[i]; delete[] buffers; + delete[] dBufferPrograms; +} + +StaPipQBufferRenderer::~StaPipQBufferRenderer() { if (programsPacket) packet2_free(programsPacket); } @@ -93,7 +98,6 @@ void StaPipQBufferRenderer::init(RendererCore* t_core) { } void StaPipQBufferRenderer::reinitVU1() { - sendStaticData(); uploadPrograms(); setDoubleBuffer(); } @@ -239,7 +243,7 @@ void StaPipQBufferRenderer::cull(StaPipQBuffer* buffer) { return; } - programs[getQBufferIndex(buffer)] = getCullProgramByBag(buffer->bag); + dBufferPrograms[getQBufferIndex(buffer)] = getCullProgramByBag(buffer->bag); auto is1stDBuffer = is1stDBufferFlushTime(); auto is2ndDBuffer = is2ndDBufferFlushTime(); @@ -256,7 +260,7 @@ void StaPipQBufferRenderer::clip(StaPipQBuffer* buffer) { return; } - programs[getQBufferIndex(buffer)] = getAsIsProgramByBag(buffer->bag); + dBufferPrograms[getQBufferIndex(buffer)] = getAsIsProgramByBag(buffer->bag); clipper.clip(buffer); @@ -282,13 +286,13 @@ void StaPipQBufferRenderer::addBufferDataToPacket(StaPipQBuffer** buffers, for (u32 i = 0; i < count; i++) { if (!buffers[i]->any()) continue; - programs[i]->addBufferDataToPacket(currentPacket, buffers[i], - &rendererCore->gs.prim); + dBufferPrograms[i]->addBufferDataToPacket(currentPacket, buffers[i], + &rendererCore->gs.prim); - if (lastProgramName != programs[i]->getName()) { - packet2_utils_vu_add_start_program(currentPacket, - programs[i]->getDestinationAddress()); - lastProgramName = programs[i]->getName(); + if (lastProgramName != dBufferPrograms[i]->getName()) { + packet2_utils_vu_add_start_program( + currentPacket, dBufferPrograms[i]->getDestinationAddress()); + lastProgramName = dBufferPrograms[i]->getName(); } else { packet2_utils_vu_add_continue_program(currentPacket); } diff --git a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp index c1fbf7c..34b93e6 100644 --- a/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp +++ b/engine/src/renderer/3d/pipeline/static/static_pipeline.cpp @@ -13,16 +13,26 @@ namespace Tyra { -StaticPipeline::StaticPipeline() { colorsCache = new Vec4[4]; } +StaticPipeline::StaticPipeline() {} -StaticPipeline::~StaticPipeline() { delete[] colorsCache; } +StaticPipeline::~StaticPipeline() {} -void StaticPipeline::init(RendererCore* t_core) { +void StaticPipeline::setRenderer(RendererCore* t_core) { rendererCore = t_core; core.init(t_core); } -void StaticPipeline::onUse() { core.reinitVU1Programs(); } +void StaticPipeline::onUse() { + colorsCache = new Vec4[4]; + core.allocateOnUse(); + core.reinitVU1Programs(); +} + +void StaticPipeline::onUseEnd() { + delete[] colorsCache; + + core.deallocateOnUse(); +} void StaticPipeline::render(StaticMesh* mesh, const StaPipOptions* options) { auto model = mesh->getModelMatrix(); diff --git a/engine/src/renderer/3d/renderer_3d.cpp b/engine/src/renderer/3d/renderer_3d.cpp index f9352f7..2ffb4b8 100644 --- a/engine/src/renderer/3d/renderer_3d.cpp +++ b/engine/src/renderer/3d/renderer_3d.cpp @@ -19,6 +19,7 @@ Renderer3D::~Renderer3D() {} void Renderer3D::usePipeline(Renderer3DPipeline* pipeline) { if (currentPipeline != pipeline) { + if (currentPipeline) currentPipeline->onUseEnd(); currentPipeline = pipeline; currentPipeline->onUse(); } diff --git a/engine/src/renderer/core/texture/texture_repository.cpp b/engine/src/renderer/core/texture/texture_repository.cpp index 63ec8a1..06539e7 100644 --- a/engine/src/renderer/core/texture/texture_repository.cpp +++ b/engine/src/renderer/core/texture/texture_repository.cpp @@ -46,6 +46,26 @@ Texture* TextureRepository::add(Texture* texture) { return texture; } +void TextureRepository::removeByIndex(const u32& t_index) { + textures.erase(textures.begin() + t_index); +} + +void TextureRepository::removeById(const u32& t_texId) { + s32 index = getIndexOf(t_texId); + TYRA_ASSERT(index != -1, "Cant remove texture, because it was not found!"); + removeByIndex(index); +} + +void TextureRepository::free(const u32& t_texId) { + s32 index = getIndexOf(t_texId); + auto* tex = textures[index]; + + TYRA_ASSERT(index != -1, "Cant remove texture, because it was not found!"); + removeByIndex(index); + + delete tex; +} + Texture* TextureRepository::add(const char* fullpath) { TextureLoader& loader = texLoaderSelector.getLoaderByFileName(fullpath); diff --git a/samples/h4570/src/h4570.cpp b/samples/h4570/src/h4570.cpp index 5cbce43..f89589a 100644 --- a/samples/h4570/src/h4570.cpp +++ b/samples/h4570/src/h4570.cpp @@ -76,9 +76,9 @@ void H4570::init() { blocksTex = engine->renderer.core.texture.repository.add( FileUtils::fromCwd("blocks.png")); - mcPip.init(&engine->renderer.core); - dynpip.init(&engine->renderer.core); - stapip.init(&engine->renderer.core); + mcPip.setRenderer(&engine->renderer.core); + dynpip.setRenderer(&engine->renderer.core); + stapip.setRenderer(&engine->renderer.core); picture = get2DPicture(&engine->renderer); @@ -121,7 +121,7 @@ u32 counter = 0; void H4570::loop() { if (counter++ > 30) { - TYRA_LOG(engine->info.getFps()); + // TYRA_LOG(engine->info.getFps()); counter = 0; } diff --git a/samples/wellinator/src/wellinator.cpp b/samples/wellinator/src/wellinator.cpp index 3658058..4673a8e 100644 --- a/samples/wellinator/src/wellinator.cpp +++ b/samples/wellinator/src/wellinator.cpp @@ -41,8 +41,8 @@ void Wellinator::init() { blocksTex = engine->renderer.core.texture.repository.add( FileUtils::fromCwd("blocks.png")); - mcPip.init(&engine->renderer.core); - stapip.init(&engine->renderer.core); + mcPip.setRenderer(&engine->renderer.core); + stapip.setRenderer(&engine->renderer.core); picture = get2DPicture(&engine->renderer);