X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=material.cpp;h=3da687c3a87d0c40d20577a06848be7f6a520d2e;hp=838f6736d637e2a8792959932afcfceab32acd9c;hb=HEAD;hpb=dbd855720a9af7d6e599ddc50bbbb0dee85458a5 diff --git a/material.cpp b/material.cpp index 838f673..852a4b5 100644 --- a/material.cpp +++ b/material.cpp @@ -49,11 +49,24 @@ Material::Texture::Texture(const aiString fileName, const aiScene &scene) { glTexImage2D(GL_TEXTURE_2D, 0, img.internalFormat(), img.width(), img.height(), 0, img.format(), img.type(), img.data()); } + // magnifying - no bigger mipmap available, so use linear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + // minifying - use a linear blend of two mipmaps + // which are themselves filtered linearly + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + + float aniso = 0; + glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &aniso); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, aniso); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glGenerateMipmap(GL_TEXTURE_2D); } void Material::bind() const { - if (ambientOcclusion != nullptr) { + if (albedo != nullptr) { glUniform1i(glGetUniformLocation(progId, "mat.albedoMap"), 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, albedo->texId); @@ -72,7 +85,7 @@ void Material::bind() const { } if (metallicRoughness != nullptr) { - glUniform1i(glGetUniformLocation(progId, "metallicRoughnessMap"), 2); + glUniform1i(glGetUniformLocation(progId, "mat.metallicRoughnessMap"), 2); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, metallicRoughness->texId); glUniform1i(glGetUniformLocation(progId, "mat.hasMetallicRoughness"), 1); @@ -81,7 +94,7 @@ void Material::bind() const { } if (ambientOcclusion != nullptr) { - glUniform1i(glGetUniformLocation(progId, "aoMap"), 3); + glUniform1i(glGetUniformLocation(progId, "mat.aoMap"), 3); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, ambientOcclusion->texId); glUniform1i(glGetUniformLocation(progId, "mat.hasAo"), 1);