Răsfoiți Sursa

REVIEWED: `rl_gputex.h` library to be usable standalone

Ray 1 zi în urmă
părinte
comite
d7893141f3
2 a modificat fișierele cu 125 adăugiri și 102 ștergeri
  1. 120 89
      src/external/rl_gputex.h
  2. 5 13
      src/rtextures.c

+ 120 - 89
src/external/rl_gputex.h

@@ -30,10 +30,10 @@
 *   #define RL_GPUTEX_SUPPORT_ASTC
 *   #define RL_GPUTEX_SUPPORT_ASTC
 *       Define desired file formats to be supported
 *       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
 *       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
 *       Define, if you wish to provide your own warning function
 *       Make sure that this macro puts newline character '\n' at the end
 *       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
 *       There is no need to do so when statically linking
 *
 *
 *   VERSIONS HISTORY:
 *   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
 *       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
 *           in order to decouple the library from Raylib by introducing few new macros; library still
 *           requires Raylib in order to function properly
 *           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
 *   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
 *   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.
 *   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)
     #define RLGPUTEXAPI  // Functions defined as 'extern' by default (implicit specifiers)
 #endif
 #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
 // 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_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()
     #include <stdio.h>   // Required for: printf()
 #endif
 #endif
 
 
 #if !defined(RL_GPUTEX_MALLOC) || !defined(RL_GPUTEX_NULL)
 #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
 #endif
 
 
 #if !defined(RL_GPUTEX_MEMCPY)
 #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)
 #if !defined(RL_GPUTEX_MALLOC)
     #define RL_GPUTEX_MALLOC(sz)        malloc(sz)
     #define RL_GPUTEX_MALLOC(sz)        malloc(sz)
     #define RL_GPUTEX_CALLOC(num, sz)   calloc(num, 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)
     #define RL_GPUTEX_FREE(ptr)         free(ptr)
 #endif
 #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)
     #define RL_GPUTEX_MEMCPY(dest, src, num)  memcpy(dest, src, num)
 #endif
 #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
 // NOTE: Avoiding those calls, also avoids const strings memory usage
 // WARN: This macro expects that newline character is added automatically
 // WARN: This macro expects that newline character is added automatically
 //       in order to match the functionality of Raylib's TRACELOG()
 //       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
     #endif
 #else
 #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
     #endif
-    #define RL_GPUTEX_WARN(...)
+    #define RL_GPUTEX_LOG(...)
 #endif
 #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] != ' '))
         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
         else
         {
         {
@@ -257,8 +288,8 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
             *width = header->width;
             *width = header->width;
             *height = header->height;
             *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;
             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);
                     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
                 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;
                             ((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
                     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;
                             ((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);
                 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
             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;
                     ((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
             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:
                     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;
                     } 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;
                     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] != ' '))
         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
         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);
             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') ||
         if ((header->id[1] != 'K') || (header->id[2] != 'T') || (header->id[3] != 'X') ||
             (header->id[4] != ' ') || (header->id[5] != '1') || (header->id[6] != '1'))
             (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
         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);
             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!
             // 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
     // 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
     else
     {
     {
         RL_GPUTEX_MEMCPY(file_data_ptr, &header, sizeof(ktx_header));
         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);
         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
         else (void)0; // WARN: this branch is handled by Raylib, since rl_gputex only prints warnings
 
 
         int result = fclose(file);
         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;
         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
     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))
             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
             else
             {
             {
@@ -746,24 +777,24 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_
                 *mips = header->num_mipmaps;
                 *mips = header->num_mipmaps;
 
 
                 // Check data format
                 // 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'))
                 else if ((header->channels[0] == 'r') && (header->channels[1] == 'g') && (header->channels[2] == 'b'))
                 {
                 {
                     if (header->channels[3] == 'a')
                     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)
                     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
                 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;
                 int bpp = 0;
                 switch (*format)
                 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;
                     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);
                 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;
     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))
         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
         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);
                 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)
     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;
         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 texture is smaller, minimum dataSize is 8 or 16
     if ((width < 4) && (height < 4))
     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;
     return data_size;

+ 5 - 13
src/rtextures.c

@@ -169,22 +169,14 @@
         #pragma GCC diagnostic ignored "-Wunused-function"
         #pragma GCC diagnostic ignored "-Wunused-function"
     #endif
     #endif
  
  
-
-    #define RL_GPUTEX_MALLOC     RL_MALLOC
-    #define RL_GPUTEX_CALLOC     RL_CALLOC
-    #define RL_GPUTEX_REALLOC    RL_REALLOC
-    #define RL_GPUTEX_FREE       RL_FREE
-    #define RL_GPUTEX_WARN(...)  TRACELOG(LOG_WARNING, "IMAGE: " __VA_ARGS__)
-    #define RL_GPUTEX_SHOW_WARN_INFO
-
-    // FIXME: probably, we should NOT export public functions from rl_gputex
-    //        but this is how it always worked... so let's keep it this way
-    #define RLGPUTEXAPI RLAPI
-
+    #define RL_GPUTEX_MALLOC RL_MALLOC
+    #define RL_GPUTEX_CALLOC RL_CALLOC
+    #define RL_GPUTEX_FREE RL_FREE
+    #define RL_GPUTEX_LOG(...) TRACELOG(LOG_WARNING, "IMAGE: " __VA_ARGS__)
+    #define RL_GPUTEX_SHOW_LOG_INFO
     #define RL_GPUTEX_IMPLEMENTATION
     #define RL_GPUTEX_IMPLEMENTATION
     #include "external/rl_gputex.h"         // Required for: rl_load_xxx_from_memory()
     #include "external/rl_gputex.h"         // Required for: rl_load_xxx_from_memory()
                                             // NOTE: Used to read compressed textures data (multiple formats support)
                                             // NOTE: Used to read compressed textures data (multiple formats support)
-
     #if defined(__GNUC__) // GCC and Clang
     #if defined(__GNUC__) // GCC and Clang
         #pragma GCC diagnostic pop
         #pragma GCC diagnostic pop
     #endif
     #endif