Browse Source

Moved another AMD-specific driver bug workaround to the OpenGL Bugs struct.

Alex Szpakowski 9 years ago
parent
commit
abd3c64bc5

+ 1 - 4
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);
 	}

+ 4 - 1
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;

+ 9 - 0
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: