Skip to content

Commit

Permalink
Added groups
Browse files Browse the repository at this point in the history
  • Loading branch information
denis-beqiraj committed Feb 6, 2025
1 parent 8ba1ba8 commit a4efc82
Show file tree
Hide file tree
Showing 14 changed files with 178 additions and 31 deletions.
2 changes: 1 addition & 1 deletion Engine/Shaders/DeferredForwardPipeline/fragment.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ void main()
{
currentMaterial = materialData[drawId];

vec4 diffuseTexture = texture(currentMaterial.diffuse, TexCoords);
vec4 diffuseTexture = texture(currentMaterial.diffuse, TexCoords)+currentMaterial.materialColor;

vec3 albedo = diffuseTexture.rgb;
if (diffuseTexture.a < 0.1) {
Expand Down
3 changes: 2 additions & 1 deletion Engine/Shaders/DeferredPipeline/fragment.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ struct MaterialData {
sampler2D ambient_occlusion;
int transparent;
float padding;
vec4 materialColor;
};

MaterialData currentMaterial;
Expand Down Expand Up @@ -61,7 +62,7 @@ void main()
#endif


vec4 albedoTexture = texture(currentMaterial.diffuse, TexCoords);
vec4 albedoTexture = texture(currentMaterial.diffuse, TexCoords)+currentMaterial.materialColor;

if (albedoTexture.a < 0.1) {
discard;
Expand Down
2 changes: 1 addition & 1 deletion Engine/Shaders/ForwardPipeline/fragment.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ void main()
currentMaterial = materialData[drawId];
#endif

vec4 diffuseTexture = texture(currentMaterial.diffuse, TexCoords);
vec4 diffuseTexture = texture(currentMaterial.diffuse, TexCoords)+currentMaterial.materialColor;

vec3 albedo = diffuseTexture.rgb;
if (diffuseTexture.a < 0.1) {
Expand Down
1 change: 1 addition & 0 deletions Engine/Shaders/PbrHeaderPipeline/pbr_func.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ struct MaterialData {
sampler2D ambient_occlusion;
int transparent;
float padding;
vec4 materialColor;
};


Expand Down
18 changes: 12 additions & 6 deletions Engine/Shaders/StatusPipeline/compute.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,15 @@ layout(std430, binding = 22) buffer DrawElementsIndirectMeshCopy
InstanceData instanceDataCopy[];
};

layout(std430, binding = 25) buffer StatusCopy
{
uint statusCopy[];
struct StatusData{
uint status;
bool plainColor;
vec2 padding;
};


layout(std430, binding = 25) buffer StatusCopy {
StatusData statusCopy[];
};

layout(std430, binding = 19) buffer DrawElementsIndirectMeshAnimation
Expand All @@ -26,17 +32,17 @@ layout(std430, binding = 19) buffer DrawElementsIndirectMeshAnimation

layout(std430, binding = 26) buffer StatusAnimation
{
uint statusAnimation[];
StatusData statusAnimation[];
};

uniform int size;

void main() {
uint index = gl_GlobalInvocationID.x;
if (index < size) {
instanceDataCopy[index].instanceCount = statusCopy[index];
instanceDataCopy[index].instanceCount = statusCopy[index].status;
}
else {
instanceDataAnimation[index-size].instanceCount = statusAnimation[index-size];
instanceDataAnimation[index-size].instanceCount = statusAnimation[index-size].status;
}
}
1 change: 1 addition & 0 deletions Engine/Shaders/TransparentPipeline/compute.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ struct MaterialData {
vec2 ambient_occlusion;
bool transparent;
float padding;
vec4 materialColor;
};

layout(std430, binding = 0) buffer Material
Expand Down
11 changes: 9 additions & 2 deletions Engine/Shaders/TransparentPipeline/computeCopy.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,26 @@ struct MaterialData {
vec2 ambient_occlusion;
bool transparent;
float padding;
vec4 materialColor;
};

layout(std430, binding = 0) buffer Material {
MaterialData materialData[];
};

struct StatusData{
uint status;
bool plainColor;
vec2 padding;
};


layout(std430, binding = 24) buffer Status {
uint status[];
StatusData status[];
};

layout(std430, binding = 25) buffer StatusCopy {
uint statusCopy[];
StatusData statusCopy[];
};

struct AABB {
Expand Down
16 changes: 12 additions & 4 deletions Engine/Shaders/TransparentPipeline/computeHideShow.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,24 @@ struct MaterialData {
vec2 ambient_occlusion;
int transparent;
float padding;
vec4 materialColor;
};

layout(std430, binding = 0) buffer Material
{
MaterialData materialData[];
};

layout(std430, binding = 24) buffer Status
{
uint status[];

struct StatusData{
uint status;
bool plainColor;
vec2 padding;
};


layout(std430, binding = 24) buffer Status {
StatusData status[];
};

uniform bool transparent;
Expand All @@ -51,7 +59,7 @@ layout(binding = 0) uniform atomic_uint counterSize;
void main() {
uint index = gl_GlobalInvocationID.x;
int size=int(atomicCounter(counterSize));
if (status[index] > 0 && index<size) {
if (status[index].status > 0 && index<size) {
if (transparent) {
if (materialData[ids[index]].transparent==1) {
instanceData[index].instanceCount = 1;
Expand Down
15 changes: 14 additions & 1 deletion Engine/include/Components/MaterialComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace Prisma
uint64_t ambient_occlusion;
int transparent;
float padding;
glm::vec4 color = glm::vec4(0);
};

class MaterialComponent : public Component
Expand Down Expand Up @@ -53,7 +54,15 @@ namespace Prisma

void transparent(bool transparent);

bool transparent();
bool transparent() const;

void color(glm::vec4 color);

glm::vec4 color() const;

void plain(bool plain);

bool plain();

private:
std::vector<Texture> m_diffuse;
Expand All @@ -68,6 +77,10 @@ namespace Prisma
std::shared_ptr<std::string> m_specularName;
std::shared_ptr<std::string> m_ambientOcclusionName;

glm::vec4 m_color=glm::vec4(0);

bool m_plain = false;

bool m_transparent = false;

unsigned int m_id;
Expand Down
6 changes: 6 additions & 0 deletions Engine/include/SceneData/MeshIndirect.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ namespace Prisma
float aspect;
};

struct StatusData {
unsigned int status;
bool plainMaterial;
glm::vec2 padding;
};

std::shared_ptr<Prisma::SSBO> m_ssboCamera;

unsigned int m_sizeAtomic;
Expand Down
21 changes: 20 additions & 1 deletion Engine/src/Components/MaterialComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,26 @@ void Prisma::MaterialComponent::transparent(bool transparent)
m_transparent = transparent;
}

bool Prisma::MaterialComponent::transparent()
bool Prisma::MaterialComponent::transparent() const
{
return m_transparent;
}

void Prisma::MaterialComponent::color(glm::vec4 color) {
m_color = color;
CacheScene::getInstance().updateTextures(true);
}

glm::vec4 Prisma::MaterialComponent::color() const {
return m_color;
}

void Prisma::MaterialComponent::plain(bool plain)
{
m_plain = plain;
}

bool Prisma::MaterialComponent::plain()
{
return m_plain;
}
26 changes: 13 additions & 13 deletions Engine/src/SceneData/MeshIndirect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ void Prisma::MeshIndirect::updateSize()
m_materialData.push_back({
material->material()->diffuse()[0].id(), material->material()->normal()[0].id(),
material->material()->roughness_metalness()[0].id(), material->material()->specular()[0].id(),
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0,material->material()->color()
});
}
m_ssboMaterial->resize(sizeof(MaterialData) * (m_materialData.size()));
Expand Down Expand Up @@ -471,7 +471,7 @@ void Prisma::MeshIndirect::updateAnimation()
m_materialDataAnimation.push_back({
material->material()->diffuse()[0].id(), material->material()->normal()[0].id(),
material->material()->roughness_metalness()[0].id(), material->material()->specular()[0].id(),
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0,material->material()->color()
});
}
m_ssboMaterialAnimation->resize(sizeof(MaterialData) * (m_materialDataAnimation.size()));
Expand Down Expand Up @@ -627,7 +627,7 @@ void Prisma::MeshIndirect::updateTextureSize()
m_materialData.push_back({
material->material()->diffuse()[0].id(), material->material()->normal()[0].id(),
material->material()->roughness_metalness()[0].id(), material->material()->specular()[0].id(),
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0,material->material()->color()
});
}
m_ssboMaterial->resize(sizeof(MaterialData) * (m_materialData.size()));
Expand All @@ -640,7 +640,7 @@ void Prisma::MeshIndirect::updateTextureSize()
m_materialDataAnimation.push_back({
material->material()->diffuse()[0].id(), material->material()->normal()[0].id(),
material->material()->roughness_metalness()[0].id(), material->material()->specular()[0].id(),
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0
material->material()->ambientOcclusion()[0].id(), material->material()->transparent(), 0.0,material->material()->color()
});
}
m_ssboMaterialAnimation->resize(sizeof(MaterialData) * (m_materialDataAnimation.size()));
Expand All @@ -653,28 +653,28 @@ void Prisma::MeshIndirect::updateStatus() const
auto& meshes = Prisma::GlobalData::getInstance().currentGlobalScene()->meshes;
if (!meshes.empty())
{
std::vector<unsigned int> status;
std::vector<StatusData> status;
for (const auto& mesh : meshes)
{
status.push_back(mesh->visible());
status.push_back({ mesh->visible(),mesh->material()->plain(),glm::vec2(0.0)});
}
m_ssboStatusCopy->resize(sizeof(unsigned int) * status.size());
m_ssboStatusCopy->modifyData(0, sizeof(unsigned int) * status.size(), status.data());
m_ssboStatus->resize(sizeof(unsigned int) * status.size());
m_ssboStatusCopy->resize(sizeof(StatusData) * status.size());
m_ssboStatusCopy->modifyData(0, sizeof(StatusData) * status.size(), status.data());
m_ssboStatus->resize(sizeof(StatusData) * status.size());
updateStatusShader();
}
auto animateMeshes = Prisma::GlobalData::getInstance().currentGlobalScene()->animateMeshes;


if (!animateMeshes.empty())
{
std::vector<unsigned int> status;
std::vector<StatusData> status;
for (const auto& animateMesh : animateMeshes)
{
status.push_back(animateMesh->visible());
status.push_back({ animateMesh->visible(),animateMesh->material()->plain(),glm::vec2(0.0) });
}
m_ssboStatusAnimation->resize(sizeof(unsigned int) * status.size());
m_ssboStatusAnimation->modifyData(0, sizeof(unsigned int) * status.size(), status.data());
m_ssboStatusAnimation->resize(sizeof(StatusData) * status.size());
m_ssboStatusAnimation->modifyData(0, sizeof(StatusData) * status.size(), status.data());
updateStatusShader();
}
}
2 changes: 1 addition & 1 deletion GUI/include/NodeCreator.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace Prisma
static std::shared_ptr<Prisma::Node> createArea();

private:
static std::shared_ptr<Node> createMesh(std::shared_ptr<Prisma::Mesh::VerticesData> verticesData,
static std::shared_ptr<Prisma::Node> createMesh(std::shared_ptr<Prisma::Mesh::VerticesData> verticesData,
const std::string& name);

static std::shared_ptr<MaterialComponent> getEmptyMaterial();
Expand Down
Loading

0 comments on commit a4efc82

Please sign in to comment.