Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions engine/includes/components/transform.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ class ENGINE_EXPORT Transform : public Component {
Transform *parentTransform() const;
void setParentTransform(Transform *parent, bool force = false);

virtual Matrix4 localTransform() const;
virtual Matrix4 worldTransform() const;
virtual const Matrix4 &localTransform() const;
virtual const Matrix4 &worldTransform() const;

Vector3 worldPosition() const;
Vector3 worldRotation() const;
Expand Down
23 changes: 14 additions & 9 deletions engine/src/components/meshrender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,20 @@ MeshRender::MeshRender() :
*/
void MeshRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_mesh && !m_materials.empty() && layer & a->layers() && a->transform()) {
buffer.setObjectId(a->uuid());
buffer.setColor(Vector4(1.0f));

for(int i = 0; i < m_mesh->subMeshCount(); i++) {
MaterialInstance *instance = (i < m_materials.size()) ? m_materials[i] : nullptr;
if(instance) {
buffer.setMaterialId(instance->material()->uuid());
buffer.drawMesh(a->transform()->worldTransform(), m_mesh, i, layer, instance);
if(m_mesh && !m_materials.empty() && layer & a->layers()) {
Transform *t = a->transform();
if(t) {
buffer.setObjectId(a->uuid());
buffer.setColor(Vector4(1.0f));

const Matrix4 &transform = t->worldTransform();

for(int i = 0; i < m_mesh->subMeshCount(); i++) {
MaterialInstance *instance = (i < m_materials.size()) ? m_materials[i] : nullptr;
if(instance) {
buffer.setMaterialId(instance->material()->uuid());
buffer.drawMesh(transform, m_mesh, i, layer, instance);
}
}
}
}
Expand Down
19 changes: 12 additions & 7 deletions engine/src/components/skinnedmeshrender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,19 @@ SkinnedMeshRender::SkinnedMeshRender() :
void SkinnedMeshRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_mesh && !m_materials.empty() && layer & a->layers()) {
buffer.setObjectId(a->uuid());
buffer.setColor(Vector4(1.0f));
Transform *t = a->transform();
if(t) {
buffer.setObjectId(a->uuid());
buffer.setColor(Vector4(1.0f));

for(int i = 0; i < m_mesh->subMeshCount(); i++) {
MaterialInstance *instance = (i < m_materials.size()) ? m_materials[i] : nullptr;
if(instance) {
buffer.setMaterialId(instance->material()->uuid());
buffer.drawMesh(a->transform()->worldTransform(), m_mesh, i, layer, instance);
const Matrix4 &transform = t->worldTransform();

for(int i = 0; i < m_mesh->subMeshCount(); i++) {
MaterialInstance *instance = (i < m_materials.size()) ? m_materials[i] : nullptr;
if(instance) {
buffer.setMaterialId(instance->material()->uuid());
buffer.drawMesh(transform, m_mesh, i, layer, instance);
}
}
}
}
Expand Down
16 changes: 10 additions & 6 deletions engine/src/components/spriterender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,17 @@ SpriteRender::~SpriteRender() {
void SpriteRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_mesh && !m_materials.empty() && layer & a->layers()) {
buffer.setObjectId(a->uuid());
buffer.setColor(m_color);
buffer.setMaterialId(material()->uuid());
Transform *t = a->transform();

buffer.drawMesh(a->transform()->worldTransform(),
(m_customMesh) ? m_customMesh : m_mesh,
0, layer, m_materials.front());
if(t) {
buffer.setObjectId(a->uuid());
buffer.setColor(m_color);
buffer.setMaterialId(material()->uuid());

buffer.drawMesh(t->worldTransform(),
(m_customMesh) ? m_customMesh : m_mesh,
0, layer, m_materials.front());
}
}
}
/*!
Expand Down
11 changes: 7 additions & 4 deletions engine/src/components/textrender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,14 @@ TextRender::~TextRender() {
void TextRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_mesh && !m_materials.empty() && layer & a->layers() && !m_text.empty()) {
buffer.setObjectId(a->uuid());
buffer.setMaterialId(material()->uuid());
buffer.setColor(m_color);
Transform *t = a->transform();
if(t) {
buffer.setObjectId(a->uuid());
buffer.setMaterialId(material()->uuid());
buffer.setColor(m_color);

buffer.drawMesh(a->transform()->worldTransform(), m_mesh, 0, layer, m_materials.front());
buffer.drawMesh(t->worldTransform(), m_mesh, 0, layer, m_materials.front());
}
}
}
/*!
Expand Down
13 changes: 8 additions & 5 deletions engine/src/components/tilemaprender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,15 @@ TileMapRender::TileMapRender() :
*/
void TileMapRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_tileMap && !m_materials.empty() && layer & a->layers() && a->transform()) {
buffer.setObjectId(a->uuid());
buffer.setMaterialId(material()->uuid());
buffer.setColor(Vector4(1.0f));
if(m_tileMap && !m_materials.empty() && layer & a->layers()) {
Transform *t = a->transform();
if(t) {
buffer.setObjectId(a->uuid());
buffer.setColor(Vector4(1.0f));

buffer.drawMesh(a->transform()->worldTransform(), m_tileMap->tileMesh(), 0, layer, m_materials.front());
buffer.setMaterialId(material()->uuid());
buffer.drawMesh(t->worldTransform(), m_tileMap->tileMesh(), 0, layer, m_materials.front());
}
}
}
/*!
Expand Down
4 changes: 2 additions & 2 deletions engine/src/components/transform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ void Transform::setParentTransform(Transform *parent, bool force) {
/*!
Returns current transform matrix in local space.
*/
Matrix4 Transform::localTransform() const {
const Matrix4 &Transform::localTransform() const {
if(m_dirty) {
unique_lock<mutex> locker(m_mutex);
cleanDirty();
Expand All @@ -183,7 +183,7 @@ Matrix4 Transform::localTransform() const {
/*!
Returns current transform matrix in world space.
*/
Matrix4 Transform::worldTransform() const {
const Matrix4 &Transform::worldTransform() const {
if(m_dirty) {
unique_lock<mutex> locker(m_mutex);
cleanDirty();
Expand Down
15 changes: 9 additions & 6 deletions modules/uikit/src/components/frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,17 @@ void Frame::draw(CommandBuffer &buffer) {
if(m_mesh) {
Vector3Vector &verts = m_mesh->vertices();
if(!verts.empty()) {
Matrix4 mat(rectTransform()->worldTransform());
mat[12] -= verts[0].x;
mat[13] -= verts[0].y;
Transform *t = actor()->transform();
if(t) {
Matrix4 mat(t->worldTransform());
mat[12] -= verts[0].x;
mat[13] -= verts[0].y;

buffer.setObjectId(actor()->uuid());
buffer.setMaterialId(m_material->material()->uuid());
buffer.setObjectId(actor()->uuid());
buffer.setMaterialId(m_material->material()->uuid());

buffer.drawMesh(mat, m_mesh, 0, CommandBuffer::UI, m_material);
buffer.drawMesh(mat, m_mesh, 0, CommandBuffer::UI, m_material);
}
}
}
}
Expand Down
15 changes: 9 additions & 6 deletions modules/uikit/src/components/image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,17 @@ void Image::draw(CommandBuffer &buffer) {
if(m_mesh) {
Vector3Vector &verts = m_mesh->vertices();
if(!verts.empty()) {
Matrix4 mat(rectTransform()->worldTransform());
mat[12] -= verts[0].x;
mat[13] -= verts[0].y;
Transform *t = actor()->transform();
if(t) {
Matrix4 mat(t->worldTransform());
mat[12] -= verts[0].x;
mat[13] -= verts[0].y;

buffer.setObjectId(actor()->uuid());
buffer.setMaterialId((m_customMaterial) ? m_customMaterial->material()->uuid() : m_material->material()->uuid());
buffer.setObjectId(actor()->uuid());
buffer.setMaterialId((m_customMaterial) ? m_customMaterial->material()->uuid() : m_material->material()->uuid());

buffer.drawMesh(mat, m_mesh, 0, CommandBuffer::UI, (m_customMaterial) ? m_customMaterial : m_material);
buffer.drawMesh(mat, m_mesh, 0, CommandBuffer::UI, (m_customMaterial) ? m_customMaterial : m_material);
}
}
}
}
Expand Down
11 changes: 7 additions & 4 deletions modules/uikit/src/components/label.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,14 @@ Label::~Label() {
*/
void Label::draw(CommandBuffer &buffer) {
if(m_mesh && !m_text.empty()) {
buffer.setObjectId(actor()->uuid());
buffer.setMaterialId(m_material->material()->uuid());
buffer.setColor(m_color);
Transform *t = actor()->transform();
if(t) {
buffer.setObjectId(actor()->uuid());
buffer.setColor(m_color);

buffer.drawMesh(rectTransform()->worldTransform(), m_mesh, 0, CommandBuffer::UI, m_material);
buffer.setMaterialId(m_material->material()->uuid());
buffer.drawMesh(t->worldTransform(), m_mesh, 0, CommandBuffer::UI, m_material);
}
}
}
/*!
Expand Down
1 change: 1 addition & 0 deletions modules/uikit/src/components/widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ void Widget::setRectTransform(RectTransform *transform) {
if(m_transform) {
m_transform->unsubscribe(this);
}

m_transform = transform;
if(m_transform) {
m_transform->subscribe(this);
Expand Down