Add offscreen render targets and rename AssetRegistry to ResourceRegistry #8
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace sophia {
|
||||
|
||||
Entity::Entity(entt::entity handle, Scene* scene) : handle(handle), scene(scene) {}
|
||||
Entity::Entity(entt::entity handle, Scene* scene)
|
||||
: handle(handle), scene(scene) {}
|
||||
|
||||
} // namespace sophia
|
||||
|
||||
+15
-19
@@ -1,44 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include <sophia/scene.hpp>
|
||||
#include <entt/entt.hpp>
|
||||
#include <sophia/util/assert.hpp>
|
||||
#include <sophia/scene.hpp>
|
||||
#include <sophia/types.hpp>
|
||||
#include <sophia/util/assert.hpp>
|
||||
|
||||
namespace sophia {
|
||||
|
||||
class Entity {
|
||||
public:
|
||||
public:
|
||||
Entity(const Entity&) = default;
|
||||
Entity& operator=(const Entity&) = default;
|
||||
|
||||
Entity() = default;
|
||||
Entity(entt::entity handle, Scene* scene);
|
||||
|
||||
template<typename T, typename... Args>
|
||||
template <typename T, typename... Args>
|
||||
T& addComponent(Args&&... args) {
|
||||
SOPHIA_ASSERT(!hasComponent<T>(), "Entity already has component!");
|
||||
T& component = scene->registry.emplace<T>(handle, std::forward<Args>(args)...);
|
||||
T& component =
|
||||
scene->registry.emplace<T>(handle, std::forward<Args>(args)...);
|
||||
// scene->OnComponentAdded<T>(*this, component);
|
||||
return component;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T& getComponent()
|
||||
{
|
||||
template <typename T>
|
||||
T& getComponent() {
|
||||
SOPHIA_ASSERT(hasComponent<T>(), "Entity does not have component!");
|
||||
return scene->registry.get<T>(handle);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool hasComponent()
|
||||
{
|
||||
template <typename T>
|
||||
bool hasComponent() {
|
||||
return scene->registry.all_of<T>(handle);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void removeComponent()
|
||||
{
|
||||
template <typename T>
|
||||
void removeComponent() {
|
||||
SOPHIA_ASSERT(hasComponent<T>(), "Entity does not have component!");
|
||||
scene->registry.remove<T>(handle);
|
||||
}
|
||||
@@ -54,12 +52,10 @@ public:
|
||||
return handle == other.handle && scene == other.scene;
|
||||
}
|
||||
|
||||
bool operator!=(const Entity& other) const {
|
||||
return !(*this == other);
|
||||
}
|
||||
bool operator!=(const Entity& other) const { return !(*this == other); }
|
||||
|
||||
private:
|
||||
entt::entity handle { entt::null};
|
||||
private:
|
||||
entt::entity handle{entt::null};
|
||||
Scene* scene = nullptr;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,26 +1,28 @@
|
||||
#include "rendering/scene_renderer.hpp"
|
||||
|
||||
#include <sophia/util/assert.hpp>
|
||||
#include <sophia/components.hpp>
|
||||
#include <sophia/util/assert.hpp>
|
||||
|
||||
namespace sophia {
|
||||
|
||||
namespace {
|
||||
struct PushConstantData {
|
||||
struct PushConstantData {
|
||||
glm::mat4 transform{1.f};
|
||||
glm::vec4 color{1.f};
|
||||
};
|
||||
}
|
||||
};
|
||||
} // namespace
|
||||
|
||||
SceneRenderer::SceneRenderer(ResourceRegistry& resources)
|
||||
: resources{resources} {}
|
||||
|
||||
SceneRenderer::~SceneRenderer() {}
|
||||
|
||||
void SceneRenderer::render(const Scene& scene, Entity camera, RenderTargetHandle target) {
|
||||
SOPHIA_ASSERT(camera.hasComponent<CameraComponent>(), "camera does not have camera component!");
|
||||
void SceneRenderer::render(const Scene& scene, Entity camera,
|
||||
RenderTargetHandle target) {
|
||||
SOPHIA_ASSERT(camera.hasComponent<CameraComponent>(),
|
||||
"camera does not have camera component!");
|
||||
|
||||
auto& R = scene.registry;
|
||||
auto& registry = scene.registry;
|
||||
|
||||
// Get all mesh
|
||||
// For each mesh, get all entities(ES) that have a transform and that mesh
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
namespace sophia {
|
||||
|
||||
/**
|
||||
/**
|
||||
* !TEMP to be decoupled once scene batching and rendering impl
|
||||
*/
|
||||
class SceneRenderer {
|
||||
|
||||
Reference in New Issue
Block a user