From 8e8ba4e4f1bd17d9dd4245ab5a5353e6c014aca8 Mon Sep 17 00:00:00 2001 From: Hayden Kowalchuk Date: Sat, 17 Aug 2019 17:54:10 -0400 Subject: [PATCH] fix: correctly implement all mipmap levels and cases --- GL/texture.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/GL/texture.c b/GL/texture.c index 8941b7a..1131889 100644 --- a/GL/texture.c +++ b/GL/texture.c @@ -163,12 +163,16 @@ GLubyte _glGetActiveTexture() { GLubyte* _glGetMipmapLocation(TextureObject* obj, GLuint level) { GLuint offset = 0; - if(obj->width == obj->height){ - - if(obj->isPaletted){ GLuint size = obj->height; + if(obj->width == size){ + if(obj->isPaletted){ switch(size >> level){ + case 1024: + offset = 0x55558; + case 512: + offset = 0x15558; + break; case 256: offset = 0x05558; break; @@ -194,14 +198,53 @@ GLubyte* _glGetMipmapLocation(TextureObject* obj, GLuint level) { offset = 0x00004; break; case 1: - case 0: + offset = 0x00003; + break; + } + } else if(obj->isCompressed) { + + switch(size >> level){ + case 1024: + offset = 0x15556; + case 512: + offset = 0x05556; + break; + case 256: + offset = 0x01556; + break; + case 128: + offset = 0x00556; + break; + case 64: + offset = 0x00156; + break; + case 32: + offset = 0x00056; + break; + case 16: + offset = 0x00016; + break; + case 8: + offset = 0x00006; + break; + case 4: + offset = 0x00002; + break; + case 2: + offset = 0x00001; + break; + case 1: offset = 0x00000; break; } - } else { - GLuint size = obj->height; + }else { switch(size >> level){ + case 1024: + offset = 0xAAAB0; + case 512: + offset = 0x2AAB0; + break; case 256: offset = 0x0AAB0; break;