|
|
@ -185,6 +185,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
if (header->ddspf.flags == 0x40) // No alpha channel |
|
|
|
{ |
|
|
|
int data_size = image_pixel_size*sizeof(unsigned short); |
|
|
|
if (header->mipmap_count > 1) data_size = data_size + data_size / 3; |
|
|
|
image_data = RL_MALLOC(data_size); |
|
|
|
|
|
|
|
memcpy(image_data, file_data_ptr, data_size); |
|
|
@ -196,6 +197,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
if (header->ddspf.a_bit_mask == 0x8000) // 1bit alpha |
|
|
|
{ |
|
|
|
int data_size = image_pixel_size*sizeof(unsigned short); |
|
|
|
if (header->mipmap_count > 1) data_size = data_size + data_size / 3; |
|
|
|
image_data = RL_MALLOC(data_size); |
|
|
|
|
|
|
|
memcpy(image_data, file_data_ptr, data_size); |
|
|
@ -215,6 +217,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
else if (header->ddspf.a_bit_mask == 0xf000) // 4bit alpha |
|
|
|
{ |
|
|
|
int data_size = image_pixel_size*sizeof(unsigned short); |
|
|
|
if (header->mipmap_count > 1) data_size = data_size + data_size / 3; |
|
|
|
image_data = RL_MALLOC(data_size); |
|
|
|
|
|
|
|
memcpy(image_data, file_data_ptr, data_size); |
|
|
@ -236,6 +239,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
else if ((header->ddspf.flags == 0x40) && (header->ddspf.rgb_bit_count == 24)) // DDS_RGB, no compressed |
|
|
|
{ |
|
|
|
int data_size = image_pixel_size*3*sizeof(unsigned char); |
|
|
|
if (header->mipmap_count > 1) data_size = data_size + data_size / 3; |
|
|
|
image_data = RL_MALLOC(data_size); |
|
|
|
|
|
|
|
memcpy(image_data, file_data_ptr, data_size); |
|
|
@ -245,6 +249,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
else if ((header->ddspf.flags == 0x41) && (header->ddspf.rgb_bit_count == 32)) // DDS_RGBA, no compressed |
|
|
|
{ |
|
|
|
int data_size = image_pixel_size*4*sizeof(unsigned char); |
|
|
|
if (header->mipmap_count > 1) data_size = data_size + data_size / 3; |
|
|
|
image_data = RL_MALLOC(data_size); |
|
|
|
|
|
|
|
memcpy(image_data, file_data_ptr, data_size); |
|
|
@ -265,9 +270,11 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ |
|
|
|
} |
|
|
|
else if (((header->ddspf.flags == 0x04) || (header->ddspf.flags == 0x05)) && (header->ddspf.fourcc > 0)) // Compressed |
|
|
|
{ |
|
|
|
// NOTE: This forces only 1 mipmap to be loaded which is not really correct but it works |
|
|
|
int data_size = (header->pitch_or_linear_size < file_size - 0x80) ? header->pitch_or_linear_size : file_size - 0x80; |
|
|
|
*mips = 1; |
|
|
|
int data_size = 0; |
|
|
|
|
|
|
|
// Calculate data size, including all mipmaps |
|
|
|
if (header->mipmap_count > 1) data_size = header->pitch_or_linear_size + header->pitch_or_linear_size / 3; |
|
|
|
else data_size = header->pitch_or_linear_size; |
|
|
|
|
|
|
|
image_data = RL_MALLOC(data_size*sizeof(unsigned char)); |
|
|
|
|
|
|
|