mirror of
				https://github.com/MaddyThorson/StrawberryBF.git
				synced 2025-11-04 01:41:33 +08:00 
			
		
		
		
	Properly implement texture Mipmap generation
* Add missing GL_GENERATE_MIPMAP * Add one-time retrieval of glGetIntegerv(GL_MAJOR_VERSION, *) * Opt for Mipmap generation methos based on OGL version major (<3.0 = GL_GENERATE_MIPMAP, >=3.0 = glGenerateMipmap)
This commit is contained in:
		@ -221,6 +221,7 @@ namespace Strawberry
 | 
			
		||||
        public const uint GL_TEXTURE_DEPTH = 0x8071;
 | 
			
		||||
        public const uint GL_TEXTURE_WRAP_R = 0x8072;
 | 
			
		||||
        public const uint GL_MAX_3D_TEXTURE_SIZE = 0x8073;
 | 
			
		||||
        public const uint GL_GENERATE_MIPMAP = 0x8191;
 | 
			
		||||
        public const uint GL_UNSIGNED_BYTE_2_3_3_REV = 0x8362;
 | 
			
		||||
        public const uint GL_UNSIGNED_SHORT_5_6_5 = 0x8363;
 | 
			
		||||
        public const uint GL_UNSIGNED_SHORT_5_6_5_REV = 0x8364;
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,16 @@ namespace Strawberry
 | 
			
		||||
		public int Width { get; private set; }
 | 
			
		||||
		public int Height { get; private set; }
 | 
			
		||||
 | 
			
		||||
		private static int32 OGLMajorV = -1;
 | 
			
		||||
 | 
			
		||||
		public this(int width, int height, uint8* pixels, bool indLinear, bool indClamp)
 | 
			
		||||
		{
 | 
			
		||||
			Width = width;
 | 
			
		||||
			Height = height;
 | 
			
		||||
 | 
			
		||||
			if (OGLMajorV == -1)
 | 
			
		||||
				GL.glGetIntegerv(GL.GL_MAJOR_VERSION, &OGLMajorV);
 | 
			
		||||
 | 
			
		||||
			GL.glGenTextures(1, &Handle);
 | 
			
		||||
			GL.glBindTexture(GL.GL_TEXTURE_2D, Handle);
 | 
			
		||||
 | 
			
		||||
@ -26,9 +31,13 @@ namespace Strawberry
 | 
			
		||||
				GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (OGLMajorV < 3) // OpenGL > 1.4 && < 3.0
 | 
			
		||||
				GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_GENERATE_MIPMAP, GL.GL_TRUE);
 | 
			
		||||
 | 
			
		||||
			GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixels);
 | 
			
		||||
 | 
			
		||||
			GL.glGenerateMipmap(GL.GL_TEXTURE_2D); // Unavailable in OpenGL 2.1.
 | 
			
		||||
			if (OGLMajorV >= 3) // OpenGL >= 3.0
 | 
			
		||||
				GL.glGenerateMipmap(GL.GL_TEXTURE_2D);
 | 
			
		||||
 | 
			
		||||
			// Clear state
 | 
			
		||||
			GL.glBindTexture(GL.GL_TEXTURE_2D, 0);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user