diff --git a/CHANGELOG b/CHANGELOG index f6a3e8ad1..053ff3018 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -747,12 +747,13 @@ Detailed changes: [rexm] REVIEWED: `Makefile.Web` before trying to rebuild new example for web by @raysan5 [rexm] REVIEWED: Using `Makefile.Web` for specific web versions generation by @raysan5 +[external] RENAMED: `rl_gputex.h` to `rltexgpu.h`, compressed textures loading +[external] REVIEWED: `rltexgpu.h`, make it usable standalone by @raysan5 +[external] REVIEWED: `rltexgpu.h, fix the swizzling in `rl_load_dds_from_memory()` (#5422) by @msmith-codes +[external]`REVIEWED: `rltexgpu.h, decouple logging and memory allocation from raylib by @sleeptightAnsiC [external] REVIEWED: `jar_mod.h`, buffer overflow on memcpy by @LoneAuios [external] REVIEWED: `sdefl` and `sinfl` issues (#5367) by @raysan5 [external] REVIEWED: `sinfl_bsr()`, improvements by @RicoP -[external] REVIEWED: `rl_gputex.h`, make it usable standalone by @raysan5 -[external] REVIEWED: `rl_gputex.h,, fix the swizzling in `rl_load_dds_from_memory()` (#5422) by @msmith-codes -[external]`REVIEWED: `rl_gputex.h,, decouple logging and memory allocation from raylib by @sleeptightAnsiC [external] REVIEWED: `stb_truetype`, fix composite glyph scaling logic (#4811) by @ashishbhattarai [external] UPDATED: dr_libs (#5020) by @Emil2010 [external] UPDATED: miniaudio to v0.11.22 (#4983) by @M374LX diff --git a/HISTORY.md b/HISTORY.md index 4fc5569d5..b68ee44f4 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -419,7 +419,7 @@ Highlights for `raylib 4.5`: - **`NEW` Support QOA audio format (import/export)**: Just a couple of months ago the new [QOA file format](https://qoaformat.org/) was published, a very simple, portable and open source quite-ok-audio file format. raylib already supports it, added to `raudio` module and including audio loading from file, loading from memory, streaming from file, streaming from memory and **exporting to QOA** audio format. **Because simplicity really matters to raylib!** - - **`NEW` Module for compressed textures loading**: [`rl_gputex`](https://github.com/raysan5/raylib/blob/master/src/external/rl_gputex.h), a portable single-file header-only small library to load compressed texture file-formats (DDS, PKM, KTX, PVR, ASTC). Provided functionality is not new to raylib but it was part of the raylib `rtextures` module, now it has been moved into a separate self-contained library, **improving portability**. Note that this module is only intended to **load compressed data from files, ready to be uploaded to GPU**, no compression/decompression functionality is provided. This change is a first step towards a better modularization of raylib library. + - **`NEW` Module for compressed textures loading**: [`rl_gputex`](https://github.com/raysan5/raylib/blob/master/src/external/rltexgpu.h), a portable single-file header-only small library to load compressed texture file-formats (DDS, PKM, KTX, PVR, ASTC). Provided functionality is not new to raylib but it was part of the raylib `rtextures` module, now it has been moved into a separate self-contained library, **improving portability**. Note that this module is only intended to **load compressed data from files, ready to be uploaded to GPU**, no compression/decompression functionality is provided. This change is a first step towards a better modularization of raylib library. - **Reviewed `rlgl` module for automatic limits checking**: Again, [`rlgl`](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) has been reviewed to simplify usage. Now users do not need to worry about reaching the internal render-batch limits when they send their triangles to draw 2d/3d, `rlgl` manages it automatically! This change allows a **great simplification for other modules** like `rshapes`, `rtextures` and `rmodels` that do not need to worry about bufffer overflows and can just define as many vertex as desired! diff --git a/ROADMAP.md b/ROADMAP.md index 9d333089a..10754e52b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -13,16 +13,28 @@ Here is a wishlist with features and ideas to improve the library. Note that fea _Current version of raylib is complete and functional but there is always room for improvements._ -**raylib 5.x** - - [ ] `rcore`: Support additional platforms: iOS, consoles? - - [x] `rcore_web`: Avoid GLFW dependency, functionality can be directly implemented using emscripten SDK - - [x] `rlgl`: Review GLSL shaders naming conventions for consistency - - [ ] `textures`: Improve compressed textures support, loading and saving +**raylib 7.0** + - [ ] `rcore_desktop_win32`: Improve new Windows platform backend - inputs, highdpi + - [ ] `rcore_desktop_emscripten`: Improve new Web platform backend - inputs, highdpi + - [ ] `rcore_desktop_cocoa`: Create additional platform backend: macOS + - [ ] `rcore_desktop_x11`: Create additional platform backend: Linux/X11 + - [ ] `rcore_desktop_wayland`: Create additional platform backend: Linux/Wayland + - [ ] `rcore`: Investigate alternative embedded platforms and realtime OSs + - [ ] `rlsw`: Software renderer optimizations: mipmaps, platform-specific SIMD + - [ ] `rtextures`: Consider moving N-patch system to separate example + - [ ] `rtextures`: Review blending modes system, provide more options or better samples + - [ ] `raudio`: Support microphone input, basic API to read microphone + - [ ] `rltexgpu`: Improve compressed textures support, loading and saving, improve KTX 2.0 + - [ ] `rlobj`: Create OBJ loader, supporting material file separately (low priority) + +**raylib 6.0** + - [x] `rlsw`: New Software Renderer backend, pseudo-OpenGL 1.1 implementation + - [x] `rcore_emscripten`: New emscripten-only backend, avoiding GLFW dependency + - [x] `rlgl`: Review GLSL shaders naming conventions for consistency, redesigned shader API - [x] `rmodels`: Improve 3d objects loading, specially animations (obj, gltf) - [x] `examples`: Review all examples, add more and better code explanations - - [x] Software renderer backend? Maybe using `Image` provided API -**raylib 4.x** +**raylib 5.0** - [x] Split core module into separate platforms? - [x] Redesign gestures system, improve touch inputs management - [x] Redesign camera module (more flexible) ([#1143](https://github.com/raysan5/raylib/issues/1143), https://github.com/raysan5/raylib/discussions/2507) @@ -30,7 +42,6 @@ _Current version of raylib is complete and functional but there is always room f - [x] Focus on HTML5 ([raylib 5k gamejam](https://itch.io/jam/raylib-5k-gamejam)) and embedded platforms (RPI and similar SOCs) - [x] Additional support libraries: [raygui](https://github.com/raysan5/raygui), [rres](https://github.com/raysan5/rres) - **raylib 4.0** - [x] Improved consistency and coherency in raylib API - [x] Continuous Deployment using GitHub Actions diff --git a/projects/VS2022/raylib/raylib.vcxproj b/projects/VS2022/raylib/raylib.vcxproj index 8cc3fae7a..cf686e498 100644 --- a/projects/VS2022/raylib/raylib.vcxproj +++ b/projects/VS2022/raylib/raylib.vcxproj @@ -585,6 +585,9 @@ + + + diff --git a/projects/VS2022/raylib/raylib.vcxproj.filters b/projects/VS2022/raylib/raylib.vcxproj.filters index 17ac7f9b8..444686eab 100644 --- a/projects/VS2022/raylib/raylib.vcxproj.filters +++ b/projects/VS2022/raylib/raylib.vcxproj.filters @@ -102,6 +102,15 @@ Header Files + + Header Files + + + Header Files + + + Header Files + diff --git a/src/Makefile b/src/Makefile index 026888614..8f13b4355 100644 --- a/src/Makefile +++ b/src/Makefile @@ -959,6 +959,7 @@ ifeq ($(ROOT),root) endif rm --force --interactive --verbose $(RAYLIB_H_INSTALL_PATH)/raylib.h rm --force --interactive --verbose $(RAYLIB_H_INSTALL_PATH)/raymath.h + rm --force --interactive --verbose $(RAYLIB_H_INSTALL_PATH)/rcamera.h rm --force --interactive --verbose $(RAYLIB_H_INSTALL_PATH)/rlgl.h @echo "raylib development files removed!" else diff --git a/src/external/rlsw.h b/src/external/rlsw.h index e37b6ca9b..6e3a8c46a 100644 --- a/src/external/rlsw.h +++ b/src/external/rlsw.h @@ -969,8 +969,8 @@ typedef struct { int allocSz; // Allocated size SWfilter minFilter; // Minification filter SWfilter magFilter; // Magnification filter - SWwrap sWrap; // texcoord.x wrap mode - SWwrap tWrap; // texcoord.y wrap mode + SWwrap sWrap; // Wrap mode for texcoord.x + SWwrap tWrap; // Wrap mode for texcoord.y float tx; // Texel width float ty; // Texel height } sw_texture_t; @@ -1364,7 +1364,7 @@ static inline uint16_t sw_float_to_half_ui(uint32_t ui) // Overflow: infinity; 143 encodes exponent 16 h = (em >= (143 << 23))? 0x7c00 : h; - // NaN; note that we convert all types of NaN to qNaN + // NaN; note that all types of NaN are converted to qNaN h = (em > (255 << 23))? 0x7e00 : h; return (uint16_t)(s | h); @@ -1381,8 +1381,8 @@ static inline uint32_t sw_half_to_float_ui(uint16_t h) // Denormal: flush to zero r = (em < (1 << 10))? 0 : r; - // Infinity/NaN; note that we preserve NaN payload as a byproduct of unifying inf/nan cases - // 112 is an exponent bias fixup; since we already applied it once, applying it twice converts 31 to 255 + // Infinity/NaN; note that NaN payload is preeserved as a byproduct of unifying inf/nan cases + // 112 is an exponent bias fixup; since it was already applied once, applying it twice converts 31 to 255 r += (em >= (31 << 10))? (112 << 23) : 0; return s | r; @@ -2478,8 +2478,9 @@ static inline void sw_texture_sample_linear(float *SW_RESTRICT color, const sw_t static inline void sw_texture_sample(float *SW_RESTRICT color, const sw_texture_t *SW_RESTRICT tex, float u, float v, float dUdx, float dUdy, float dVdx, float dVdy) { - // Previous method: There is no need to compute the square root - // because using the squared value, the comparison remains (L2 > 1.0f*1.0f) + // NOTE: Commented there is the previous method used + // There was no need to compute the square root because + // using the squared value, the comparison remains (L2 > 1.0f*1.0f) //float du = sqrtf(dUdx*dUdx + dUdy*dUdy); //float dv = sqrtf(dVdx*dVdx + dVdy*dVdy); //float L = (du > dv)? du : dv; @@ -2525,10 +2526,9 @@ static inline void sw_default_framebuffer_free(sw_default_framebuffer_t *fb) static inline void sw_framebuffer_fill_color(sw_texture_t *colorBuffer, const float color[4]) { - // NOTE: MSVC doesn't support VLA, so we allocate the largest possible size - //uint8_t pixel[SW_FRAMEBUFFER_COLOR_SIZE]; - - uint8_t pixel[16]; + // NOTE: MSVC doesn't support VLA, so the largest possible size is allocated: 16 bytes + //uint8_t pixel[SW_FRAMEBUFFER_COLOR_SIZE] = { 0 }; + uint8_t pixel[16] = { 0 }; SW_FRAMEBUFFER_COLOR_SET(pixel, color, 0); uint8_t *dst = (uint8_t *)colorBuffer->pixels; @@ -2565,10 +2565,9 @@ static inline void sw_framebuffer_fill_color(sw_texture_t *colorBuffer, const fl static inline void sw_framebuffer_fill_depth(sw_texture_t *depthBuffer, float depth) { - // NOTE: MSVC doesn't support VLA, so we allocate the largest possible size - //uint8_t pixel[SW_FRAMEBUFFER_DEPTH_SIZE]; - - uint8_t pixel[4]; + // NOTE: MSVC doesn't support VLA, so the largest possible size is allocated: 4 bytes + //uint8_t pixel[SW_FRAMEBUFFER_DEPTH_SIZE] = { 0 }; + uint8_t pixel[4] = { 0 }; SW_FRAMEBUFFER_DEPTH_SET(pixel, depth, 0); uint8_t *dst = (uint8_t *)depthBuffer->pixels; @@ -3833,7 +3832,7 @@ static void sw_immediate_set_texcoord(const float texcoord[2]) static void sw_immediate_push_vertex(const float position[4]) { - // Check if we are in a valid draw mode + // Check if the draw mode is valid if (!sw_is_draw_mode_valid(RLSW.drawMode)) { RLSW.errCode = SW_INVALID_OPERATION; @@ -4153,9 +4152,9 @@ const char *swGetString(SWget name) switch (name) { - case SW_VENDOR: result = "RLSW Header"; break; - case SW_RENDERER: result = "RLSW Software Renderer"; break; - case SW_VERSION: result = "RLSW 1.0"; break; + case SW_VENDOR: result = "RLSW"; break; + case SW_RENDERER: result = "RLSW OpenGL Software Renderer"; break; + case SW_VERSION: result = RLSW_VERSION; break; case SW_EXTENSIONS: result = "None"; break; default: RLSW.errCode = SW_INVALID_ENUM; break; } @@ -4550,7 +4549,7 @@ void swOrtho(double left, double right, double bottom, double top, double znear, void swBegin(SWdraw mode) { - // Check if we can render + // Check if render is possible if (!sw_is_ready_to_render()) { RLSW.errCode = SW_INVALID_OPERATION; diff --git a/src/external/rl_gputex.h b/src/external/rltexgpu.h similarity index 74% rename from src/external/rl_gputex.h rename to src/external/rltexgpu.h index 033045bc8..eb4d2b6b1 100644 --- a/src/external/rl_gputex.h +++ b/src/external/rltexgpu.h @@ -1,6 +1,6 @@ /********************************************************************************************** * -* rl_gputex v1.1 - GPU compressed textures loading and saving +* rltexgpu v1.2 - GPU compressed textures loading and saving * * DESCRIPTION: * @@ -10,41 +10,40 @@ * Note that some file formats (DDS, PVR, KTX) also support uncompressed data storage. * In those cases data is loaded uncompressed and format is returned * -* FIXME: This library still depends on Raylib due to the following reasons: +* FIXME: This library still depends on raylib due to the following reasons: * - rl_save_ktx_to_memory() requires rlGetGlTextureFormats() from rlgl.h -* though this is not a problem, if you don't need KTX support * * TODO: * - Review rl_load_ktx_from_memory() to support KTX v2.2 specs * * CONFIGURATION: * -* #define RL_GPUTEX_SUPPORT_DDS -* #define RL_GPUTEX_SUPPORT_PKM -* #define RL_GPUTEX_SUPPORT_KTX -* #define RL_GPUTEX_SUPPORT_PVR -* #define RL_GPUTEX_SUPPORT_ASTC +* #define RLTEXGPU_SUPPORT_DDS +* #define RLTEXGPU_SUPPORT_PKM +* #define RLTEXGPU_SUPPORT_KTX +* #define RLTEXGPU_SUPPORT_PVR +* #define RLTEXGPU_SUPPORT_ASTC * Define desired file formats to be supported * -* #define RL_GPUTEX_SHOW_LOG_INFO +* #define RLTEXGPU_SHOW_LOG_INFO * Define, if you wish to see warnings generated by the library -* This will include unless you provide your own RL_GPUTEX_LOG -* #define RL_GPUTEX_LOG +* This will include unless you provide your own RLTEXGPU_LOG +* #define RLTEXGPU_LOG * Define, if you wish to provide your own warning function * Make sure that this macro puts newline character '\n' at the end * -* #define RL_GPUTEX_MALLOC -* #define RL_GPUTEX_FREE +* #define RLTEXGPU_MALLOC +* #define RLTEXGPU_FREE * Define those macros in order to provide your own libc-compliant allocator; * not doing so will include * If you're providing any of those, you must provide ALL of them, * otherwise the code will (most likely) crash... * -* #define RL_GPUTEX_NULL +* #define RLTEXGPU_NULL * Define in order to provide your own libc-compliant NULL pointer; * not doing so will include * -* #define RL_GPUTEX_MEMCPY +* #define RLTEXGPU_MEMCPY * Define in order to provide your own libc-compliant 'memcpy' function; * not doing so will include * @@ -53,12 +52,16 @@ * There is no need to do so when statically linking * * VERSIONS HISTORY: +* 1.2 (18-Mar-2026) Renamed library to `rltexgpu` +* Improved usage as standalone linrary +* Decouple logging and memory allocation from raylib +* * 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 +* 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 +* functionality from raylib src/rtextures.c into self-contained library * * LICENSE: zlib/libpng * @@ -81,8 +84,8 @@ * **********************************************************************************************/ -#ifndef RL_GPUTEX_H -#define RL_GPUTEX_H +#ifndef RLTEXGPU_H +#define RLTEXGPU_H #ifndef RLGPUTEXAPI #define RLGPUTEXAPI // Functions defined as 'extern' by default (implicit specifiers) @@ -93,30 +96,30 @@ // 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 + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float) + RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float) + RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) + RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) + RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp + RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp } rlGpuTexPixelFormat; //---------------------------------------------------------------------------------- @@ -139,7 +142,7 @@ RLGPUTEXAPI int rl_save_ktx_to_memory(const char *fileName, void *data, int widt } #endif -#endif // RL_GPUTEX_H +#endif // RLTEXGPU_H /*********************************************************************************** * @@ -147,49 +150,49 @@ RLGPUTEXAPI int rl_save_ktx_to_memory(const char *fileName, void *data, int widt * ************************************************************************************/ -#if defined(RL_GPUTEX_IMPLEMENTATION) +#if defined(RLTEXGPU_IMPLEMENTATION) -#if defined(RL_GPUTEX_SHOW_LOG_INFO) && !defined(RL_GPUTEX_LOG) +#if defined(RLTEXGPU_SHOW_LOG_INFO) && !defined(RLTEXGPU_LOG) #include // Required for: printf() #endif -#if !defined(RL_GPUTEX_MALLOC) || !defined(RL_GPUTEX_NULL) +#if !defined(RLTEXGPU_MALLOC) || !defined(RLTEXGPU_NULL) #include // Required for: NULL, malloc(), calloc(), free() #endif -#if !defined(RL_GPUTEX_MEMCPY) +#if !defined(RLTEXGPU_MEMCPY) #include // Required for: memcpy() #endif -#if defined(RL_GPUTEX_MALLOC) || defined(RL_GPUTEX_FREE) - #if !defined(RL_GPUTEX_MALLOC) || !defined(RL_GPUTEX_FREE) - #warning "RL_GPUTEX_MALLOC and RL_GPUTEX_FREE allocation functions are required to be provided" +#if defined(RLTEXGPU_MALLOC) || defined(RLTEXGPU_FREE) + #if !defined(RLTEXGPU_MALLOC) || !defined(RLTEXGPU_FREE) + #warning "RLTEXGPU_MALLOC and RLTEXGPU_FREE allocation functions are required to be provided" #endif #endif -#if !defined(RL_GPUTEX_MALLOC) - #define RL_GPUTEX_MALLOC(sz) malloc(sz) - #define RL_GPUTEX_FREE(ptr) free(ptr) +#if !defined(RLTEXGPU_MALLOC) + #define RLTEXGPU_MALLOC(sz) malloc(sz) + #define RLTEXGPU_FREE(ptr) free(ptr) #endif -#if !defined(RL_GPUTEX_NULL) - #define RL_GPUTEX_NULL NULL +#if !defined(RLTEXGPU_NULL) + #define RLTEXGPU_NULL NULL #endif -#if !defined(RL_GPUTEX_MEMCPY) - #define RL_GPUTEX_MEMCPY(dest, src, num) memcpy(dest, src, num) +#if !defined(RLTEXGPU_MEMCPY) + #define RLTEXGPU_MEMCPY(dest, src, num) memcpy(dest, src, num) #endif // 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_LOG_INFO) - #if !defined(RL_GPUTEX_LOG) - #define RL_GPUTEX_LOG(...) (void)(printf("RL_GPUTEX: WARNING: " __VA_ARGS__), printf("\n")) +// WARNING: This macro expects that newline character is added automatically +// in order to match the functionality of raylib's TRACELOG() +#if defined(RLTEXGPU_SHOW_LOG_INFO) + #if !defined(RLTEXGPU_LOG) + #define RLTEXGPU_LOG(...) (void)(printf("RL_GPUTEX: WARNING: " __VA_ARGS__), printf("\n")) #endif #else - #if defined(RL_GPUTEX_LOG) + #if defined(RLTEXGPU_LOG) // Undefine it first in order to supress warnings about macro redefinition - #undef RL_GPUTEX_LOG + #undef RLTEXGPU_LOG #endif - #define RL_GPUTEX_LOG(...) + #define RLTEXGPU_LOG(...) #endif //---------------------------------------------------------------------------------- @@ -204,11 +207,11 @@ void get_gl_texture_formats(int format, unsigned int *gl_internal_format, unsign //---------------------------------------------------------------------------------- // Module Functions Definition //---------------------------------------------------------------------------------- -#if defined(RL_GPUTEX_SUPPORT_DDS) +#if defined(RLTEXGPU_SUPPORT_DDS) // Loading DDS from memory image data (compressed or uncompressed) void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_size, int *width, int *height, int *format, int *mips) { - void *image_data = RL_GPUTEX_NULL; // Image data pointer + void *image_data = RLTEXGPU_NULL; // Image data pointer int image_pixel_size = 0; // Image pixel size unsigned char *file_data_ptr = (unsigned char *)file_data; @@ -256,7 +259,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ unsigned int reserved2; } dds_header; - if (file_data_ptr != RL_GPUTEX_NULL) + if (file_data_ptr != RLTEXGPU_NULL) { // Verify the type of file unsigned char *dds_header_id = file_data_ptr; @@ -264,7 +267,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_LOG("DDS file data not valid"); + RLTEXGPU_LOG("DDS file data not valid"); } else { @@ -275,8 +278,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_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"); + if (*width % 4 != 0) RLTEXGPU_LOG("DDS file width must be multiple of 4. Image will not display correctly"); + if (*height % 4 != 0) RLTEXGPU_LOG("DDS file height must be multiple of 4. Image will not display correctly"); image_pixel_size = header->width*header->height; @@ -289,11 +292,11 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ { int data_size = image_pixel_size*sizeof(unsigned short); if (header->mipmap_count > 1) data_size = data_size + data_size/3; - image_data = RL_GPUTEX_MALLOC(data_size); + image_data = RLTEXGPU_MALLOC(data_size); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); - *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5; + *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5; } else if (header->ddspf.flags == 0x41) // With alpha channel { @@ -301,9 +304,9 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ { int data_size = image_pixel_size*sizeof(unsigned short); if (header->mipmap_count > 1) data_size = data_size + data_size/3; - image_data = RL_GPUTEX_MALLOC(data_size); + image_data = RLTEXGPU_MALLOC(data_size); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); unsigned char alpha = 0; @@ -315,15 +318,15 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ ((unsigned short *)image_data)[i] += alpha; } - *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1; + *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1; } 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_GPUTEX_MALLOC(data_size); + image_data = RLTEXGPU_MALLOC(data_size); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); unsigned char alpha = 0; @@ -335,7 +338,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ ((unsigned short *)image_data)[i] += alpha; } - *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4; + *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4; } } } @@ -343,19 +346,19 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ { 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_GPUTEX_MALLOC(data_size); + image_data = RLTEXGPU_MALLOC(data_size); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); - *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8; + *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8; } 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_GPUTEX_MALLOC(data_size); + image_data = RLTEXGPU_MALLOC(data_size); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); unsigned char blue = 0; @@ -369,7 +372,7 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ ((unsigned char *)image_data)[i + 2] = blue; } - *format = RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; + *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; } else if (((header->ddspf.flags == 0x04) || (header->ddspf.flags == 0x05)) && (header->ddspf.fourcc > 0)) // Compressed { @@ -379,19 +382,19 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ 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_GPUTEX_MALLOC(data_size*sizeof(unsigned char)); + image_data = RLTEXGPU_MALLOC(data_size*sizeof(unsigned char)); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); switch (header->ddspf.fourcc) { case FOURCC_DXT1: { - if (header->ddspf.flags == 0x04) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB; - else *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGBA; + if (header->ddspf.flags == 0x04) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGB; + else *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGBA; } break; - case FOURCC_DXT3: *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA; break; - case FOURCC_DXT5: *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT5_RGBA; break; + case FOURCC_DXT3: *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA; break; + case FOURCC_DXT5: *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT5_RGBA; break; default: break; } } @@ -402,13 +405,13 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_ } #endif -#if defined(RL_GPUTEX_SUPPORT_PKM) +#if defined(RLTEXGPU_SUPPORT_PKM) // Loading PKM image data (ETC1/ETC2 compression) // NOTE: KTX is the standard Khronos Group compression format (ETC1/ETC2, mipmaps) // PKM is a much simpler file format used mainly to contain a single ETC1/ETC2 compressed image (no mipmaps) void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_size, int *width, int *height, int *format, int *mips) { - void *image_data = RL_GPUTEX_NULL; // Image data pointer + void *image_data = RLTEXGPU_NULL; // Image data pointer unsigned char *file_data_ptr = (unsigned char *)file_data; @@ -439,13 +442,13 @@ void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_ // NOTE: The extended width and height are the widths rounded up to a multiple of 4 // NOTE: ETC is always 4bit per pixel (64 bit for each 4x4 block of pixels) - if (file_data_ptr != RL_GPUTEX_NULL) + if (file_data_ptr != RLTEXGPU_NULL) { pkm_header *header = (pkm_header *)file_data_ptr; if ((header->id[0] != 'P') || (header->id[1] != 'K') || (header->id[2] != 'M') || (header->id[3] != ' ')) { - RL_GPUTEX_LOG("PKM file data not valid"); + RLTEXGPU_LOG("PKM file data not valid"); } else { @@ -465,13 +468,13 @@ void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_ int data_size = (*width)*(*height)*bpp/8; // Total data size in bytes - image_data = RL_GPUTEX_MALLOC(data_size*sizeof(unsigned char)); + image_data = RLTEXGPU_MALLOC(data_size*sizeof(unsigned char)); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); - 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; + if (header->format == 0) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC1_RGB; + else if (header->format == 1) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_RGB; + else if (header->format == 3) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA; } } @@ -479,12 +482,12 @@ void *rl_load_pkm_from_memory(const unsigned char *file_data, unsigned int file_ } #endif -#if defined(RL_GPUTEX_SUPPORT_KTX) +#if defined(RLTEXGPU_SUPPORT_KTX) // Load KTX compressed image data (ETC1/ETC2 compression) // TODO: Review KTX loading, many things changed! void *rl_load_ktx_from_memory(const unsigned char *file_data, unsigned int file_size, int *width, int *height, int *format, int *mips) { - void *image_data = RL_GPUTEX_NULL; // Image data pointer + void *image_data = RLTEXGPU_NULL; // Image data pointer unsigned char *file_data_ptr = (unsigned char *)file_data; @@ -522,14 +525,14 @@ void *rl_load_ktx_from_memory(const unsigned char *file_data, unsigned int file_ // NOTE: Before start of every mipmap data block, we have: unsigned int data_size - if (file_data_ptr != RL_GPUTEX_NULL) + if (file_data_ptr != RLTEXGPU_NULL) { ktx_header *header = (ktx_header *)file_data_ptr; 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_LOG("KTX file data not valid"); + RLTEXGPU_LOG("KTX file data not valid"); } else { @@ -544,13 +547,13 @@ void *rl_load_ktx_from_memory(const unsigned char *file_data, unsigned int file_ int data_size = ((int *)file_data_ptr)[0]; file_data_ptr += sizeof(int); - image_data = RL_GPUTEX_MALLOC(data_size*sizeof(unsigned char)); + image_data = RLTEXGPU_MALLOC(data_size*sizeof(unsigned char)); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); - 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; + if (header->gl_internal_format == 0x8D64) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC1_RGB; + else if (header->gl_internal_format == 0x9274) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_RGB; + else if (header->gl_internal_format == 0x9278) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA; // TODO: Support uncompressed data formats? Right now it returns format = 0! } @@ -608,7 +611,7 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo w /= 2; h /= 2; } - unsigned char *file_data = RL_GPUTEX_MALLOC(data_size); + unsigned char *file_data = RLTEXGPU_MALLOC(data_size); unsigned char *file_data_ptr = file_data; ktx_header header = { 0 }; @@ -620,7 +623,7 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo const char ktx_identifier[12] = { 0xAB, 'K', 'T', 'X', ' ', '1', '1', 0xBB, '\r', '\n', 0x1A, '\n' }; // Get the image header - RL_GPUTEX_MEMCPY(header.id, ktx_identifier, 12); // KTX 1.1 signature + RLTEXGPU_MEMCPY(header.id, ktx_identifier, 12); // KTX 1.1 signature header.endianness = 0; header.gl_type = 0; // Obtained from format header.gl_type_size = 1; @@ -642,10 +645,10 @@ 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_LOG("RL_GPUTEX: GL format not supported for KTX export (%i)", header.gl_format); + if (header.gl_format == -1) RLTEXGPU_LOG("RL_GPUTEX: GL format not supported for KTX export (%i)", header.gl_format); else { - RL_GPUTEX_MEMCPY(file_data_ptr, &header, sizeof(ktx_header)); + RLTEXGPU_MEMCPY(file_data_ptr, &header, sizeof(ktx_header)); file_data_ptr += sizeof(ktx_header); int temp_width = width; @@ -657,8 +660,8 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo { unsigned int data_size = get_pixel_data_size(temp_width, temp_height, format); - RL_GPUTEX_MEMCPY(file_data_ptr, &data_size, sizeof(unsigned int)); - RL_GPUTEX_MEMCPY(file_data_ptr + 4, (unsigned char *)data + data_offset, data_size); + RLTEXGPU_MEMCPY(file_data_ptr, &data_size, sizeof(unsigned int)); + RLTEXGPU_MEMCPY(file_data_ptr + 4, (unsigned char *)data + data_offset, data_size); temp_width /= 2; temp_height /= 2; @@ -671,34 +674,34 @@ int rl_save_ktx(const char *file_name, void *data, int width, int height, int fo int success = false; FILE *file = fopen(file_name, "wb"); - if (file != RL_GPUTEX_NULL) + if (file != RLTEXGPU_NULL) { unsigned int count = (unsigned int)fwrite(file_data, sizeof(unsigned char), data_size, file); - 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 + if (count == 0) RLTEXGPU_LOG("FILEIO: [%s] Failed to write file", file_name); + else if (count != data_size) RLTEXGPU_LOG("FILEIO: [%s] File partially written", file_name); + else (void)0; int result = fclose(file); - if (result != 0) RL_GPUTEX_LOG("FILEIO: [%s] Failed to close file", file_name); + if (result != 0) RLTEXGPU_LOG("FILEIO: [%s] Failed to close file", file_name); if (result == 0 && count == data_size) success = true; } - else RL_GPUTEX_LOG("FILEIO: [%s] Failed to open file", file_name); + else RLTEXGPU_LOG("FILEIO: [%s] Failed to open file", file_name); - RL_GPUTEX_FREE(file_data); // Free file data buffer + RLTEXGPU_FREE(file_data); // Free file data buffer // If all data has been written correctly to file, success = 1 return success; } #endif -#if defined(RL_GPUTEX_SUPPORT_PVR) +#if defined(RLTEXGPU_SUPPORT_PVR) // Loading PVR image data (uncompressed or PVRT compression) // NOTE: PVR v2 not supported, use PVR v3 instead void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_size, int *width, int *height, int *format, int *mips) { - void *image_data = RL_GPUTEX_NULL; // Image data pointer + void *image_data = RLTEXGPU_NULL; // Image data pointer unsigned char *file_data_ptr = (unsigned char *)file_data; @@ -756,7 +759,7 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_ } PVRMetadata; #endif - if (file_data_ptr != RL_GPUTEX_NULL) + if (file_data_ptr != RLTEXGPU_NULL) { // Check PVR image version unsigned char pvr_version = file_data_ptr[0]; @@ -768,7 +771,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_LOG("PVR file data not valid"); + RLTEXGPU_LOG("PVR file data not valid"); } else { @@ -779,24 +782,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 = 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; + if (((header->channels[0] == 'l') && (header->channels[1] == 0)) && (header->channel_depth[0] == 8)) *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE; + else if (((header->channels[0] == 'l') && (header->channels[1] == 'a')) && ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8))) *format = RLTEXGPU_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 = 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; + if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 5) && (header->channel_depth[2] == 5) && (header->channel_depth[3] == 1)) *format = RLTEXGPU_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 = RLTEXGPU_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 = RLTEXGPU_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 = 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; + if ((header->channel_depth[0] == 5) && (header->channel_depth[1] == 6) && (header->channel_depth[2] == 5)) *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5; + else if ((header->channel_depth[0] == 8) && (header->channel_depth[1] == 8) && (header->channel_depth[2] == 8)) *format = RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8; } } - 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; + else if (header->channels[0] == 2) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGB; + else if (header->channels[0] == 3) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGBA; file_data_ptr += header->metadata_size; // Skip meta data header @@ -804,36 +807,36 @@ void *rl_load_pvr_from_memory(const unsigned char *file_data, unsigned int file_ int bpp = 0; switch (*format) { - 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; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGB: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break; default: break; } int data_size = (*width)*(*height)*bpp/8; // Total data size in bytes - image_data = RL_GPUTEX_MALLOC(data_size*sizeof(unsigned char)); + image_data = RLTEXGPU_MALLOC(data_size*sizeof(unsigned char)); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); } } - else if (pvr_version == 52) RL_GPUTEX_LOG("PVRv2 format not supported, update your files to PVRv3"); + else if (pvr_version == 52) RLTEXGPU_LOG("PVRv2 format not supported, update your files to PVRv3"); } return image_data; } #endif -#if defined(RL_GPUTEX_SUPPORT_ASTC) +#if defined(RLTEXGPU_SUPPORT_ASTC) // Load ASTC compressed image data (ASTC compression) void *rl_load_astc_from_memory(const unsigned char *file_data, unsigned int file_size, int *width, int *height, int *format, int *mips) { - void *image_data = RL_GPUTEX_NULL; // Image data pointer + void *image_data = RLTEXGPU_NULL; // Image data pointer unsigned char *file_data_ptr = (unsigned char *)file_data; @@ -856,13 +859,13 @@ void *rl_load_astc_from_memory(const unsigned char *file_data, unsigned int file unsigned char length[3]; // void *Z-size (1 for 2D images) } astc_header; - if (file_data_ptr != RL_GPUTEX_NULL) + if (file_data_ptr != RLTEXGPU_NULL) { astc_header *header = (astc_header *)file_data_ptr; if ((header->id[3] != 0x5c) || (header->id[2] != 0xa1) || (header->id[1] != 0xab) || (header->id[0] != 0x13)) { - RL_GPUTEX_LOG("ASTC file data not valid"); + RLTEXGPU_LOG("ASTC file data not valid"); } else { @@ -881,14 +884,14 @@ void *rl_load_astc_from_memory(const unsigned char *file_data, unsigned int file { int data_size = (*width)*(*height)*bpp/8; // Data size in bytes - image_data = RL_GPUTEX_MALLOC(data_size*sizeof(unsigned char)); + image_data = RLTEXGPU_MALLOC(data_size*sizeof(unsigned char)); - RL_GPUTEX_MEMCPY(image_data, file_data_ptr, data_size); + RLTEXGPU_MEMCPY(image_data, file_data_ptr, data_size); - if (bpp == 8) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA; - else if (bpp == 2) *format = RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA; + if (bpp == 8) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA; + else if (bpp == 2) *format = RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA; } - else RL_GPUTEX_LOG("ASTC block size configuration not supported"); + else RLTEXGPU_LOG("ASTC block size configuration not supported"); } } @@ -907,27 +910,27 @@ static int get_pixel_data_size(int width, int height, int format) switch (format) { - 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; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGB: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGBA: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC1_RGB: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_RGB: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGB: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT5_RGBA: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: bpp = 8; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: bpp = 2; break; default: break; } @@ -937,8 +940,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 >= 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; + if ((format >= RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGB) && (format < RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA)) data_size = 8; + else if ((format >= RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA) && (format < RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA)) data_size = 16; } return data_size; @@ -959,69 +962,69 @@ void get_gl_texture_formats(int format, unsigned int *gl_internal_format, unsign { #if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_21) || defined(GRAPHICS_API_OPENGL_ES2) // NOTE: on OpenGL ES 2.0 (WebGL), internalFormat must match format and options allowed are: GL_LUMINANCE, GL_RGB, GL_RGBA - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *gl_internal_format = GL_LUMINANCE_ALPHA; *gl_format = GL_LUMINANCE_ALPHA; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_SHORT_5_6_5; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_5_5_5_1; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_4_4_4_4; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *gl_internal_format = GL_LUMINANCE_ALPHA; *gl_format = GL_LUMINANCE_ALPHA; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_SHORT_5_6_5; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_5_5_5_1; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_4_4_4_4; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_BYTE; break; #if !defined(GRAPHICS_API_OPENGL_11) #if defined(GRAPHICS_API_OPENGL_ES3) - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_R32F_EXT; *gl_format = GL_RED_EXT; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB32F_EXT; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA32F_EXT; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_R16F_EXT; *gl_format = GL_RED_EXT; *gl_type = GL_HALF_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB16F_EXT; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA16F_EXT; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_R32F_EXT; *gl_format = GL_RED_EXT; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB32F_EXT; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA32F_EXT; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_R16F_EXT; *gl_format = GL_RED_EXT; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB16F_EXT; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA16F_EXT; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT; break; #else - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float #if defined(GRAPHICS_API_OPENGL_21) - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_HALF_FLOAT_ARB; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT_ARB; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT_ARB; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_HALF_FLOAT_ARB; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT_ARB; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT_ARB; break; #else // defined(GRAPHICS_API_OPENGL_ES2) - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_LUMINANCE; *gl_format = GL_LUMINANCE; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float #endif #endif #endif #elif defined(GRAPHICS_API_OPENGL_33) - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *gl_internal_format = GL_R8; *gl_format = GL_RED; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *gl_internal_format = GL_RG8; *gl_format = GL_RG; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G6B5: *gl_internal_format = GL_RGB565; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_SHORT_5_6_5; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8: *gl_internal_format = GL_RGB8; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *gl_internal_format = GL_RGB5_A1; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_5_5_5_1; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *gl_internal_format = GL_RGBA4; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_4_4_4_4; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *gl_internal_format = GL_RGBA8; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_BYTE; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_R32F; *gl_format = GL_RED; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB32F; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA32F; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_R16F; *gl_format = GL_RED; *gl_type = GL_HALF_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB16F; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT; break; - case RL_GPUTEX_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA16F; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *gl_internal_format = GL_R8; *gl_format = GL_RED; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *gl_internal_format = GL_RG8; *gl_format = GL_RG; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G6B5: *gl_internal_format = GL_RGB565; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_SHORT_5_6_5; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8: *gl_internal_format = GL_RGB8; *gl_format = GL_RGB; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *gl_internal_format = GL_RGB5_A1; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_5_5_5_1; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *gl_internal_format = GL_RGBA4; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_SHORT_4_4_4_4; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *gl_internal_format = GL_RGBA8; *gl_format = GL_RGBA; *gl_type = GL_UNSIGNED_BYTE; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32: *gl_internal_format = GL_R32F; *gl_format = GL_RED; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32: *gl_internal_format = GL_RGB32F; *gl_format = GL_RGB; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: *gl_internal_format = GL_RGBA32F; *gl_format = GL_RGBA; *gl_type = GL_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16: *gl_internal_format = GL_R16F; *gl_format = GL_RED; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16: *gl_internal_format = GL_RGB16F; *gl_format = GL_RGB; *gl_type = GL_HALF_FLOAT; break; + case RLTEXGPU_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: *gl_internal_format = GL_RGBA16F; *gl_format = GL_RGBA; *gl_type = GL_HALF_FLOAT; break; #endif #if !defined(GRAPHICS_API_OPENGL_11) - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGB: *gl_internal_format = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break; - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT1_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; break; - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT3_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; break; - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_DXT5_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC1_RGB: *gl_internal_format = GL_ETC1_RGB8_OES; break; // NOTE: Requires OpenGL ES 2.0 or OpenGL 4.3 - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_RGB: *gl_internal_format = GL_COMPRESSED_RGB8_ETC2; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA8_ETC2_EAC; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGB: *gl_internal_format = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_PVRT_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 - case RL_GPUTEX_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGB: *gl_internal_format = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT1_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT3_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_DXT5_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC1_RGB: *gl_internal_format = GL_ETC1_RGB8_OES; break; // NOTE: Requires OpenGL ES 2.0 or OpenGL 4.3 + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_RGB: *gl_internal_format = GL_COMPRESSED_RGB8_ETC2; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA8_ETC2_EAC; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGB: *gl_internal_format = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU + case RLTEXGPU_PIXELFORMAT_COMPRESSED_PVRT_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 + case RLTEXGPU_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: *gl_internal_format = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 #endif - default: RL_GPUTEX_LOG("GPUTEX: Current format not supported (%i)", format); break; + default: RLTEXGPU_LOG("GPUTEX: Current format not supported (%i)", format); break; } */ } -#endif // RL_GPUTEX_IMPLEMENTATION +#endif // RLTEXGPU_IMPLEMENTATION /* // OpenGL texture data formats diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c index 2bf846be0..92c1979b3 100644 --- a/src/platforms/rcore_desktop_sdl.c +++ b/src/platforms/rcore_desktop_sdl.c @@ -2166,7 +2166,7 @@ static KeyboardKey ConvertScancodeToKey(SDL_Scancode sdlScancode) return mapScancodeToKey[sdlScancode]; } - return KEY_NULL; // No equivalent key in Raylib + return KEY_NULL; // No equivalent key in raylib } // Get next codepoint in a byte sequence and bytes processed diff --git a/src/platforms/rcore_desktop_win32.c b/src/platforms/rcore_desktop_win32.c index 612800b83..afbbedffc 100644 --- a/src/platforms/rcore_desktop_win32.c +++ b/src/platforms/rcore_desktop_win32.c @@ -1652,9 +1652,9 @@ int InitPlatform(void) if (rlGetVersion() == RL_OPENGL_SOFTWARE) // Using software renderer { TRACELOG(LOG_INFO, "GL: OpenGL device information:"); - TRACELOG(LOG_INFO, " > Vendor: %s", "raylib"); - TRACELOG(LOG_INFO, " > Renderer: %s", "rlsw - OpenGL Software Renderer"); - TRACELOG(LOG_INFO, " > Version: %s", "1.0"); + TRACELOG(LOG_INFO, " > Vendor: %s", glGetString(GL_VENDOR)); + TRACELOG(LOG_INFO, " > Renderer: %s", glGetString(GL_RENDERER)); + TRACELOG(LOG_INFO, " > Version: %s", glGetString(GL_VERSION)); TRACELOG(LOG_INFO, " > GLSL: %s", "NOT SUPPORTED"); } @@ -1870,7 +1870,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara // WARNING: Don't trust the docs, they say this message can not be obtained if not calling DefWindowProc() // in response to WM_WINDOWPOSCHANGED but looks like when a window is created, // this message can be obtained without getting WM_WINDOWPOSCHANGED - HandleWindowResize(hwnd, &platform.appScreenWidth, &platform.appScreenHeight); + // WARNING: This call fails for Software-Renderer backend + //HandleWindowResize(hwnd, &platform.appScreenWidth, &platform.appScreenHeight); } break; //case WM_MOVE case WM_WINDOWPOSCHANGED: diff --git a/src/raylib.h b/src/raylib.h index 951f1ffb3..2e849c917 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -40,7 +40,7 @@ * [rtextures] stb_image_write (Sean Barret) for image writing (BMP, TGA, PNG, JPG) * [rtextures] stb_image_resize2 (Sean Barret) for image resizing algorithms * [rtextures] stb_perlin (Sean Barret) for Perlin Noise image generation -* [rtextures] rl_gputex (Ramon Santamaria) for GPU-compressed texture formats +* [rtextures] rltexgpu (Ramon Santamaria) for GPU-compressed texture formats * [rtext] stb_truetype (Sean Barret) for ttf fonts loading * [rtext] stb_rect_pack (Sean Barret) for rectangles packing * [rmodels] par_shapes (Philip Rideout) for parametric 3d shapes generation diff --git a/src/rtextures.c b/src/rtextures.c index cf19edd1e..45b615cf7 100644 --- a/src/rtextures.c +++ b/src/rtextures.c @@ -100,19 +100,19 @@ #endif #if SUPPORT_FILEFORMAT_DDS - #define RL_GPUTEX_SUPPORT_DDS + #define RLTEXGPU_SUPPORT_DDS #endif #if SUPPORT_FILEFORMAT_PKM - #define RL_GPUTEX_SUPPORT_PKM + #define RLTEXGPU_SUPPORT_PKM #endif #if SUPPORT_FILEFORMAT_KTX - #define RL_GPUTEX_SUPPORT_KTX + #define RLTEXGPU_SUPPORT_KTX #endif #if SUPPORT_FILEFORMAT_PVR - #define RL_GPUTEX_SUPPORT_PVR + #define RLTEXGPU_SUPPORT_PVR #endif #if SUPPORT_FILEFORMAT_ASTC - #define RL_GPUTEX_SUPPORT_ASTC + #define RLTEXGPU_SUPPORT_ASTC #endif // Image fileformats not supported by default @@ -161,13 +161,13 @@ #pragma GCC diagnostic ignored "-Wunused-function" #endif - #define RL_GPUTEX_MALLOC RL_MALLOC - #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 - #include "external/rl_gputex.h" // Required for: rl_load_xxx_from_memory() - // NOTE: Used to read compressed textures data (multiple formats support) + #define RLTEXGPU_MALLOC RL_MALLOC + #define RLTEXGPU_FREE RL_FREE + #define RLTEXGPU_LOG(...) TRACELOG(LOG_WARNING, "IMAGE: " __VA_ARGS__) + #define RLTEXGPU_SHOW_LOG_INFO + #define RLTEXGPU_IMPLEMENTATION + #include "external/rltexgpu.h" // Required for: rl_load_xxx_from_memory() + // NOTE: Used to read compressed textures data (multiple formats support) #if defined(__GNUC__) // GCC and Clang #pragma GCC diagnostic pop #endif