From abd3c64bc5ca86c43cf4d72b7a99b864d6286b32 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Wed, 13 Jan 2016 21:43:00 -0400 Subject: [PATCH] Moved another AMD-specific driver bug workaround to the OpenGL Bugs struct. --- src/modules/graphics/opengl/Image.cpp | 5 +---- src/modules/graphics/opengl/OpenGL.cpp | 5 ++++- src/modules/graphics/opengl/OpenGL.h | 9 +++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) 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: