fix: correctly implement all mipmap levels and cases

This commit is contained in:
Hayden Kowalchuk 2019-08-17 17:54:10 -04:00
parent 28db49ed7f
commit 8e8ba4e4f1

View File

@ -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;