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
7 changes: 2 additions & 5 deletions engine/includes/components/meshrender.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ class ENGINE_EXPORT MeshRender : public Renderable {
Mesh *mesh() const;
void setMesh(Mesh *mesh);

Material *material() const;
void setMaterial(Material *material);

private:
AABBox localBound() const override;

Expand All @@ -35,11 +32,11 @@ class ENGINE_EXPORT MeshRender : public Renderable {

void composeComponent() override;

void setProperty(const char *name, const Variant &value) override;

private:
Mesh *m_mesh;

MaterialInstance *m_material;

};

#endif // MESHRENDER_H
2 changes: 0 additions & 2 deletions engine/includes/components/particlerender.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ class ENGINE_EXPORT ParticleRender : public Renderable {
vector<BufferArray> m_buffers;
vector<ParticleList> m_particles;

vector<MaterialInstance *> m_materials;

vector<float> m_ejectionTime;
vector<float> m_count;

Expand Down
14 changes: 14 additions & 0 deletions engine/includes/components/renderable.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@

class CommandBuffer;

class Material;
class MaterialInstance;

class ENGINE_EXPORT Renderable : public NativeBehaviour {
A_REGISTER(Renderable, NativeBehaviour, General)

Expand All @@ -25,12 +28,23 @@ class ENGINE_EXPORT Renderable : public NativeBehaviour {

virtual int priority() const;

Material *material() const;
virtual void setMaterial(Material *material);

protected:
virtual AABBox localBound() const;

void loadUserData(const VariantMap &data) override;
VariantMap saveUserData() const override;

private:
void setSystem(ObjectSystem *system) override;

protected:
vector<MaterialInstance *> m_materials;

uint32_t m_surfaceType;

private:
mutable AABBox m_localBox;
mutable AABBox m_worldBox;
Expand Down
11 changes: 4 additions & 7 deletions engine/includes/components/skinnedmeshrender.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ class ENGINE_EXPORT SkinnedMeshRender : public Renderable {
A_PROPERTIES(
A_PROPERTY(Vector3, boundsCenter, SkinnedMeshRender::boundsCenter, SkinnedMeshRender::setBoundsCenter),
A_PROPERTY(Vector3, boundsExtent, SkinnedMeshRender::boundsExtent, SkinnedMeshRender::setBoundsExtent),
A_PROPERTYEX(Armature *, armature, SkinnedMeshRender::armature, SkinnedMeshRender::setArmature, "editor=Component"),
A_PROPERTYEX(MeshGroup *, mesh, SkinnedMeshRender::mesh, SkinnedMeshRender::setMesh, "editor=Asset"),
A_PROPERTYEX(Material *, material, SkinnedMeshRender::material, SkinnedMeshRender::setMaterial, "editor=Asset")
A_PROPERTYEX(Material *, material, SkinnedMeshRender::material, SkinnedMeshRender::setMaterial, "editor=Asset"),
A_PROPERTYEX(Armature *, armature, SkinnedMeshRender::armature, SkinnedMeshRender::setArmature, "editor=Component")
)
A_NOMETHODS()

Expand All @@ -32,9 +32,6 @@ class ENGINE_EXPORT SkinnedMeshRender : public Renderable {
Mesh *mesh() const;
void setMesh(Mesh *mesh);

Material *material() const;
void setMaterial(Material *material);

Armature *armature() const;
void setArmature(Armature *armature);

Expand All @@ -46,6 +43,8 @@ class ENGINE_EXPORT SkinnedMeshRender : public Renderable {
void loadUserData(const VariantMap &data) override;
VariantMap saveUserData() const override;

void setMaterial(Material *material) override;

void onReferenceDestroyed() override;

void drawGizmosSelected() override;
Expand All @@ -55,8 +54,6 @@ class ENGINE_EXPORT SkinnedMeshRender : public Renderable {

Mesh *m_mesh;

MaterialInstance *m_material;

Armature *m_armature;

};
Expand Down
9 changes: 3 additions & 6 deletions engine/includes/components/spriterender.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ class ENGINE_EXPORT SpriteRender : public Renderable {
A_REGISTER(SpriteRender, Renderable, Components/2D)

A_PROPERTIES(
A_PROPERTYEX(Sprite *, sprite, SpriteRender::sprite, SpriteRender::setSprite, "editor=Asset"),
A_PROPERTYEX(Material *, material, SpriteRender::material, SpriteRender::setMaterial, "editor=Asset"),
A_PROPERTYEX(Sprite *, sprite, SpriteRender::sprite, SpriteRender::setSprite, "editor=Asset"),
A_PROPERTYEX(Vector4, color, SpriteRender::color, SpriteRender::setColor, "editor=Color"),
A_PROPERTY(string, item, SpriteRender::item, SpriteRender::setItem),
A_PROPERTY(Vector2, size, SpriteRender::size, SpriteRender::setSize),
Expand All @@ -41,9 +41,6 @@ class ENGINE_EXPORT SpriteRender : public Renderable {
SpriteRender();
~SpriteRender();

Material *material() const;
void setMaterial(Material *material);

Sprite *sprite() const;
void setSprite(Sprite *sprite);

Expand All @@ -65,6 +62,8 @@ class ENGINE_EXPORT SpriteRender : public Renderable {
int layer() const;
void setLayer(int layer);

void setMaterial(Material *material) override;

static bool composeMesh(Sprite *sprite, int key, Mesh *spriteMesh, Vector2 &size, int mode, bool resetSize, float scale = 1.0f);

private:
Expand Down Expand Up @@ -97,8 +96,6 @@ class ENGINE_EXPORT SpriteRender : public Renderable {

Texture *m_texture;

MaterialInstance *m_material;

Mesh *m_mesh;
Mesh *m_customMesh;

Expand Down
3 changes: 0 additions & 3 deletions engine/includes/components/textrender.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class ENGINE_EXPORT TextRender : public Renderable {
Font *font() const;
void setFont(Font *font);

Material *material() const;
void setMaterial(Material *material);

int fontSize() const;
Expand Down Expand Up @@ -96,8 +95,6 @@ class ENGINE_EXPORT TextRender : public Renderable {

Font *m_font;

MaterialInstance *m_material;

Mesh *m_mesh;

int32_t m_size;
Expand Down
5 changes: 1 addition & 4 deletions engine/includes/components/tilemaprender.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ class ENGINE_EXPORT TileMapRender : public Renderable {
TileMap *tileMap() const;
void setTileMap(TileMap *map);

Material *material() const;
void setMaterial(Material *material);
void setMaterial(Material *material) override;

int layer() const;
void setLayer(int layer);
Expand All @@ -45,8 +44,6 @@ class ENGINE_EXPORT TileMapRender : public Renderable {
private:
TileMap *m_tileMap;

MaterialInstance *m_material;

int m_layer;

};
Expand Down
12 changes: 9 additions & 3 deletions engine/includes/resources/material.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ class ENGINE_EXPORT Material : public Resource {
struct UniformItem {
string name;

Variant value;
Variant defaultValue;

size_t size;

Expand Down Expand Up @@ -188,17 +188,23 @@ class ENGINE_EXPORT MaterialInstance {

void setMatrix4(const char *name, const Matrix4 *value, int32_t count = 1);

void setValue(const char *name, const void *value);

virtual void setTexture(const char *name, Texture *value);

uint32_t paramCount() const;
string paramName(uint32_t index) const;
Variant paramValue(uint32_t index) const;

uint16_t surfaceType() const;
void setSurfaceType(uint16_t type);

protected:
void setBufferValue(const char *name, const void *value);

protected:
friend class Material;

map<string, Texture *> m_textureOverride;
map<string, Variant> m_paramOverride;

Material *m_material;

Expand Down
4 changes: 2 additions & 2 deletions engine/src/components/baselight.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#include "mesh.h"

namespace {
const char *uniParams = "uni.params";
const char *uniColor = "uni.color";
const char *uniParams = "params";
const char *uniColor = "color";
};

/*!
Expand Down
6 changes: 3 additions & 3 deletions engine/src/components/gui/frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
#include "resources/material.h"

namespace {
const char *gBorderColor = "uni.borderColor";
const char *gBorderWidth = "uni.borderWidth";
const char *gCornerRadius = "uni.cornerRadius";
const char *gBorderColor = "borderColor";
const char *gBorderWidth = "borderWidth";
const char *gCornerRadius = "cornerRadius";
};

Frame::Frame() :
Expand Down
2 changes: 1 addition & 1 deletion engine/src/components/gui/image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace {
const char *gBasemap = "BaseMap";

const char *gOverride = "texture0";
const char *gColor = "uni.color0";
const char *gColor = "color0";
const char *gDefaultSprite = ".embedded/DefaultSprite.mtl";
};

Expand Down
3 changes: 1 addition & 2 deletions engine/src/components/gui/label.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
namespace {
const char *gFont = "Font";
const char *gOverride = "texture0";

const char *gClipRect = "uni.clipRect";
const char *gClipRect = "clipRect";
};

/*!
Expand Down
75 changes: 22 additions & 53 deletions engine/src/components/meshrender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@
#include "pipelinecontext.h"

#include "mesh.h"
#include "material.h"

namespace {
const char *gMesh = "Mesh";
const char *gMaterial = "Material";
}

/*!
Expand All @@ -22,21 +20,20 @@ const char *gMaterial = "Material";
*/

MeshRender::MeshRender() :
m_mesh(nullptr),
m_material(nullptr) {
m_mesh(nullptr) {

}
/*!
\internal
*/
void MeshRender::draw(CommandBuffer &buffer, uint32_t layer) {
Actor *a = actor();
if(m_mesh && m_material && layer & a->layers() && a->transform()) {
if(m_mesh && !m_materials.empty() && layer & a->layers() && a->transform()) {
buffer.setObjectId(a->uuid());
buffer.setMaterialId(m_material->material()->uuid());
buffer.setMaterialId(m_materials[0]->material()->uuid());
buffer.setColor(Vector4(1.0f));

buffer.drawMesh(a->transform()->worldTransform(), m_mesh, 0, layer, m_material);
buffer.drawMesh(a->transform()->worldTransform(), m_mesh, 0, layer, m_materials[0]);
}
}
/*!
Expand All @@ -59,66 +56,32 @@ Mesh *MeshRender::mesh() const {
*/
void MeshRender::setMesh(Mesh *mesh) {
m_mesh = mesh;
if(m_mesh && m_material == nullptr) {
if(m_mesh && m_materials.empty()) {
setMaterial(m_mesh->material());
}
}
/*!
Returns an instantiated Material assigned to MeshRender.
*/
Material *MeshRender::material() const {
if(m_material) {
return m_material->material();
}
return nullptr;
}
/*!
Creates a new instance of \a material and assigns it.
*/
void MeshRender::setMaterial(Material *material) {
if(m_material) {
delete m_material;
m_material = nullptr;
}
if(material) {
m_material = material->createInstance();
}
}
/*!
\internal
*/
void MeshRender::loadUserData(const VariantMap &data) {
Component::loadUserData(data);
{
auto it = data.find(gMesh);
if(it != data.end()) {
setMesh(Engine::loadResource<Mesh>((*it).second.toString()));
}
}
if(m_mesh) {
auto it = data.find(gMaterial);
if(it != data.end()) {
setMaterial(Engine::loadResource<Material>((*it).second.toString()));
}
Renderable::loadUserData(data);

auto it = data.find(gMesh);
if(it != data.end()) {
setMesh(Engine::loadResource<Mesh>((*it).second.toString()));
}
}
/*!
\internal
*/
VariantMap MeshRender::saveUserData() const {
VariantMap result = Component::saveUserData();
{
string ref = Engine::reference(mesh());
if(!ref.empty()) {
result[gMesh] = ref;
}
}
{
string ref = Engine::reference(material());
if(!ref.empty()) {
result[gMaterial] = ref;
}
VariantMap result(Renderable::saveUserData());

string ref = Engine::reference(mesh());
if(!ref.empty()) {
result[gMesh] = ref;
}

return result;
}
/*!
Expand All @@ -128,3 +91,9 @@ void MeshRender::composeComponent() {
setMesh(PipelineContext::defaultCube());
setMaterial(Engine::loadResource<Material>(".embedded/DefaultMesh.mtl"));
}
/*!
\internal
*/
void MeshRender::setProperty(const char *name, const Variant &value) {
Renderable::setProperty(name, value);
}
4 changes: 0 additions & 4 deletions engine/src/components/particlerender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ ParticleRender::~ParticleRender() {
if(m_effect) {
m_effect->unsubscribe(this);
}

for(auto it : m_materials) {
delete it;
}
}
/*!
\internal
Expand Down
Loading