Add GEVulkanMeshSceneNode and GEVulkanAnimatedMeshSceneNode

This commit is contained in:
Benau 2022-07-17 16:06:52 +08:00
parent fc7413800c
commit 5853d618a6
7 changed files with 161 additions and 0 deletions

View File

@ -28,6 +28,7 @@ set(GE_SOURCES
src/ge_dx9_texture.cpp
src/ge_vma.cpp
src/ge_vulkan_2d_renderer.cpp
src/ge_vulkan_animated_mesh_scene_node.cpp
src/ge_vulkan_camera_scene_node.cpp
src/ge_vulkan_command_loader.cpp
src/ge_vulkan_depth_texture.cpp
@ -35,6 +36,7 @@ set(GE_SOURCES
src/ge_vulkan_dynamic_buffer.cpp
src/ge_vulkan_features.cpp
src/ge_vulkan_mesh_cache.cpp
src/ge_vulkan_mesh_scene_node.cpp
src/ge_vulkan_scene_manager.cpp
src/ge_vulkan_shader_manager.cpp
src/ge_vulkan_texture.cpp

View File

@ -23,6 +23,21 @@ public:
const irr::core::vector3df& position = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& lookat = irr::core::vector3df(0, 0, 100),
irr::s32 id = -1, bool make_active = true);
// ------------------------------------------------------------------------
virtual irr::scene::IAnimatedMeshSceneNode* addAnimatedMeshSceneNode(
irr::scene::IAnimatedMesh* mesh, irr::scene::ISceneNode* parent = NULL,
irr::s32 id = -1,
const irr::core::vector3df& position = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& rotation = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f),
bool alsoAddIfMeshPointerZero = false);
// ------------------------------------------------------------------------
virtual irr::scene::IMeshSceneNode* addMeshSceneNode(irr::scene::IMesh* mesh,
irr::scene::ISceneNode* parent = NULL, irr::s32 id = -1,
const irr::core::vector3df& position = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& rotation = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f),
bool alsoAddIfMeshPointerZero = false);
}; // GEVulkanSceneManager
}

View File

@ -0,0 +1,23 @@
#include "ge_vulkan_animated_mesh_scene_node.hpp"
#include "ge_spm.hpp"
namespace GE
{
GEVulkanAnimatedMeshSceneNode::GEVulkanAnimatedMeshSceneNode(irr::scene::IAnimatedMesh* mesh,
irr::scene::ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id,
const irr::core::vector3df& position,
const irr::core::vector3df& rotation,
const irr::core::vector3df& scale)
: irr::scene::CAnimatedMeshSceneNode(mesh, parent, mgr, id, position,
rotation, scale)
{
} // GEVulkanAnimatedMeshSceneNode
// ----------------------------------------------------------------------------
GESPM* GEVulkanAnimatedMeshSceneNode::getSPM() const
{
return static_cast<GESPM*>(Mesh);
} // getSPM
}

View File

@ -0,0 +1,25 @@
#ifndef HEADER_GE_VULKAN_ANIMATED_MESH_SCENE_NODE_HPP
#define HEADER_GE_VULKAN_ANIMATED_MESH_SCENE_NODE_HPP
#include "../source/Irrlicht/CAnimatedMeshSceneNode.h"
namespace GE
{
class GESPM;
class GEVulkanAnimatedMeshSceneNode : public irr::scene::CAnimatedMeshSceneNode
{
public:
// ------------------------------------------------------------------------
GEVulkanAnimatedMeshSceneNode(irr::scene::IAnimatedMesh* mesh,
irr::scene::ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id,
const irr::core::vector3df& position = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& rotation = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f));
// ------------------------------------------------------------------------
GESPM* getSPM() const;
}; // GEVulkanAnimatedMeshSceneNode
}
#endif

View File

@ -0,0 +1,23 @@
#include "ge_vulkan_mesh_scene_node.hpp"
#include "ge_spm.hpp"
namespace GE
{
GEVulkanMeshSceneNode::GEVulkanMeshSceneNode(irr::scene::IMesh* mesh,
irr::scene::ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id,
const irr::core::vector3df& position,
const irr::core::vector3df& rotation,
const irr::core::vector3df& scale)
: irr::scene::CMeshSceneNode(mesh, parent, mgr, id, position, rotation,
scale)
{
} // GEVulkanMeshSceneNode
// ----------------------------------------------------------------------------
GESPM* GEVulkanMeshSceneNode::getSPM() const
{
return static_cast<GESPM*>(Mesh);
} // getSPM
}

View File

@ -0,0 +1,25 @@
#ifndef HEADER_GE_VULKAN_MESH_SCENE_NODE_HPP
#define HEADER_GE_VULKAN_MESH_SCENE_NODE_HPP
#include "../source/Irrlicht/CMeshSceneNode.h"
namespace GE
{
class GESPM;
class GEVulkanMeshSceneNode : public irr::scene::CMeshSceneNode
{
public:
// ------------------------------------------------------------------------
GEVulkanMeshSceneNode(irr::scene::IMesh* mesh,
irr::scene::ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id,
const irr::core::vector3df& position = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& rotation = irr::core::vector3df(0, 0, 0),
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f));
// ------------------------------------------------------------------------
GESPM* getSPM() const;
}; // GEVulkanMeshSceneNode
}
#endif

View File

@ -1,7 +1,10 @@
#include "ge_vulkan_scene_manager.hpp"
#include "ge_spm.hpp"
#include "ge_vulkan_animated_mesh_scene_node.hpp"
#include "ge_vulkan_camera_scene_node.hpp"
#include "ge_vulkan_mesh_cache.hpp"
#include "ge_vulkan_mesh_scene_node.hpp"
namespace GE
{
@ -42,4 +45,49 @@ irr::scene::ICameraSceneNode* GEVulkanSceneManager::addCameraSceneNode(
return node;
} // addCameraSceneNode
// ----------------------------------------------------------------------------
irr::scene::IAnimatedMeshSceneNode* GEVulkanSceneManager::addAnimatedMeshSceneNode(
irr::scene::IAnimatedMesh* mesh, irr::scene::ISceneNode* parent,
irr::s32 id,
const irr::core::vector3df& position,
const irr::core::vector3df& rotation,
const irr::core::vector3df& scale,
bool alsoAddIfMeshPointerZero)
{
if (!alsoAddIfMeshPointerZero && (!mesh || !dynamic_cast<GESPM*>(mesh)))
return NULL;
if (!parent)
parent = this;
irr::scene::IAnimatedMeshSceneNode* node =
new GEVulkanAnimatedMeshSceneNode(mesh, parent, this, id, position,
rotation, scale);
node->drop();
node->setMesh(mesh);
return node;
} // addAnimatedMeshSceneNode
// ----------------------------------------------------------------------------
irr::scene::IMeshSceneNode* GEVulkanSceneManager::addMeshSceneNode(
irr::scene::IMesh* mesh,
irr::scene::ISceneNode* parent, irr::s32 id,
const irr::core::vector3df& position,
const irr::core::vector3df& rotation,
const irr::core::vector3df& scale,
bool alsoAddIfMeshPointerZero)
{
if (!alsoAddIfMeshPointerZero && (!mesh || !dynamic_cast<GESPM*>(mesh)))
return NULL;
if (!parent)
parent = this;
irr::scene::IMeshSceneNode* node =
new GEVulkanMeshSceneNode(mesh, parent, this, id, position, rotation,
scale);
node->drop();
return node;
} // addMeshSceneNode
}