summaryrefslogtreecommitdiffhomepage
path: root/src/rtextures.c
diff options
context:
space:
mode:
authorRay <[email protected]>2021-12-04 19:56:02 +0100
committerRay <[email protected]>2021-12-04 19:56:02 +0100
commite637ad9d2a62fdcc2d4917de63defef5f8fb0591 (patch)
tree3299b60b57742a668a11cbb11b88264a22e4da6c /src/rtextures.c
parent48d4806e531e721d73995d61bfceaaeb955fd526 (diff)
downloadraylib-e637ad9d2a62fdcc2d4917de63defef5f8fb0591.tar.gz
raylib-e637ad9d2a62fdcc2d4917de63defef5f8fb0591.zip
Support custom modules inclusion
Allow to choose which modules are compiled with raylib, if some modules are excluded from compilation, required functionality is not available but smaller builds are possible.
Diffstat (limited to 'src/rtextures.c')
-rw-r--r--src/rtextures.c77
1 files changed, 47 insertions, 30 deletions
diff --git a/src/rtextures.c b/src/rtextures.c
index 9b823378..cad3545c 100644
--- a/src/rtextures.c
+++ b/src/rtextures.c
@@ -4,6 +4,9 @@
*
* CONFIGURATION:
*
+* #define SUPPORT_MODULE_RTEXTURES
+* rtextures module is included in the build
+*
* #define SUPPORT_FILEFORMAT_BMP
* #define SUPPORT_FILEFORMAT_PNG
* #define SUPPORT_FILEFORMAT_TGA
@@ -65,11 +68,13 @@
#include "config.h" // Defines module configuration flags
#endif
+#if defined(SUPPORT_MODULE_RTEXTURES)
+
#include "utils.h" // Required for: TRACELOG() and fopen() Android mapping
#include "rlgl.h" // OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2
#include <stdlib.h> // Required for: malloc(), free()
-#include <string.h> // Required for: strlen() [Used in ImageTextEx()]
+#include <string.h> // Required for: strlen() [Used in ImageTextEx()], strcmp() [Used in LoadImageFromMemory()]
#include <math.h> // Required for: fabsf()
#include <stdio.h> // Required for: sprintf() [Used in ExportImageAsCode()]
@@ -296,36 +301,33 @@ Image LoadImageAnim(const char *fileName, int *frames)
}
// Load image from memory buffer, fileType refers to extension: i.e. ".png"
+// WARNING: File extension must be provided in lower-case
Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize)
{
Image image = { 0 };
- char fileExtLower[16] = { 0 };
- strcpy(fileExtLower, TextToLower(fileType));
-
#if defined(SUPPORT_FILEFORMAT_PNG)
- if ((TextIsEqual(fileExtLower, ".png"))
+ if ((strcmp(fileType, ".png") == 0)
#else
if ((false)
#endif
#if defined(SUPPORT_FILEFORMAT_BMP)
- || (TextIsEqual(fileExtLower, ".bmp"))
+ || (strcmp(fileType, ".bmp") == 0)
#endif
#if defined(SUPPORT_FILEFORMAT_TGA)
- || (TextIsEqual(fileExtLower, ".tga"))
+ || (strcmp(fileType, ".tga") == 0)
#endif
#if defined(SUPPORT_FILEFORMAT_JPG)
- || (TextIsEqual(fileExtLower, ".jpg") ||
- TextIsEqual(fileExtLower, ".jpeg"))
+ || ((strcmp(fileType, ".jpg") == 0) || (strcmp(fileType, ".jpeg") == 0))
#endif
#if defined(SUPPORT_FILEFORMAT_GIF)
- || (TextIsEqual(fileExtLower, ".gif"))
+ || (strcmp(fileType, ".gif") == 0)
#endif
#if defined(SUPPORT_FILEFORMAT_PIC)
- || (TextIsEqual(fileExtLower, ".pic"))
+ || (strcmp(fileType, ".pic") == 0)
#endif
#if defined(SUPPORT_FILEFORMAT_PSD)
- || (TextIsEqual(fileExtLower, ".psd"))
+ || (strcmp(fileType, ".psd") == 0)
#endif
)
{
@@ -350,7 +352,7 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i
#endif
}
#if defined(SUPPORT_FILEFORMAT_HDR)
- else if (TextIsEqual(fileExtLower, ".hdr"))
+ else if (strcmp(fileType, ".hdr") == 0)
{
#if defined(STBI_REQUIRED)
if (fileData != NULL)
@@ -373,7 +375,7 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i
}
#endif
#if defined(SUPPORT_FILEFORMAT_QOI)
- else if (TextIsEqual(fileExtLower, ".qoi"))
+ else if (strcmp(fileType, ".qoi") == 0)
{
qoi_desc desc = { 0 };
image.data = qoi_decode(fileData, dataSize, &desc, 4);
@@ -384,19 +386,19 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i
}
#endif
#if defined(SUPPORT_FILEFORMAT_DDS)
- else if (TextIsEqual(fileExtLower, ".dds")) image = LoadDDS(fileData, dataSize);
+ else if (strcmp(fileType, ".dds") == 0) image = LoadDDS(fileData, dataSize);
#endif
#if defined(SUPPORT_FILEFORMAT_PKM)
- else if (TextIsEqual(fileExtLower, ".pkm")) image = LoadPKM(fileData, dataSize);
+ else if (strcmp(fileType, ".pkm") == 0) image = LoadPKM(fileData, dataSize);
#endif
#if defined(SUPPORT_FILEFORMAT_KTX)
- else if (TextIsEqual(fileExtLower, ".ktx")) image = LoadKTX(fileData, dataSize);
+ else if (strcmp(fileType, ".ktx") == 0) image = LoadKTX(fileData, dataSize);
#endif
#if defined(SUPPORT_FILEFORMAT_PVR)
- else if (TextIsEqual(fileExtLower, ".pvr")) image = LoadPVR(fileData, dataSize);
+ else if (strcmp(fileType, ".pvr") == 0) image = LoadPVR(fileData, dataSize);
#endif
#if defined(SUPPORT_FILEFORMAT_ASTC)
- else if (TextIsEqual(fileExtLower, ".astc")) image = LoadASTC(fileData, dataSize);
+ else if (strcmp(fileType, ".astc") == 0) image = LoadASTC(fileData, dataSize);
#endif
else TRACELOG(LOG_WARNING, "IMAGE: Data format not supported");
@@ -1133,35 +1135,41 @@ void ImageToPOT(Image *image, Color fill)
// Create an image from text (default font)
Image ImageText(const char *text, int fontSize, Color color)
{
+ Image imText = { 0 };
+#if defined(SUPPORT_MODULE_RTEXT)
int defaultFontSize = 10; // Default Font chars height in pixel
if (fontSize < defaultFontSize) fontSize = defaultFontSize;
int spacing = fontSize/defaultFontSize;
-
- Image imText = ImageTextEx(GetFontDefault(), text, (float)fontSize, (float)spacing, color);
-
+ imText = ImageTextEx(GetFontDefault(), text, (float)fontSize, (float)spacing, color); // WARNING: Module required: rtext
+#else
+ imText = GenImageColor(200, 60, BLACK); // Generating placeholder black image rectangle
+ TRACELOG(LOG_WARNING, "IMAGE: ImageTextEx() requires module: rtext");
+#endif
return imText;
}
// Create an image from text (custom sprite font)
Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint)
{
+ Image imText = { 0 };
+#if defined(SUPPORT_MODULE_RTEXT)
int size = (int)strlen(text); // Get size in bytes of text
int textOffsetX = 0; // Image drawing position X
int textOffsetY = 0; // Offset between lines (on line break '\n')
// NOTE: Text image is generated at font base size, later scaled to desired font size
- Vector2 imSize = MeasureTextEx(font, text, (float)font.baseSize, spacing);
+ Vector2 imSize = MeasureTextEx(font, text, (float)font.baseSize, spacing); // WARNING: Module required: rtext
// Create image to store text
- Image imText = GenImageColor((int)imSize.x, (int)imSize.y, BLANK);
+ imText = GenImageColor((int)imSize.x, (int)imSize.y, BLANK);
for (int i = 0; i < size; i++)
{
// Get next codepoint from byte string and glyph index in font
int codepointByteCount = 0;
- int codepoint = GetCodepoint(&text[i], &codepointByteCount);
- int index = GetGlyphIndex(font, codepoint);
+ int codepoint = GetCodepoint(&text[i], &codepointByteCount); // WARNING: Module required: rtext
+ int index = GetGlyphIndex(font, codepoint); // WARNING: Module required: rtext
// NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f)
// but we need to draw all of the bad bytes using the '?' symbol moving one byte
@@ -1196,10 +1204,14 @@ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Co
TRACELOG(LOG_INFO, "IMAGE: Text scaled by factor: %f", scaleFactor);
// Using nearest-neighbor scaling algorithm for default font
+ // WARNING: Module required: rtext
if (font.texture.id == GetFontDefault().texture.id) ImageResizeNN(&imText, (int)(imSize.x*scaleFactor), (int)(imSize.y*scaleFactor));
else ImageResize(&imText, (int)(imSize.x*scaleFactor), (int)(imSize.y*scaleFactor));
}
-
+#else
+ imText = GenImageColor(200, 60, BLACK); // Generating placeholder black image rectangle
+ TRACELOG(LOG_WARNING, "IMAGE: ImageTextEx() requires module: rtext");
+#endif
return imText;
}
@@ -2809,10 +2821,13 @@ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color
// Draw text (default font) within an image (destination)
void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color)
{
+#if defined(SUPPORT_MODULE_RTEXT)
Vector2 position = { (float)posX, (float)posY };
-
- // NOTE: For default font, sapcing is set to desired font size / default font size (10)
- ImageDrawTextEx(dst, GetFontDefault(), text, position, (float)fontSize, (float)fontSize/10, color);
+ // NOTE: For default font, spacing is set to desired font size / default font size (10)
+ ImageDrawTextEx(dst, GetFontDefault(), text, position, (float)fontSize, (float)fontSize/10, color); // WARNING: Module required: rtext
+#else
+ TRACELOG(LOG_WARNING, "IMAGE: ImageDrawText() requires module: rtext");
+#endif
}
// Draw text (custom sprite font) within an image (destination)
@@ -4803,3 +4818,5 @@ static Vector4 *LoadImageDataNormalized(Image image)
return pixels;
}
+
+#endif // SUPPORT_MODULE_RTEXTURES