VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
renderComponent.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 10.09.2025.
5//
6#pragma once
7
8#include <algorithm>
9#include <memory>
10#include <string>
11#include <vector>
12
13#include <scene/meshInstance.h>
14#include <scene/constants.h>
15
17
18namespace visutwin::canvas
19{
21 {
22 };
23
31 {
32 public:
34 ~RenderComponent() override;
35
36 void initializeComponentData() override {};
37
38 std::vector<MeshInstance*>& meshInstances() { return _meshInstances; }
39 const std::vector<MeshInstance*>& meshInstances() const { return _meshInstances; }
40
41 const std::vector<int>& layers() const { return _layers; }
42 void setLayers(const std::vector<int>& layers) { _layers = layers; }
43
44 const std::string& type() const { return _type; }
45 void setType(const std::string& type);
46
47 Material* material() const { return _material; }
49
50 //receiveShadows getter/setter.
51 // Propagates to all MeshInstances.
52 bool receiveShadows() const { return _receiveShadows; }
53 void setReceiveShadows(bool value);
54
55 bool castShadows() const { return _castShadows; }
56 void setCastShadows(bool value);
57
62 void cloneFrom(const Component* source) override;
63
64 //batchGroupId getter/setter.
65 // Propagates to all MeshInstances.
66 int batchGroupId() const { return _batchGroupId; }
67 void setBatchGroupId(int id) {
68 _batchGroupId = id;
69 for (auto* mi : _meshInstances) {
70 mi->setBatchGroupId(id);
71 }
72 }
73
74 static const std::vector<RenderComponent*>& instances() { return _instances; }
75
76 private:
77 void rebuildPrimitiveMesh();
78
79 inline static std::vector<RenderComponent*> _instances;
80
81 std::vector<MeshInstance*> _meshInstances;
82 std::vector<std::shared_ptr<Mesh>> _ownedMeshes;
83 std::string _type;
84 Material* _material = nullptr;
85
86 bool _receiveShadows = true;
87 bool _castShadows = true;
88 int _batchGroupId = -1; // BatchGroup::NOID
89
90 // RenderComponent defaults to WORLD layer membership.
91 // Intentional temporary deviation: WORLD layer id is currently 1 in this C++ bootstrap.
92 std::vector<int> _layers = {1};
93 };
94}
Base class for ECS components that attach functionality to entities.
Definition component.h:40
Entity * entity() const
Definition component.cpp:16
Component(IComponentSystem *system, Entity *entity)
Definition component.cpp:12
IComponentSystem * system() const
Definition component.h:47
ECS entity — a GraphNode that hosts components defining its behavior.
Definition entity.h:32
Base class for GPU materials — owns uniform data, texture bindings, blend/depth state,...
Definition material.h:143
void setLayers(const std::vector< int > &layers)
std::vector< MeshInstance * > & meshInstances()
void setType(const std::string &type)
const std::vector< MeshInstance * > & meshInstances() const
const std::vector< int > & layers() const
static const std::vector< RenderComponent * > & instances()
void cloneFrom(const Component *source) override
RenderComponent(IComponentSystem *system, Entity *entity)
void setMaterial(Material *material)
const std::string & type() const