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
21 changes: 1 addition & 20 deletions engine/includes/commandbuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,6 @@ struct Global {
float padding[13];
};

struct Local {
Matrix4 model;

Vector4 color;

Vector4 objectId;

Vector4 materialId;
};

class ENGINE_EXPORT CommandBuffer: public Object {
A_REGISTER(CommandBuffer, Object, System)

Expand All @@ -64,18 +54,10 @@ class ENGINE_EXPORT CommandBuffer: public Object {

virtual void dispatchCompute(ComputeInstance *shader, int32_t groupsX, int32_t groupsY, int32_t groupsZ);

virtual void drawMesh(const Matrix4 &transform, Mesh *mesh, uint32_t sub, uint32_t layer = CommandBuffer::DEFAULT, MaterialInstance *material = nullptr);

virtual void drawMeshInstanced(const Matrix4 *transform, uint32_t count, Mesh *mesh, uint32_t sub, uint32_t layer = CommandBuffer::DEFAULT, MaterialInstance *material = nullptr);
virtual void drawMesh(Mesh *mesh, uint32_t sub, uint32_t layer, MaterialInstance &instance);

virtual void setRenderTarget(RenderTarget *target, uint32_t level = 0);

virtual void setColor(const Vector4 &color);

virtual void setObjectId(uint32_t id);

virtual void setMaterialId(uint32_t id);

virtual void setScreenProjection(float x = -0.5f, float y = -0.5f, float width = 0.5f, float height = 0.5f);

virtual void resetViewProjection();
Expand Down Expand Up @@ -113,7 +95,6 @@ class ENGINE_EXPORT CommandBuffer: public Object {
bool m_screenProjection;

Global m_global;
Local m_local;

Matrix4 m_saveView;
Matrix4 m_saveProjection;
Expand Down
16 changes: 5 additions & 11 deletions engine/includes/components/particlerender.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ class ENGINE_EXPORT ParticleRender : public Renderable {
void deltaUpdate(float dt);

private:
inline void spawnParticle(ParticleEmitter &emitter, ParticleData &data);
void updateParticle(ParticleEmitter &emitter, ParticleData &data, float dt);
inline void spawnParticle(Matrix4 &matrix);
void updateParticle(ParticleData &data, float dt);

AABBox bound() const override;

Expand All @@ -40,16 +40,10 @@ class ENGINE_EXPORT ParticleRender : public Renderable {
static void effectUpdated(int state, void *ptr);

private:
typedef vector<Matrix4> BufferArray;
typedef list<ParticleData> ParticleList;
vector<ParticleData> m_particles;

vector<BufferArray> m_buffers;
vector<ParticleList> m_particles;

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

vector<uint32_t> m_visibleCount;
float m_ejectionTime;
float m_count;

AABBox m_aabb;

Expand Down
2 changes: 1 addition & 1 deletion engine/includes/components/renderable.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ENGINE_EXPORT Renderable : public NativeBehaviour {
void loadUserData(const VariantMap &data) override;
VariantMap saveUserData() const override;

void setMaterialsList(const list<Material *> &materials);
virtual void setMaterialsList(const list<Material *> &materials);

private:
void setSystem(ObjectSystem *system) override;
Expand Down
2 changes: 2 additions & 0 deletions engine/includes/components/spriterender.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class ENGINE_EXPORT SpriteRender : public Renderable {
private:
void draw(CommandBuffer &buffer, uint32_t layer) override;

void setMaterialsList(const list<Material *> &materials) override;

AABBox localBound() const override;

void loadUserData(const VariantMap &data) override;
Expand Down
4 changes: 4 additions & 0 deletions engine/includes/components/textrender.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ class ENGINE_EXPORT TextRender : public Renderable {

AABBox localBound() const override;

void setMaterialsList(const list<Material *> &materials) override;

void drawGizmosSelected() override;

void loadData(const VariantList &data) override;
Expand Down Expand Up @@ -101,6 +103,8 @@ class ENGINE_EXPORT TextRender : public Renderable {

int m_alignment;

float m_fontWeight;

bool m_kerning;

bool m_wrap;
Expand Down
2 changes: 2 additions & 0 deletions engine/includes/components/tilemaprender.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class ENGINE_EXPORT TileMapRender : public Renderable {

void draw(CommandBuffer &buffer, uint32_t layer) override;

void setMaterialsList(const list<Material *> &materials) override;

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

Expand Down
15 changes: 11 additions & 4 deletions engine/includes/resources/material.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,7 @@ class ENGINE_EXPORT Material : public Resource {
enum SurfaceType {
Static,
Skinned,
Billboard,
Oriented,
Fullscreen
Billboard
};

enum BlendOp {
Expand Down Expand Up @@ -272,6 +270,9 @@ class ENGINE_EXPORT MaterialInstance {

Texture *texture(const char *name);

uint32_t instanceCount() const;
void setInstanceCount(uint32_t number);

void setBool(const char *name, const bool *value, int32_t count = 1);

void setInteger(const char *name, const int32_t *value, int32_t count = 1);
Expand All @@ -283,8 +284,12 @@ class ENGINE_EXPORT MaterialInstance {

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

void setTransform(const Matrix4 &transform, uint32_t id);

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

vector<uint8_t> &rawUniformBuffer();

uint32_t paramCount() const;
string paramName(uint32_t index) const;
Variant paramValue(uint32_t index) const;
Expand All @@ -301,9 +306,11 @@ class ENGINE_EXPORT MaterialInstance {
map<string, Texture *> m_textureOverride;
map<string, Variant> m_paramOverride;

vector<uint8_t> m_uniformBuffer;

Material *m_material;

uint8_t *m_uniformBuffer;
uint32_t m_instanceCount;

uint16_t m_surfaceType;

Expand Down
58 changes: 14 additions & 44 deletions engine/includes/resources/particleeffect.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,25 +74,25 @@ class ENGINE_EXPORT ParticleModificator {
Vector4 m_min;
Vector4 m_max;

VariantAnimation m_Curve;
VariantAnimation m_curve;

};
typedef std::deque<ParticleModificator *> ModifiersDeque;

class ENGINE_EXPORT ParticleEmitter {
class ENGINE_EXPORT ParticleEffect : public Resource {
A_REGISTER(ParticleEffect, Resource, Resources)

A_PROPERTIES(
A_PROPERTY(Mesh *, mesh, ParticleEmitter::mesh, ParticleEmitter::setMesh),
A_PROPERTY(Material *, material, ParticleEmitter::material, ParticleEmitter::setMaterial),
A_PROPERTY(float, distibution, ParticleEmitter::distribution, ParticleEmitter::setDistribution),
A_PROPERTY(bool, local, ParticleEmitter::local, ParticleEmitter::setLocal),
A_PROPERTY(bool, continous, ParticleEmitter::continous, ParticleEmitter::setContinous)
A_PROPERTY(Mesh *, mesh, ParticleEffect::mesh, ParticleEffect::setMesh),
A_PROPERTY(Material *, material, ParticleEffect::material, ParticleEffect::setMaterial),
A_PROPERTY(float, distibution, ParticleEffect::distribution, ParticleEffect::setDistribution),
A_PROPERTY(bool, local, ParticleEffect::local, ParticleEffect::setLocal),
A_PROPERTY(bool, continous, ParticleEffect::continous, ParticleEffect::setContinous)
)
A_NOMETHODS()

public:
ParticleEmitter();

bool operator== (const ParticleEmitter &emitter) const;
ParticleEffect();
~ParticleEffect();

Mesh *mesh() const;
void setMesh(Mesh *mesh);
Expand All @@ -115,7 +115,9 @@ class ENGINE_EXPORT ParticleEmitter {
ModifiersDeque &modifiers();
void setModifiers(const ModifiersDeque &modifiers);

private:
void loadUserData(const VariantMap &data) override;

protected:
ModifiersDeque m_modifiers;

Mesh *m_mesh;
Expand All @@ -130,38 +132,6 @@ class ENGINE_EXPORT ParticleEmitter {

bool m_continous;

};
typedef deque<ParticleEmitter> EmitterDeque;

class ENGINE_EXPORT ParticleEffect : public Resource {
A_REGISTER(ParticleEffect, Resource, Resources)

A_NOPROPERTIES()
A_METHODS(
A_METHOD(void, ParticleEffect::clear),
A_METHOD(int, ParticleEffect::emittersCount),
A_METHOD(ParticleEmitter *, ParticleEffect::emitter),
A_METHOD(void, ParticleEffect::addEmitter)
)

public:
ParticleEffect();
~ParticleEffect();

void clear();

int emittersCount() const;

ParticleEmitter *emitter(int index);
void addEmitter(ParticleEmitter *emitter);

void loadUserData(const VariantMap &data) override;

static void registerSuper(ObjectSystem *system);

protected:
EmitterDeque m_Emitters;

};

#endif // PARTICLEEFFECT_H
38 changes: 3 additions & 35 deletions engine/src/commandbuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,27 +43,13 @@ void CommandBuffer::dispatchCompute(ComputeInstance *shader, int32_t groupsX, in
A_UNUSED(groupsZ);
}
/*!
Draws a \a mesh with the specified \a sub mesh index in the \a transform location with assigned \a material, and rendering \a layer.
Draws a \a mesh with the specified \a sub mesh index with assigned material \a instance, and rendering \a layer.
*/
void CommandBuffer::drawMesh(const Matrix4 &transform, Mesh *mesh, uint32_t sub, uint32_t layer, MaterialInstance *material) {
A_UNUSED(transform);
void CommandBuffer::drawMesh(Mesh *mesh, uint32_t sub, uint32_t layer, MaterialInstance &instance) {
A_UNUSED(mesh);
A_UNUSED(sub);
A_UNUSED(layer);
A_UNUSED(material);
}
/*!
Draws the same \a mesh multiple times using GPU instancing.
GPU will draw this mesh with the specified \a sub mesh index in different \a transform locations with assigned \a material, and rendering \a layer.
Parameter \a count specifies the number of instances to draw.
*/
void CommandBuffer::drawMeshInstanced(const Matrix4 *transform, uint32_t count, Mesh *mesh, uint32_t sub, uint32_t layer, MaterialInstance *material) {
A_UNUSED(transform);
A_UNUSED(count);
A_UNUSED(mesh);
A_UNUSED(sub);
A_UNUSED(layer);
A_UNUSED(material);
A_UNUSED(instance);
}
/*!
Sets the render \a target for subsequent rendering commands.
Expand Down Expand Up @@ -97,24 +83,6 @@ bool CommandBuffer::isInited() {
void CommandBuffer::setInited() {
s_Inited = true;
}
/*!
Sets the \a color for rendering commands.
*/
void CommandBuffer::setColor(const Vector4 &color) {
m_local.color = color;
}
/*!
Sets the object \a id for rendering commands.
*/
void CommandBuffer::setObjectId(uint32_t id) {
m_local.objectId = idToColor(id);
}
/*!
Sets the material \a id for rendering commands.
*/
void CommandBuffer::setMaterialId(uint32_t id) {
m_local.materialId = idToColor(id);
}
/*!
Sets the screen projection matrix.
Parameters \a x and \a y represents screen coordinates.
Expand Down
2 changes: 1 addition & 1 deletion engine/src/components/camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ array<Vector3, 8> Camera::frustumCorners(bool ortho, float sigma, float ratio, c
void Camera::drawGizmos() {
Transform *t = transform();

Gizmos::drawIcon(t->worldPosition(), Vector2(0.5f), ".embedded/camera.png", color());
Gizmos::drawIcon(t->worldPosition(), Vector2(0.5f), ".embedded/camera.png", Vector4(1.0f));
}

void Camera::drawGizmosSelected() {
Expand Down
8 changes: 3 additions & 5 deletions engine/src/components/meshrender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,14 @@ void MeshRender::draw(CommandBuffer &buffer, uint32_t layer) {
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);
instance->setTransform(transform, a->uuid());

buffer.drawMesh(m_mesh, i, layer, *instance);
}
}
}
Expand Down
Loading