|
@@ -376,8 +376,6 @@ Texture2D LoadTextureFromImage(Image image)
|
|
|
texture.height = image.height;
|
|
|
texture.mipmaps = image.mipmaps;
|
|
|
texture.format = image.format;
|
|
|
-
|
|
|
- TraceLog(LOG_INFO, "[TEX ID %i] Parameters: %ix%i, %i mips, format %i", texture.id, texture.width, texture.height, texture.mipmaps, texture.format);
|
|
|
|
|
|
return texture;
|
|
|
}
|
|
@@ -678,7 +676,7 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
{
|
|
|
Color *pixels = GetImageData(*image);
|
|
|
|
|
|
- free(image->data);
|
|
|
+ free(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end...
|
|
|
|
|
|
image->format = newFormat;
|
|
|
|
|
@@ -700,11 +698,10 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
{
|
|
|
image->data = (unsigned char *)malloc(image->width*image->height*2*sizeof(unsigned char));
|
|
|
|
|
|
- for (int i = 0; i < image->width*image->height*2; i += 2)
|
|
|
+ for (int i = 0; i < image->width*image->height*2; i += 2, k++)
|
|
|
{
|
|
|
((unsigned char *)image->data)[i] = (unsigned char)((float)pixels[k].r*0.299f + (float)pixels[k].g*0.587f + (float)pixels[k].b*0.114f);
|
|
|
((unsigned char *)image->data)[i + 1] = pixels[k].a;
|
|
|
- k++;
|
|
|
}
|
|
|
|
|
|
} break;
|
|
@@ -730,12 +727,11 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
{
|
|
|
image->data = (unsigned char *)malloc(image->width*image->height*3*sizeof(unsigned char));
|
|
|
|
|
|
- for (int i = 0; i < image->width*image->height*3; i += 3)
|
|
|
+ for (int i = 0; i < image->width*image->height*3; i += 3, k++)
|
|
|
{
|
|
|
((unsigned char *)image->data)[i] = pixels[k].r;
|
|
|
((unsigned char *)image->data)[i + 1] = pixels[k].g;
|
|
|
((unsigned char *)image->data)[i + 2] = pixels[k].b;
|
|
|
- k++;
|
|
|
}
|
|
|
} break;
|
|
|
case UNCOMPRESSED_R5G5B5A1:
|
|
@@ -784,13 +780,12 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
{
|
|
|
image->data = (unsigned char *)malloc(image->width*image->height*4*sizeof(unsigned char));
|
|
|
|
|
|
- for (int i = 0; i < image->width*image->height*3; i += 3)
|
|
|
+ for (int i = 0; i < image->width*image->height*3; i += 3, k++)
|
|
|
{
|
|
|
((unsigned char *)image->data)[i] = pixels[k].r;
|
|
|
((unsigned char *)image->data)[i + 1] = pixels[k].g;
|
|
|
((unsigned char *)image->data)[i + 2] = pixels[k].b;
|
|
|
((unsigned char *)image->data)[i + 3] = pixels[k].a;
|
|
|
- k++;
|
|
|
}
|
|
|
} break;
|
|
|
case UNCOMPRESSED_R32:
|
|
@@ -806,25 +801,23 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
{
|
|
|
image->data = (float *)malloc(image->width*image->height*3*sizeof(float));
|
|
|
|
|
|
- for (int i = 0; i < image->width*image->height*3; i += 3)
|
|
|
+ for (int i = 0; i < image->width*image->height*3; i += 3, k++)
|
|
|
{
|
|
|
((float *)image->data)[i] = (float)pixels[k].r/255.0f;
|
|
|
((float *)image->data)[i + 1] = (float)pixels[k].g/255.0f;
|
|
|
((float *)image->data)[i + 2] = (float)pixels[k].b/255.0f;
|
|
|
- k++;
|
|
|
}
|
|
|
} break;
|
|
|
case UNCOMPRESSED_R32G32B32A32:
|
|
|
{
|
|
|
image->data = (float *)malloc(image->width*image->height*4*sizeof(float));
|
|
|
|
|
|
- for (int i = 0; i < image->width*image->height*4; i += 4)
|
|
|
+ for (int i = 0; i < image->width*image->height*4; i += 4, k++)
|
|
|
{
|
|
|
((float *)image->data)[i] = (float)pixels[k].r/255.0f;
|
|
|
((float *)image->data)[i + 1] = (float)pixels[k].g/255.0f;
|
|
|
((float *)image->data)[i + 2] = (float)pixels[k].b/255.0f;
|
|
|
((float *)image->data)[i + 3] = (float)pixels[k].a/255.0f;
|
|
|
- k++;
|
|
|
}
|
|
|
} break;
|
|
|
default: break;
|
|
@@ -834,7 +827,11 @@ void ImageFormat(Image *image, int newFormat)
|
|
|
|
|
|
// In case original image had mipmaps, generate mipmaps for formated image
|
|
|
// NOTE: Original mipmaps are replaced by new ones, if custom mipmaps were used, they are lost
|
|
|
- if (image->mipmaps > 1) ImageMipmaps(image);
|
|
|
+ if (image->mipmaps > 1)
|
|
|
+ {
|
|
|
+ image->mipmaps = 1;
|
|
|
+ ImageMipmaps(image);
|
|
|
+ }
|
|
|
}
|
|
|
else TraceLog(LOG_WARNING, "Image data format is compressed, can not be converted");
|
|
|
}
|
|
@@ -1106,9 +1103,9 @@ void ImageMipmaps(Image *image)
|
|
|
mipSize += GetPixelDataSize(mipWidth, mipHeight, image->format); // Add mipmap size (in bytes)
|
|
|
}
|
|
|
|
|
|
- TraceLog(LOG_DEBUG, "Total mipmaps required: %i", mipCount);
|
|
|
- TraceLog(LOG_DEBUG, "Total size of data required: %i", mipSize);
|
|
|
- TraceLog(LOG_DEBUG, "Image data original memory point: %i", image->data);
|
|
|
+ TraceLog(LOG_DEBUG, "Mipmaps available: %i - Mipmaps required: %i", image->mipmaps, mipCount);
|
|
|
+ TraceLog(LOG_DEBUG, "Mipmaps total size required: %i", mipSize);
|
|
|
+ TraceLog(LOG_DEBUG, "Image data memory start address: 0x%x", image->data);
|
|
|
|
|
|
if (image->mipmaps < mipCount)
|
|
|
{
|
|
@@ -1117,7 +1114,7 @@ void ImageMipmaps(Image *image)
|
|
|
if (temp != NULL)
|
|
|
{
|
|
|
image->data = temp; // Assign new pointer (new size) to store mipmaps data
|
|
|
- TraceLog(LOG_DEBUG, "Image data memory point reallocated: %i", temp);
|
|
|
+ TraceLog(LOG_DEBUG, "Image data memory point reallocated: 0x%x", temp);
|
|
|
}
|
|
|
else TraceLog(LOG_WARNING, "Mipmaps required memory could not be allocated");
|
|
|
|
|
@@ -1131,7 +1128,7 @@ void ImageMipmaps(Image *image)
|
|
|
|
|
|
for (int i = 1; i < mipCount; i++)
|
|
|
{
|
|
|
- TraceLog(LOG_DEBUG, "Next mipmap level %i (%i x %i) - size %i - mem pos: %i", i, mipWidth, mipHeight, mipSize, nextmip);
|
|
|
+ TraceLog(LOG_DEBUG, "Gen mipmap level: %i (%i x %i) - size: %i - offset: 0x%x", i, mipWidth, mipHeight, mipSize, nextmip);
|
|
|
|
|
|
ImageResize(&imCopy, mipWidth, mipHeight); // Uses internally Mitchell cubic downscale filter
|
|
|
|