Fixed uniform buffer AO problem

This commit is contained in:
Antoine Pilote
2021-07-02 15:50:13 -04:00
parent 68d276c4b6
commit ca46e4e012
3 changed files with 49 additions and 26 deletions

View File

@@ -109,16 +109,16 @@ uniform sampler2D m_Displacement;
layout(std140, binding = 32) uniform u_MaterialUniform
{
bool u_HasAlbedo;
vec3 m_AlbedoColor;
bool u_HasMetalness;
float u_MetalnessValue;
bool u_HasRoughness;
float u_RoughnessValue;
bool u_HasAO;
float u_AOValue;
bool u_HasNormal;
bool u_HasDisplacement;
int u_HasAlbedo;
vec3 m_AlbedoColor; // 16 byte
int u_HasMetalness; // 32 byte
float u_MetalnessValue; // 36 byte
int u_HasRoughness; // 40 byte
float u_RoughnessValue; // 44 byte
int u_HasAO; // 48 byte
float u_AOValue; // 52 byte
int u_HasNormal; // 56 byte
int u_HasDisplacement; // 60 byte
};
float height_scale = 0.00f;
@@ -322,22 +322,27 @@ void main()
vec2 finalTexCoords = texCoords;
vec3 finalAlbedo = m_AlbedoColor;
if(u_HasAlbedo)
if(u_HasAlbedo == 1)
finalAlbedo = texture(m_Albedo, finalTexCoords).rgb;
float finalRoughness = u_RoughnessValue;
if (u_HasRoughness )
if (u_HasRoughness == 1)
finalRoughness = texture(m_Roughness, finalTexCoords).r;
float finalMetalness = u_MetalnessValue;
if (u_HasMetalness)
if (u_HasMetalness == 1)
finalMetalness = texture(m_Metalness, finalTexCoords).r;
float finalAO = u_AOValue;
if (u_HasAO)
if (u_HasAO == 1)
finalAO = texture(m_AO, finalTexCoords).r;
vec3 finalNormal = texture(m_Normal, finalTexCoords).rgb;
vec3 finalNormal = vec3(0.5, 0.5, 1.0);
if (u_HasNormal == 1)
{
finalNormal = texture(m_Normal, finalTexCoords).rgb;
}
finalNormal = finalNormal * 2.0 - 1.0;
finalNormal = v_TBN * normalize(finalNormal);

View File

@@ -57,10 +57,10 @@ Material::Material(const glm::vec3 albedoColor)
{
glGenBuffers(1, &UBO);
glBindBuffer(GL_UNIFORM_BUFFER, UBO);
glBufferData(GL_UNIFORM_BUFFER, sizeof(UBOStructure), NULL, GL_STATIC_DRAW);
glBufferData(GL_UNIFORM_BUFFER, 128, NULL, GL_STATIC_DRAW);
glBindBuffer(GL_UNIFORM_BUFFER, 0);
data.m_AlbedoColor = myVec3{ albedoColor.r, albedoColor.g, albedoColor.b};
data.m_AlbedoColor = Vector3{ albedoColor.r, albedoColor.g, albedoColor.b};
m_Name = "New material";
@@ -90,7 +90,21 @@ void Material::Bind()
MaterialManager::Get()->CurrentlyBoundedMaterial = m_Name;
glBindBuffer(GL_UNIFORM_BUFFER, UBO);
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(UBOStructure), &data);
//glBufferSubData(GL_UNIFORM_BUFFER, 0, 4, &data.u_HasAlbedo);
//
//glBufferSubData(GL_UNIFORM_BUFFER, 16, 12, &data.m_AlbedoColor);
//
//glBufferSubData(GL_UNIFORM_BUFFER, 28, 4, &data.u_HasMetalness);
//glBufferSubData(GL_UNIFORM_BUFFER, 32, 4, &data.u_MetalnessValue);
//glBufferSubData(GL_UNIFORM_BUFFER, 36, 4, &data.u_HasRoughness);
//glBufferSubData(GL_UNIFORM_BUFFER, 40, 4, &data.u_RoughnessValue);
//
//glBufferSubData(GL_UNIFORM_BUFFER, 44, 4, &data.u_HasAO);
//glBufferSubData(GL_UNIFORM_BUFFER, 48, 4, &data.u_AOValue);
//glBufferSubData(GL_UNIFORM_BUFFER, 52, 4, &data.u_HasNormal);
//glBufferSubData(GL_UNIFORM_BUFFER, 56, 4, &data.u_HasDisplacement);
glBindBuffer(GL_UNIFORM_BUFFER, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, 32, UBO);

View File

@@ -10,20 +10,22 @@ struct myVec3 {
float r;
float g;
float b;
float a;
};
struct UBOStructure {
int u_HasAlbedo;
myVec3 m_AlbedoColor;
uint32_t u_HasMetalness;
float padding;
float padding2;
float padding3;
glm::vec3 m_AlbedoColor;
int u_HasMetalness;
float u_MetalnessValue;
uint32_t u_HasRoughness;
int u_HasRoughness;
float u_RoughnessValue;
uint32_t u_HasAO;
int u_HasAO;
float u_AOValue;
uint32_t u_HasNormal;
uint32_t u_HasDisplacement;
int u_HasNormal;
int u_HasDisplacement;
};
class Material
@@ -39,10 +41,12 @@ public:
Ref<Texture> m_Normal;
Ref<Texture> m_Displacement;
UBOStructure data{
0, // has labedo
myVec3{0.f, 0.f, 0.f, 1.0f}, // m_AlbedoColor
0, // padding
0, // padding
0, // padding
glm::vec3{0.f, 0.f, 0.f}, // m_AlbedoColor
0, // u_HasMetalness
0.5f, // u_MetalnessValue
0, // u_HasRoughness