Implemented API for model node creation.
hello_cube smoke test now adds a model node and assigns the built-in cube model
This commit is contained in:
@@ -190,8 +190,8 @@ KrResult KRSurface::createSwapChain()
|
||||
RenderPassInfo info{};
|
||||
info.finalPass = false;
|
||||
|
||||
// info.type = RenderPassType::RENDER_PASS_PRESTREAM;
|
||||
// m_renderGraph->addRenderPass(*device, info);
|
||||
info.type = RenderPassType::RENDER_PASS_PRESTREAM;
|
||||
m_renderGraph->addRenderPass(*device, info);
|
||||
|
||||
for (int shadow_index = 0; shadow_index < shadow_buffer_count; shadow_index++) {
|
||||
info.depthAttachment.id = attachment_shadow_cascades[shadow_index];
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
|
||||
void render(RenderInfo& ri);
|
||||
void render(RenderInfo& ri) override;
|
||||
|
||||
std::string getZone();
|
||||
void setZone(const std::string& zone);
|
||||
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
virtual void physicsUpdate(float deltaTime);
|
||||
|
||||
void render(RenderInfo& ri);
|
||||
void render(RenderInfo& ri) override;
|
||||
|
||||
// ---- Audio Playback Controls ----
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
void render(RenderInfo& ri);
|
||||
void render(RenderInfo& ri) override;
|
||||
|
||||
void setBindPose(const hydra::Matrix4& pose);
|
||||
const hydra::Matrix4& getBindPose();
|
||||
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
float getAudioOcclusion();
|
||||
void setAudioOcclusion(float audio_occlusion);
|
||||
|
||||
void render(RenderInfo& ri);
|
||||
void render(RenderInfo& ri) override;
|
||||
|
||||
private:
|
||||
KRMesh* m_model;
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
hydra::Vector3 getLocalLightDirection();
|
||||
hydra::Vector3 getWorldLightDirection();
|
||||
|
||||
virtual void render(RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
void setFlareOcclusionSize(float occlusion_size);
|
||||
void deleteBuffers();
|
||||
|
||||
virtual void render(RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
|
||||
int getShadowBufferCount();
|
||||
int* getShadowTextures();
|
||||
|
||||
@@ -44,9 +44,9 @@ void KRModel::InitNodeInfo(KrNodeInfo* nodeInfo)
|
||||
{
|
||||
KRNode::InitNodeInfo(nodeInfo);
|
||||
nodeInfo->model.faces_camera = false;
|
||||
nodeInfo->model.light_map_texture = -1;
|
||||
nodeInfo->model.light_map_texture = KR_NULL_HANDLE;
|
||||
nodeInfo->model.lod_min_coverage = 0.0f;
|
||||
nodeInfo->model.mesh = -1;
|
||||
nodeInfo->model.mesh = KR_NULL_HANDLE;
|
||||
nodeInfo->model.receives_shadow = true;
|
||||
nodeInfo->model.rim_color = Vector3::Zero();
|
||||
nodeInfo->model.rim_power = 0.0f;
|
||||
@@ -114,6 +114,50 @@ KRModel::~KRModel()
|
||||
|
||||
}
|
||||
|
||||
KrResult KRModel::update(const KrNodeInfo* nodeInfo)
|
||||
{
|
||||
KrResult res = KRNode::update(nodeInfo);
|
||||
if (res != KR_SUCCESS) {
|
||||
return res;
|
||||
}
|
||||
m_faces_camera = nodeInfo->model.faces_camera;
|
||||
m_min_lod_coverage = nodeInfo->model.lod_min_coverage;
|
||||
m_receivesShadow = nodeInfo->model.receives_shadow;
|
||||
m_rim_color = nodeInfo->model.rim_color;
|
||||
m_rim_power = nodeInfo->model.rim_power;
|
||||
|
||||
KRTexture* light_map_texture = nullptr;
|
||||
if (nodeInfo->model.light_map_texture != KR_NULL_HANDLE) {
|
||||
res = m_pContext->getMappedResource<KRTexture>(nodeInfo->model.light_map_texture, &light_map_texture);
|
||||
if (res != KR_SUCCESS) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
m_pLightMap = light_map_texture;
|
||||
if (m_pLightMap) {
|
||||
m_lightMap = m_pLightMap->getName();
|
||||
} else {
|
||||
m_lightMap = "";
|
||||
}
|
||||
|
||||
KRMesh* mesh = nullptr;
|
||||
if (nodeInfo->model.mesh != KR_NULL_HANDLE) {
|
||||
res = m_pContext->getMappedResource<KRMesh>(nodeInfo->model.mesh, &mesh);
|
||||
if (res != KR_SUCCESS) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
if (mesh != nullptr) {
|
||||
m_models.clear();
|
||||
m_model_name = mesh->getName();
|
||||
} else {
|
||||
m_models.clear();
|
||||
m_model_name = "";
|
||||
}
|
||||
|
||||
return KR_SUCCESS;
|
||||
}
|
||||
|
||||
std::string KRModel::getElementName()
|
||||
{
|
||||
return "model";
|
||||
@@ -197,7 +241,6 @@ void KRModel::loadModel()
|
||||
|
||||
void KRModel::render(KRNode::RenderInfo& ri)
|
||||
{
|
||||
|
||||
if (m_lod_visible >= LOD_VISIBILITY_PRESTREAM && ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
|
||||
preStream(*ri.viewport);
|
||||
}
|
||||
|
||||
@@ -52,11 +52,13 @@ public:
|
||||
KRModel(KRScene& scene, std::string name);
|
||||
KRModel(KRScene& scene, std::string instance_name, std::string model_name, std::string light_map, float lod_min_coverage, bool receives_shadow, bool faces_camera, hydra::Vector3 rim_color = hydra::Vector3::Zero(), float rim_power = 0.0f);
|
||||
virtual ~KRModel();
|
||||
|
||||
KrResult update(const KrNodeInfo* nodeInfo) override;
|
||||
|
||||
virtual std::string getElementName();
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
|
||||
virtual void render(KRNode::RenderInfo& ri);
|
||||
virtual void render(KRNode::RenderInfo& ri) override;
|
||||
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
|
||||
@@ -677,7 +677,7 @@ KRNode* KRNode::LoadXML(KRScene& scene, tinyxml2::XMLElement* e)
|
||||
return new_node;
|
||||
}
|
||||
|
||||
void KRNode::render(const RenderInfo& ri)
|
||||
void KRNode::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ public:
|
||||
|
||||
KRScene& getScene();
|
||||
|
||||
virtual void render(const RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri);
|
||||
|
||||
virtual void physicsUpdate(float deltaTime);
|
||||
virtual bool hasPhysics();
|
||||
|
||||
@@ -38,13 +38,13 @@ class KRParticleSystem : public KRNode
|
||||
public:
|
||||
virtual ~KRParticleSystem();
|
||||
|
||||
virtual std::string getElementName() = 0;
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
virtual std::string getElementName() override = 0;
|
||||
virtual void loadXML(tinyxml2::XMLElement* e) override;
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent) override;
|
||||
|
||||
virtual hydra::AABB getBounds() = 0;
|
||||
virtual hydra::AABB getBounds() override = 0;
|
||||
|
||||
virtual void render(RenderInfo& ri) = 0;
|
||||
virtual void render(RenderInfo& ri) override = 0;
|
||||
|
||||
protected:
|
||||
KRParticleSystem(KRScene& scene, std::string name);
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
virtual void render(RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
|
||||
|
||||
virtual void physicsUpdate(float deltaTime);
|
||||
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
virtual std::string getElementName();
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
virtual void render(RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
|
||||
private:
|
||||
void generateMesh();
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
|
||||
void render(RenderInfo& ri);
|
||||
void render(RenderInfo& ri) override;
|
||||
|
||||
std::string getZone();
|
||||
void setZone(const std::string& zone);
|
||||
|
||||
@@ -43,17 +43,17 @@ public:
|
||||
KRSprite(KRScene& scene, std::string name);
|
||||
|
||||
virtual ~KRSprite();
|
||||
virtual std::string getElementName();
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
virtual void loadXML(tinyxml2::XMLElement* e);
|
||||
virtual std::string getElementName() override;
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent) override;
|
||||
virtual void loadXML(tinyxml2::XMLElement* e) override;
|
||||
|
||||
void setSpriteTexture(std::string sprite_texture);
|
||||
void setSpriteAlpha(float alpha);
|
||||
float getSpriteAlpha() const;
|
||||
|
||||
virtual void render(RenderInfo& ri);
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
|
||||
virtual hydra::AABB getBounds();
|
||||
virtual hydra::AABB getBounds() override;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -37,12 +37,14 @@ bool smoke_load()
|
||||
enum
|
||||
{
|
||||
kSceneResourceHandle = 10,
|
||||
kSkyboxTextureResourceHandle
|
||||
kSkyboxTextureResourceHandle,
|
||||
kCubeMeshResourceHandle
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
kCameraNodeHandle = 10
|
||||
kCameraNodeHandle = 10,
|
||||
kCubeNodeHandle = 11
|
||||
};
|
||||
|
||||
KrLoadResourceInfo load_resource_info = {};
|
||||
@@ -63,6 +65,12 @@ bool smoke_load()
|
||||
KrResult res = KrMapResource(&map_skybox_resource);
|
||||
assert(res == KR_SUCCESS);
|
||||
*/
|
||||
|
||||
KrMapResourceInfo map_cube_mesh_resource = { KR_STRUCTURE_TYPE_MAP_RESOURCE };
|
||||
map_cube_mesh_resource.pResourceName = "__cube";
|
||||
map_cube_mesh_resource.resourceHandle = kCubeMeshResourceHandle;
|
||||
res = KrMapResource(&map_cube_mesh_resource);
|
||||
assert(res == KR_SUCCESS);
|
||||
|
||||
// Create a scene
|
||||
KrCreateSceneInfo create_scene_info = { KR_STRUCTURE_TYPE_CREATE_SCENE };
|
||||
@@ -85,5 +93,18 @@ bool smoke_load()
|
||||
res = KrCreateNode(&create_camera_info);
|
||||
assert(res == KR_SUCCESS);
|
||||
|
||||
// Add a cube to the scene
|
||||
KrCreateNodeInfo create_cube_info = { KR_STRUCTURE_TYPE_CREATE_NODE };
|
||||
res = KrInitNodeInfo(&create_cube_info.node, KR_STRUCTURE_TYPE_NODE_MODEL);
|
||||
assert(res == KR_SUCCESS);
|
||||
create_cube_info.relativeNodeHandle = KR_NULL_HANDLE;
|
||||
create_cube_info.location = KR_SCENE_NODE_APPEND_CHILD;
|
||||
create_cube_info.newNodeHandle = kCubeNodeHandle;
|
||||
create_cube_info.sceneHandle = kSceneResourceHandle;
|
||||
create_cube_info.node.pName = "my_cube";
|
||||
create_cube_info.node.model.mesh = kCubeMeshResourceHandle;
|
||||
res = KrCreateNode(&create_cube_info);
|
||||
assert(res == KR_SUCCESS);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user