|
@@ -30,10 +30,10 @@
|
|
|
* #define RL_GPUTEX_SUPPORT_ASTC
|
|
|
* Define desired file formats to be supported
|
|
|
*
|
|
|
-* #define RL_GPUTEX_SHOW_WARN_INFO
|
|
|
+* #define RL_GPUTEX_SHOW_LOG_INFO
|
|
|
* Define, if you wish to see warnings generated by the library
|
|
|
-* This will include <stdio.h> unless you provide your own RL_GPUTEX_WARN
|
|
|
-* #define RL_GPUTEX_WARN
|
|
|
+* This will include <stdio.h> unless you provide your own RL_GPUTEX_LOG
|
|
|
+* #define RL_GPUTEX_LOG
|
|
|
* Define, if you wish to provide your own warning function
|
|
|
* Make sure that this macro puts newline character '\n' at the end
|
|
|
*
|
|
@@ -59,15 +59,16 @@
|
|
|
* There is no need to do so when statically linking
|
|
|
*
|
|
|
* VERSIONS HISTORY:
|
|
|
-* 1.0 (17-Sep-2022) First version has been created by migrating part of compressed-texture-loading
|
|
|
-* functionality from Raylib src/rtextures.c into self-contained library
|
|
|
* 1.1 (15-Jul-2025) Several minor fixes related to specific image formats; some work has been done
|
|
|
* in order to decouple the library from Raylib by introducing few new macros; library still
|
|
|
* requires Raylib in order to function properly
|
|
|
*
|
|
|
+* 1.0 (17-Sep-2022) First version has been created by migrating part of compressed-texture-loading
|
|
|
+* functionality from Raylib src/rtextures.c into self-contained library
|
|
|
+*
|
|
|
* LICENSE: zlib/libpng
|
|
|
*
|
|
|
-* Copyright (c) 2013-2022 Ramon Santamaria (@raysan5)
|
|
|
+* Copyright (c) 2013-2025 Ramon Santamaria (@raysan5)
|
|
|
*
|
|
|
* This software is provided "as-is", without any express or implied warranty. In no event
|
|
|
* will the authors be held liable for any damages arising from the use of this software.
|
|
@@ -93,6 +94,37 @@
|
|
|
#define RLGPUTEXAPI // Functions defined as 'extern' by default (implicit specifiers)
|
|
|
#endif
|
|
|
|
|
|
+// Texture pixel formats
|
|
|
+// NOTE: Support depends on OpenGL version
|
|
|
+// WARNING: Enum values aligned with raylib/rlgl equivalent PixelFormat/rlPixelFormat enum,
|
|
|
+// to avoid value mapping between the 3 libraries format values
|
|
|
+typedef enum {
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp
|
|
|
+ RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp
|
|
|
+} rlGpuTexPixelFormat;
|
|
|
+
|
|
|
//----------------------------------------------------------------------------------
|
|
|
// Module Functions Declaration
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -124,12 +156,12 @@ RLGPUTEXAPI int rl_save_ktx_to_memory(const char *fileName, void *data, int widt
|
|
|
|
|
|
#if defined(RL_GPUTEX_IMPLEMENTATION)
|
|
|
|
|
|
-#if defined(RL_GPUTEX_SHOW_WARN_INFO) && !defined(RL_GPUTEX_WARN)
|
|
|
+#if defined(RL_GPUTEX_SHOW_LOG_INFO) && !defined(RL_GPUTEX_LOG)
|
|
|
#include <stdio.h> // Required for: printf()
|
|
|
#endif
|
|
|
|
|
|
#if !defined(RL_GPUTEX_MALLOC) || !defined(RL_GPUTEX_NULL)
|
|
|
- #include <stdlib.h> // Required for: NULL, malloc(), calloc(), free(), realloc()
|
|
|
+ #include <stdlib.h> // Required for: NULL, malloc(), calloc(), free()
|
|
|
#endif
|
|
|
|
|
|
#if !defined(RL_GPUTEX_MEMCPY)
|
|
@@ -149,7 +181,6 @@ RLGPUTEXAPI int rl_save_ktx_to_memory(const char *fileName, void *data, int widt
|
|
|
#if !defined(RL_GPUTEX_MALLOC)
|
|
|
#define RL_GPUTEX_MALLOC(sz) malloc(sz)
|
|
|
#define RL_GPUTEX_CALLOC(num, sz) calloc(num, sz)
|
|
|
- #define RL_GPUTEX_REALLOC(ptr, sz) realloc(ptr, sz)
|
|
|
#define RL_GPUTEX_FREE(ptr) free(ptr)
|
|
|
#endif
|
|
|
|
|
@@ -161,20 +192,20 @@ RLGPUTEXAPI int rl_save_ktx_to_memory(const char *fileName, void *data, int widt
|
|
|
#define RL_GPUTEX_MEMCPY(dest, src, num) memcpy(dest, src, num)
|
|
|
#endif
|
|
|
|
|
|
-// Simple warning system to avoid RPNG_LOG() calls if required
|
|
|
+// Simple warning logging system to avoid LOG() calls if required
|
|
|
// NOTE: Avoiding those calls, also avoids const strings memory usage
|
|
|
// WARN: This macro expects that newline character is added automatically
|
|
|
// in order to match the functionality of Raylib's TRACELOG()
|
|
|
-#if defined(RL_GPUTEX_SHOW_WARN_INFO)
|
|
|
- #if !defined(RL_GPUTEX_WARN)
|
|
|
- #define RL_GPUTEX_WARN(...) (void)(printf("RL_GPUTEX: WARNING: " __VA_ARGS__), printf("\n"))
|
|
|
+#if defined(RL_GPUTEX_SHOW_LOG_INFO)
|
|
|
+ #if !defined(RL_GPUTEX_LOG)
|
|
|
+ #define RL_GPUTEX_LOG(...) (void)(printf("RL_GPUTEX: WARNING: " __VA_ARGS__), printf("\n"))
|
|
|
#endif
|
|
|
#else
|
|
|
- #if defined(RL_GPUTEX_WARN)
|
|
|
- // undefine it first in order to supress warnings about macro redefinition
|
|
|
- #undef RL_GPUTEX_WARN
|
|
|
+ #if defined(RL_GPUTEX_LOG)
|
|
|
+ // Undefine it first in order to supress warnings about macro redefinition
|
|
|
+ #undef RL_GPUTEX_LOG
|
|
|
#endif
|
|
|
- #define RL_GPUTEX_WARN(...)
|
|
|
+ #define RL_GPUTEX_LOG(...)
|
|
|
#endif
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -246,7 +277,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
if ((dds_header_id[0] != 'D') || (dds_header_id[1] != 'D') || (dds_header_id[2] != 'S') || (dds_header_id[3] != ' '))
|
|
|
{
|
|
|
- RL_GPUTEX_WARN("DDS file data not valid");
|
|
|
+ RL_GPUTEX_LOG("DDS file data not valid");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -257,8 +288,8 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
*width = header->width;
|
|
|
*height = header->height;
|
|
|
|
|
|
- if (*width % 4 != 0) RL_GPUTEX_WARN("DDS file width must be multiple of 4. Image will not display correctly");
|
|
|
- if (*height % 4 != 0) RL_GPUTEX_WARN("DDS file height must be multiple of 4. Image will not display correctly");
|
|
|
+ if (*width % 4 != 0) RL_GPUTEX_LOG("DDS file width must be multiple of 4. Image will not display correctly");
|
|
|
+ if (*height % 4 != 0) RL_GPUTEX_LOG("DDS file height must be multiple of 4. Image will not display correctly");
|
|
|
|
|
|
image_pixel_size = header->width*header->height;
|
|
|
|
|
@@ -275,7 +306,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
|
|
|
- *format = PIXELFORMAT_UNCOMPRESSED_R5G6B5;
|
|
|
+ *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5;
|
|
|
}
|
|
|
else if (header->ddspf.flags == 0x41) // With alpha channel
|
|
|
{
|
|
@@ -297,7 +328,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
((unsigned short *)image_data)[i] += alpha;
|
|
|
}
|
|
|
|
|
|
- *format = PIXELFORMAT_UNCOMPRESSED_R5G5B5A1;
|
|
|
+ *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1;
|
|
|
}
|
|
|
else if (header->ddspf.a_bit_mask == 0xf000) // 4bit alpha
|
|
|
{
|
|
@@ -317,7 +348,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
((unsigned short *)image_data)[i] += alpha;
|
|
|
}
|
|
|
|
|
|
- *format = PIXELFORMAT_UNCOMPRESSED_R4G4B4A4;
|
|
|
+ *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -329,7 +360,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
|
|
|
- *format = PIXELFORMAT_UNCOMPRESSED_R8G8B8;
|
|
|
+ *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8;
|
|
|
}
|
|
|
else if ((header->ddspf.flags == 0x41) && (header->ddspf.rgb_bit_count == 32)) // DDS_RGBA, no compressed
|
|
|
{
|
|
@@ -351,7 +382,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
((unsigned char *)image_data)[i + 2] = blue;
|
|
|
}
|
|
|
|
|
|
- *format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
|
|
+ *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
|
|
}
|
|
|
else if (((header->ddspf.flags == 0x04) || (header->ddspf.flags == 0x05)) && (header->ddspf.fourcc > 0)) // Compressed
|
|
|
{
|
|
@@ -369,11 +400,11 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
{
|
|
|
case FOURCC_DXT1:
|
|
|
{
|
|
|
- if (header->ddspf.flags == 0x04) *format = PIXELFORMAT_COMPRESSED_DXT1_RGB;
|
|
|
- else *format = PIXELFORMAT_COMPRESSED_DXT1_RGBA;
|
|
|
+ if (header->ddspf.flags == 0x04) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB;
|
|
|
+ else *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGBA;
|
|
|
} break;
|
|
|
- case FOURCC_DXT3: *format = PIXELFORMAT_COMPRESSED_DXT3_RGBA; break;
|
|
|
- case FOURCC_DXT5: *format = PIXELFORMAT_COMPRESSED_DXT5_RGBA; break;
|
|
|
+ case FOURCC_DXT3: *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA; break;
|
|
|
+ case FOURCC_DXT5: *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT5_RGBA; break;
|
|
|
default: break;
|
|
|
}
|
|
|
}
|
|
@@ -427,7 +458,7 @@ void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
if ((header->id[0] != 'P') || (header->id[1] != 'K') || (header->id[2] != 'M') || (header->id[3] != ' '))
|
|
|
{
|
|
|
- RL_GPUTEX_WARN("PKM file data not valid");
|
|
|
+ RL_GPUTEX_LOG("PKM file data not valid");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -451,9 +482,9 @@ void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
|
|
|
- if (header->format == 0) *format = PIXELFORMAT_COMPRESSED_ETC1_RGB;
|
|
|
- else if (header->format == 1) *format = PIXELFORMAT_COMPRESSED_ETC2_RGB;
|
|
|
- else if (header->format == 3) *format = PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA;
|
|
|
+ if (header->format == 0) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC1_RGB;
|
|
|
+ else if (header->format == 1) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_RGB;
|
|
|
+ else if (header->format == 3) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -511,7 +542,7 @@ void *rl_load_ktx_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
if ((header->id[1] != 'K') || (header->id[2] != 'T') || (header->id[3] != 'X') ||
|
|
|
(header->id[4] != ' ') || (header->id[5] != '1') || (header->id[6] != '1'))
|
|
|
{
|
|
|
- RL_GPUTEX_WARN("KTX file data not valid");
|
|
|
+ RL_GPUTEX_LOG("KTX file data not valid");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -530,9 +561,9 @@ void *rl_load_ktx_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
|
|
|
- if (header->gl_internal_format == 0x8D64) *format = PIXELFORMAT_COMPRESSED_ETC1_RGB;
|
|
|
- else if (header->gl_internal_format == 0x9274) *format = PIXELFORMAT_COMPRESSED_ETC2_RGB;
|
|
|
- else if (header->gl_internal_format == 0x9278) *format = PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA;
|
|
|
+ if (header->gl_internal_format == 0x8D64) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC1_RGB;
|
|
|
+ else if (header->gl_internal_format == 0x9274) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_RGB;
|
|
|
+ else if (header->gl_internal_format == 0x9278) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA;
|
|
|
|
|
|
// TODO: Support uncompressed data formats? Right now it returns format = 0!
|
|
|
}
|
|
@@ -609,7 +640,7 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo
|
|
|
|
|
|
// NOTE: We can save into a .ktx all PixelFormats supported by raylib, including compressed formats like DXT, ETC or ASTC
|
|
|
|
|
|
- if (header.gl_format == -1) RL_GPUTEX_WARN("GL format not supported for KTX export (%i)", header.gl_format);
|
|
|
+ if (header.gl_format == -1) RL_GPUTEX_LOG("GL format not supported for KTX export (%i)", header.gl_format);
|
|
|
else
|
|
|
{
|
|
|
RL_GPUTEX_MEMCPY(file_data_ptr, &header, sizeof(ktx_header));
|
|
@@ -642,16 +673,16 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo
|
|
|
{
|
|
|
unsigned int count = (unsigned int)fwrite(file_data, sizeof(unsigned char), data_size, file);
|
|
|
|
|
|
- if (count == 0) RL_GPUTEX_WARN("FILEIO: [%s] Failed to write file", file_name);
|
|
|
- else if (count != data_size) RL_GPUTEX_WARN("FILEIO: [%s] File partially written", file_name);
|
|
|
+ if (count == 0) RL_GPUTEX_LOG("FILEIO: [%s] Failed to write file", file_name);
|
|
|
+ else if (count != data_size) RL_GPUTEX_LOG("FILEIO: [%s] File partially written", file_name);
|
|
|
else (void)0; // WARN: this branch is handled by Raylib, since rl_gputex only prints warnings
|
|
|
|
|
|
int result = fclose(file);
|
|
|
- if (result != 0) RL_GPUTEX_WARN("FILEIO: [%s] Failed to close file", file_name);
|
|
|
+ if (result != 0) RL_GPUTEX_LOG("FILEIO: [%s] Failed to close file", file_name);
|
|
|
|
|
|
if (result == 0 && count == data_size) success = true;
|
|
|
}
|
|
|
- else RL_GPUTEX_WARN("FILEIO: [%s] Failed to open file", file_name);
|
|
|
+ else RL_GPUTEX_LOG("FILEIO: [%s] Failed to open file", file_name);
|
|
|
|
|
|
RL_GPUTEX_FREE(file_data); // Free file data buffer
|
|
|
|
|
@@ -735,7 +766,7 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
|
|
|
if ((header->id[0] != 'P') || (header->id[1] != 'V') || (header->id[2] != 'R') || (header->id[3] != 3))
|
|
|
{
|
|
|
- RL_GPUTEX_WARN("PVR file data not valid");
|
|
|
+ RL_GPUTEX_LOG("PVR file data not valid");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -746,24 +777,24 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
*mips = header->num_mipmaps;
|
|
|
|
|
|
// Check data format
|
|
|
- if (((header->channels[0] == 'l') && (header->channels[1] == 0)) && (header->channel_depth[0] == 8)) *format = PIXELFORMAT_UNCOMPRESSED_GRAYSCALE;
|
|
|
- else if (((header->channels[0] == 'l') && (header->channels[1] == 'a')) && ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8))) *format = PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA;
|
|
|
+ if (((header->channels[0] == 'l') && (header->channels[1] == 0)) && (header->channel_depth[0] == 8)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE;
|
|
|
+ else if (((header->channels[0] == 'l') && (header->channels[1] == 'a')) && ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8))) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA;
|
|
|
else if ((header->channels[0] == 'r') && (header->channels[1] == 'g') && (header->channels[2] == 'b'))
|
|
|
{
|
|
|
if (header->channels[3] == 'a')
|
|
|
{
|
|
|
- if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 5) && (header->channel_depth[2] == 5) && (header->channel_depth[3] == 1)) *format = PIXELFORMAT_UNCOMPRESSED_R5G5B5A1;
|
|
|
- else if ((header->channel_depth[0] == 4) && (header->channel_depth[1] == 4) && (header->channel_depth[2] == 4) && (header->channel_depth[3] == 4)) *format = PIXELFORMAT_UNCOMPRESSED_R4G4B4A4;
|
|
|
- else if ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8) && (header->channel_depth[2] == 8) && (header->channel_depth[3] == 8)) *format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
|
|
+ if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 5) && (header->channel_depth[2] == 5) && (header->channel_depth[3] == 1)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1;
|
|
|
+ else if ((header->channel_depth[0] == 4) && (header->channel_depth[1] == 4) && (header->channel_depth[2] == 4) && (header->channel_depth[3] == 4)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4;
|
|
|
+ else if ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8) && (header->channel_depth[2] == 8) && (header->channel_depth[3] == 8)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
|
|
}
|
|
|
else if (header->channels[3] == 0)
|
|
|
{
|
|
|
- if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 6) && (header->channel_depth[2] == 5)) *format = PIXELFORMAT_UNCOMPRESSED_R5G6B5;
|
|
|
- else if ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8) && (header->channel_depth[2] == 8)) *format = PIXELFORMAT_UNCOMPRESSED_R8G8B8;
|
|
|
+ if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 6) && (header->channel_depth[2] == 5)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5;
|
|
|
+ else if ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8) && (header->channel_depth[2] == 8)) *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8;
|
|
|
}
|
|
|
}
|
|
|
- else if (header->channels[0] == 2) *format = PIXELFORMAT_COMPRESSED_PVRT_RGB;
|
|
|
- else if (header->channels[0] == 3) *format = PIXELFORMAT_COMPRESSED_PVRT_RGBA;
|
|
|
+ else if (header->channels[0] == 2) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGB;
|
|
|
+ else if (header->channels[0] == 3) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGBA;
|
|
|
|
|
|
file_data_ptr += header->metadata_size; // Skip meta data header
|
|
|
|
|
@@ -771,15 +802,15 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
int bpp = 0;
|
|
|
switch (*format)
|
|
|
{
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break;
|
|
|
- case PIXELFORMAT_COMPRESSED_PVRT_RGB:
|
|
|
- case PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGB:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break;
|
|
|
default: break;
|
|
|
}
|
|
|
|
|
@@ -789,7 +820,7 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
}
|
|
|
}
|
|
|
- else if (pvr_version == 52) RL_GPUTEX_WARN("PVRv2 format not supported, update your files to PVRv3");
|
|
|
+ else if (pvr_version == 52) RL_GPUTEX_LOG("PVRv2 format not supported, update your files to PVRv3");
|
|
|
}
|
|
|
|
|
|
return image_data;
|
|
@@ -829,7 +860,7 @@ void *rl_load_astc_from_memory(const unsigned char *file_data, unsigned int file
|
|
|
|
|
|
if ((header->id[3] != 0x5c) || (header->id[2] != 0xa1) || (header->id[1] != 0xab) || (header->id[0] != 0x13))
|
|
|
{
|
|
|
- RL_GPUTEX_WARN("ASTC file data not valid");
|
|
|
+ RL_GPUTEX_LOG("ASTC file data not valid");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -852,10 +883,10 @@ void *rl_load_astc_from_memory(const unsigned char *file_data, unsigned int file
|
|
|
|
|
|
RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size);
|
|
|
|
|
|
- if (bpp == 8) *format = PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA;
|
|
|
- else if (bpp == 2) *format = PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA;
|
|
|
+ if (bpp == 8) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA;
|
|
|
+ else if (bpp == 2) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA;
|
|
|
}
|
|
|
- else RL_GPUTEX_WARN("ASTC block size configuration not supported");
|
|
|
+ else RL_GPUTEX_LOG("ASTC block size configuration not supported");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -874,27 +905,27 @@ static int get_pixel_data_size(int width, int height, int format)
|
|
|
|
|
|
switch (format)
|
|
|
{
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
|
|
- case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
|
|
- case PIXELFORMAT_COMPRESSED_DXT1_RGB:
|
|
|
- case PIXELFORMAT_COMPRESSED_DXT1_RGBA:
|
|
|
- case PIXELFORMAT_COMPRESSED_ETC1_RGB:
|
|
|
- case PIXELFORMAT_COMPRESSED_ETC2_RGB:
|
|
|
- case PIXELFORMAT_COMPRESSED_PVRT_RGB:
|
|
|
- case PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break;
|
|
|
- case PIXELFORMAT_COMPRESSED_DXT3_RGBA:
|
|
|
- case PIXELFORMAT_COMPRESSED_DXT5_RGBA:
|
|
|
- case PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA:
|
|
|
- case PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: bpp = 8; break;
|
|
|
- case PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: bpp = 2; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGBA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC1_RGB:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_RGB:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGB:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT5_RGBA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA:
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: bpp = 8; break;
|
|
|
+ case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: bpp = 2; break;
|
|
|
default: break;
|
|
|
}
|
|
|
|
|
@@ -904,8 +935,8 @@ static int get_pixel_data_size(int width, int height, int format)
|
|
|
// if texture is smaller, minimum dataSize is 8 or 16
|
|
|
if ((width < 4) && (height < 4))
|
|
|
{
|
|
|
- if ((format >= PIXELFORMAT_COMPRESSED_DXT1_RGB) && (format < PIXELFORMAT_COMPRESSED_DXT3_RGBA)) data_size = 8;
|
|
|
- else if ((format >= PIXELFORMAT_COMPRESSED_DXT3_RGBA) && (format < PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA)) data_size = 16;
|
|
|
+ if ((format >= RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB) && (format < RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA)) data_size = 8;
|
|
|
+ else if ((format >= RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA) && (format < RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA)) data_size = 16;
|
|
|
}
|
|
|
|
|
|
return data_size;
|