Skip to content

Commit

Permalink
Zephyr: Renderer: stub out some basic geometry data structure and mes…
Browse files Browse the repository at this point in the history
…h component
  • Loading branch information
fleroviux committed Apr 30, 2024
1 parent e01cc04 commit 54f990b
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 12 deletions.
Empty file added app/.gitkeep
Empty file.
55 changes: 50 additions & 5 deletions app/next/src/main_window.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

#include <zephyr/renderer/backend/render_backend_ogl.hpp>
#include <zephyr/renderer/backend/render_backend_vk.hpp>
#include <zephyr/renderer/component/mesh.hpp>

#include "main_window.hpp"

Expand Down Expand Up @@ -112,16 +113,60 @@ namespace zephyr {
void MainWindow::CreateScene() {
m_scene_root = std::make_unique<SceneNode>();

//std::shared_ptr<Material> pbr_material = std::make_shared<Material>(std::make_shared<PBRMaterialShader>());
/**
* 4-------5
* /| /|
* 0-------1 |
* | 6-----|-7
* |/ |/
* 2-------3
*/
std::shared_ptr<Geometry> cube_geometry = std::make_shared<Geometry>();
cube_geometry->m_positions = {
// front face
/*0*/ -1.0, -1.0, 1.0,
/*1*/ 1.0, -1.0, 1.0,
/*2*/ -1.0, 1.0, 1.0,
/*3*/ 1.0, 1.0, 1.0,

// back face
/*4*/ -1.0, -1.0, -1.0,
/*5*/ 1.0, -1.0, -1.0,
/*6*/ -1.0, 1.0, -1.0,
/*7*/ 1.0, 1.0, -1.0,
};
cube_geometry->m_indices = {
// front
0, 1, 2,
1, 3, 2,

// back
4, 5, 6,
5, 7, 6,

// left
0, 4, 6,
0, 6, 2,

// right
1, 5, 7,
1, 7, 3,

// top
4, 1, 0,
4, 5, 1,

// bottom
6, 3, 2,
6, 7, 3
};

SceneNode* cube_a = m_scene_root->CreateChild("Cube A");
//cube_a->CreateComponent<MeshComponent>(m_cube_mesh, pbr_material);
cube_a->CreateComponent<MeshComponent>();
cube_a->CreateComponent<MeshComponent>(cube_geometry);
cube_a->GetTransform().GetPosition() = Vector3{0.0f, 0.0f, -5.0f};

SceneNode* cube_b = cube_a->CreateChild("Cube B");
//cube_b->CreateComponent<MeshComponent>(m_cube_mesh, pbr_material);
cube_b->CreateComponent<MeshComponent>();
cube_b->CreateComponent<MeshComponent>(cube_geometry);
cube_b->GetTransform().GetScale() = Vector3{0.25f, 0.25f, 0.25f};
}

Expand Down
2 changes: 2 additions & 0 deletions zephyr/renderer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ set(HEADERS_PUBLIC
include/zephyr/renderer/backend/render_backend.hpp
include/zephyr/renderer/backend/render_backend_ogl.hpp
include/zephyr/renderer/backend/render_backend_vk.hpp
include/zephyr/renderer/component/mesh.hpp
include/zephyr/renderer/resource/geometry.hpp
include/zephyr/renderer/vulkan/vulkan_instance.hpp
include/zephyr/renderer/vulkan/vulkan_physical_device.hpp
include/zephyr/renderer/render_engine.hpp
Expand Down
17 changes: 17 additions & 0 deletions zephyr/renderer/include/zephyr/renderer/component/mesh.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

#pragma once

#include <zephyr/renderer/resource/geometry.hpp>
#include <zephyr/scene/component.hpp>
#include <memory>

namespace zephyr {

struct MeshComponent : Component {
MeshComponent() = default;
MeshComponent(std::shared_ptr<Geometry> geometry) : geometry{std::move(geometry)} {}

std::shared_ptr<Geometry> geometry;
};

} // namespace zephyr
5 changes: 2 additions & 3 deletions zephyr/renderer/include/zephyr/renderer/render_engine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@

namespace zephyr {

struct MeshComponent : Component {};

class RenderEngine {
public:
explicit RenderEngine(std::unique_ptr<RenderBackend> render_backend);
Expand All @@ -25,7 +23,8 @@ namespace zephyr {
void JoinRenderThread();
void RenderThreadMain();

std::unique_ptr<RenderBackend> m_render_backend;
std::shared_ptr<RenderBackend> m_render_backend;

std::thread m_render_thread;
std::atomic_bool m_render_thread_running;
std::atomic_bool m_render_thread_is_waiting;
Expand Down
27 changes: 27 additions & 0 deletions zephyr/renderer/include/zephyr/renderer/resource/geometry.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

#pragma once

#include <zephyr/integer.hpp>
#include <zephyr/float.hpp>
#include <zephyr/non_copyable.hpp>
#include <zephyr/non_moveable.hpp>
//#include <zephyr/uid.hpp>
#include <vector>

namespace zephyr {

class Geometry : NonCopyable, NonMoveable {
public:
// /// @returns the Unique ID of this geometry
// [[nodiscard]] u64 GetUID() const {
// return (u64)m_uid;
// }

std::vector<u32> m_indices{};
std::vector<f32> m_positions{};

// private:
// UID m_uid{}; //< Unique ID of this geometry
};

} // namespace zephyr
15 changes: 11 additions & 4 deletions zephyr/renderer/src/render_engine.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@

#include <zephyr/renderer/component/mesh.hpp>
#include <zephyr/renderer/render_engine.hpp>
#include <fmt/format.h>

namespace zephyr {

RenderEngine::RenderEngine(std::unique_ptr<RenderBackend> render_backend) : m_render_backend{std::move(render_backend)} {
RenderEngine::RenderEngine(std::unique_ptr<RenderBackend> render_backend)
: m_render_backend{std::move(render_backend)} {
CreateRenderThread();
}

Expand All @@ -22,9 +24,14 @@ namespace zephyr {
if(!node->IsVisible()) return false;

if(node->HasComponent<MeshComponent>()) {
m_render_objects.push_back({
.local_to_world = node->GetTransform().GetWorld()
});
const MeshComponent& mesh_component = node->GetComponent<MeshComponent>();
const auto& geometry = mesh_component.geometry;

if(geometry) {
m_render_objects.push_back({
.local_to_world = node->GetTransform().GetWorld()
});
}
}

return true;
Expand Down

0 comments on commit 54f990b

Please sign in to comment.