diff --git a/src/modules/graphics/opengl/Image.cpp b/src/modules/graphics/opengl/Image.cpp index 3ef228455..43190b3dc 100644 --- a/src/modules/graphics/opengl/Image.cpp +++ b/src/modules/graphics/opengl/Image.cpp @@ -202,11 +202,8 @@ void Image::generateMipmaps() if (flags.mipmaps && !isCompressed() && (GLAD_ES_VERSION_2_0 || GLAD_VERSION_3_0 || GLAD_ARB_framebuffer_object)) { - // Driver bug: http://www.opengl.org/wiki/Common_Mistakes#Automatic_mipmap_generation -#if defined(LOVE_WINDOWS) || defined(LOVE_LINUX) - if (gl.getVendor() == OpenGL::VENDOR_AMD) + if (gl.bugs.generateMipmapsRequiresTexture2DEnable) glEnable(GL_TEXTURE_2D); -#endif glGenerateMipmap(GL_TEXTURE_2D); } diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index 387fcbdf2..42319a291 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -93,9 +93,12 @@ bool OpenGL::initContext() bugs = {}; #if defined(LOVE_WINDOWS) || defined(LOVE_LINUX) - // See the comment in OpenGL.h. + // See the comments in OpenGL.h. if (getVendor() == VENDOR_AMD) + { bugs.clearRequiresDriverTextureStateUpdate = true; + bugs.generateMipmapsRequiresTexture2DEnable = true; + } #endif contextInitialized = true; diff --git a/src/modules/graphics/opengl/OpenGL.h b/src/modules/graphics/opengl/OpenGL.h index 31597a31e..7ec940936 100644 --- a/src/modules/graphics/opengl/OpenGL.h +++ b/src/modules/graphics/opengl/OpenGL.h @@ -184,6 +184,15 @@ public: **/ bool clearRequiresDriverTextureStateUpdate; + /** + * AMD's Windows drivers don't always properly generate mipmaps unless + * glEnable(GL_TEXTURE_2D) is called directly before glGenerateMipmap. + * This only applies to legacy and Compatibility Profile contexts, of + * course. + * https://www.opengl.org/wiki/Common_Mistakes#Automatic_mipmap_generation + **/ + bool generateMipmapsRequiresTexture2DEnable; + /** * Other bugs which have workarounds that don't use conditional code at * the moment: