- glUniform3f(glGetUniformLocation(progId, "material.ambient"), ambient.r, ambient.g, ambient.b);
- glUniform3f(glGetUniformLocation(progId, "material.diffuse"), diffuse.r, diffuse.g, diffuse.b);
- glUniform3f(glGetUniformLocation(progId, "material.specular"), specular.r, specular.g, specular.b);
- glUniform1f(glGetUniformLocation(progId, "material.shininess"), shininess);
- glUniform1i(glGetUniformLocation(progId, "material.hasTexture"), texture != nullptr);
-
- if (texture)
- glBindTexture(GL_TEXTURE_2D, texture->texId);
+ if (albedo != nullptr) {
+ glUniform1i(glGetUniformLocation(progId, "mat.albedoMap"), 0);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, albedo->texId);
+ glUniform1i(glGetUniformLocation(progId, "mat.hasAlbedo"), 1);
+ } else {
+ glUniform1i(glGetUniformLocation(progId, "mat.hasAlbedo"), 0);
+ }
+
+ if (normal != nullptr) {
+ glUniform1i(glGetUniformLocation(progId, "mat.normalMap"), 1);
+ glActiveTexture(GL_TEXTURE1);
+ glBindTexture(GL_TEXTURE_2D, normal->texId);
+ glUniform1i(glGetUniformLocation(progId, "mat.hasNormal"), 1);
+ } else {
+ glUniform1i(glGetUniformLocation(progId, "mat.hasNormal"), 0);
+ }
+
+ if (metallicRoughness != nullptr) {
+ glUniform1i(glGetUniformLocation(progId, "mat.metallicRoughnessMap"), 2);
+ glActiveTexture(GL_TEXTURE2);
+ glBindTexture(GL_TEXTURE_2D, metallicRoughness->texId);
+ glUniform1i(glGetUniformLocation(progId, "mat.hasMetallicRoughness"), 1);
+ } else {
+ glUniform1i(glGetUniformLocation(progId, "mat.hasMetallicRoughness"), 0);
+ }
+
+ if (ambientOcclusion != nullptr) {
+ glUniform1i(glGetUniformLocation(progId, "mat.aoMap"), 3);
+ glActiveTexture(GL_TEXTURE3);
+ glBindTexture(GL_TEXTURE_2D, ambientOcclusion->texId);
+ glUniform1i(glGetUniformLocation(progId, "mat.hasAo"), 1);
+ } else {
+ glUniform1i(glGetUniformLocation(progId, "mat.hasAo"), 0);
+ }