mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-11-03 17:24:25 +00:00 
			
		
		
		
	REVIEWED: Potential code issues reported by CodeQL #3476
This commit is contained in:
		@@ -75,9 +75,9 @@ int main(void)
 | 
			
		||||
    bool eventRecording = false;
 | 
			
		||||
    bool eventPlaying = false;
 | 
			
		||||
    
 | 
			
		||||
    int frameCounter = 0;
 | 
			
		||||
    int playFrameCounter = 0;
 | 
			
		||||
    int currentPlayFrame = 0;
 | 
			
		||||
    unsigned int frameCounter = 0;
 | 
			
		||||
    unsigned int playFrameCounter = 0;
 | 
			
		||||
    unsigned int currentPlayFrame = 0;
 | 
			
		||||
 | 
			
		||||
    SetTargetFPS(60);
 | 
			
		||||
    //--------------------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ int main(void)
 | 
			
		||||
 | 
			
		||||
    InitWindow(screenWidth, screenHeight, "raylib [core] example - loading thread");
 | 
			
		||||
 | 
			
		||||
    pthread_t threadId;             // Loading data thread id
 | 
			
		||||
    pthread_t threadId = { 0 };     // Loading data thread id
 | 
			
		||||
 | 
			
		||||
    enum { STATE_WAITING, STATE_LOADING, STATE_FINISHED } state = STATE_WAITING;
 | 
			
		||||
    int framesCounter = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ int main(void)
 | 
			
		||||
 | 
			
		||||
    int randValue = GetRandomValue(-8, 5);   // Get a random integer number between -8 and 5 (both included)
 | 
			
		||||
    
 | 
			
		||||
    int framesCounter = 0;          // Variable used to count frames
 | 
			
		||||
    unsigned int framesCounter = 0; // Variable used to count frames
 | 
			
		||||
    
 | 
			
		||||
    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
 | 
			
		||||
    //--------------------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -68,14 +68,12 @@ int main(void)
 | 
			
		||||
 | 
			
		||||
    char skyboxFileName[256] = { 0 };
 | 
			
		||||
    
 | 
			
		||||
    Texture2D panorama;
 | 
			
		||||
 | 
			
		||||
    if (useHDR)
 | 
			
		||||
    {
 | 
			
		||||
        TextCopy(skyboxFileName, "resources/dresden_square_2k.hdr");
 | 
			
		||||
 | 
			
		||||
        // Load HDR panorama (sphere) texture
 | 
			
		||||
        panorama = LoadTexture(skyboxFileName);
 | 
			
		||||
        Texture2D panorama = LoadTexture(skyboxFileName);
 | 
			
		||||
 | 
			
		||||
        // Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture
 | 
			
		||||
        // NOTE 1: New texture is generated rendering to texture, shader calculates the sphere->cube coordinates mapping
 | 
			
		||||
@@ -83,7 +81,7 @@ int main(void)
 | 
			
		||||
        // despite texture can be successfully created.. so using PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 instead of PIXELFORMAT_UNCOMPRESSED_R32G32B32A32
 | 
			
		||||
        skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8);
 | 
			
		||||
 | 
			
		||||
        //UnloadTexture(panorama);    // Texture not required anymore, cubemap already generated
 | 
			
		||||
        UnloadTexture(panorama);        // Texture not required anymore, cubemap already generated
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
@@ -113,15 +111,18 @@ int main(void)
 | 
			
		||||
            {
 | 
			
		||||
                if (IsFileExtension(droppedFiles.paths[0], ".png;.jpg;.hdr;.bmp;.tga"))
 | 
			
		||||
                {
 | 
			
		||||
                    // Unload current cubemap texture and load new one
 | 
			
		||||
                    // Unload current cubemap texture to load new one
 | 
			
		||||
                    UnloadTexture(skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture);
 | 
			
		||||
                    
 | 
			
		||||
                    if (useHDR)
 | 
			
		||||
                    {
 | 
			
		||||
                        // Load HDR panorama (sphere) texture
 | 
			
		||||
                        Texture2D panorama = LoadTexture(droppedFiles.paths[0]);
 | 
			
		||||
 | 
			
		||||
                        // Generate cubemap from panorama texture
 | 
			
		||||
                        skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8);
 | 
			
		||||
                        UnloadTexture(panorama);
 | 
			
		||||
                        
 | 
			
		||||
                        UnloadTexture(panorama);    // Texture not required anymore, cubemap already generated
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ int main(void)
 | 
			
		||||
    {
 | 
			
		||||
        // Update
 | 
			
		||||
        //----------------------------------------------------------------------------------
 | 
			
		||||
        float startangle;
 | 
			
		||||
        float startangle = 0.0f;
 | 
			
		||||
 | 
			
		||||
        if (angleMode == 0) startangle = -Vector2LineAngle(v0, v1)*RAD2DEG;
 | 
			
		||||
        if (angleMode == 1) startangle = 0.0f; 
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,8 @@ int main(void)
 | 
			
		||||
        // Check if screen is resized
 | 
			
		||||
        if (IsWindowResized())
 | 
			
		||||
        {
 | 
			
		||||
            float resolution[2] = { (float)GetScreenWidth(), (float)GetScreenHeight() };
 | 
			
		||||
            resolution[0] = (float)GetScreenWidth();
 | 
			
		||||
            resolution[1] = (float)GetScreenHeight();
 | 
			
		||||
            SetShaderValue(shader, resolutionLoc, resolution, SHADER_UNIFORM_VEC2);
 | 
			
		||||
        }
 | 
			
		||||
        //----------------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -195,7 +195,7 @@ int main(void)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Vector2 mouse = GetMousePosition();
 | 
			
		||||
        Vector2 pos = { 28.8f, 10.0f };
 | 
			
		||||
        Vector2 position = { 28.8f, 10.0f };
 | 
			
		||||
        hovered = -1;
 | 
			
		||||
        //----------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -210,21 +210,21 @@ int main(void)
 | 
			
		||||
            for (int i = 0; i < SIZEOF(emoji); ++i)
 | 
			
		||||
            {
 | 
			
		||||
                const char *txt = &emojiCodepoints[emoji[i].index];
 | 
			
		||||
                Rectangle emojiRect = { pos.x, pos.y, (float)fontEmoji.baseSize, (float)fontEmoji.baseSize };
 | 
			
		||||
                Rectangle emojiRect = { position.x, position.y, (float)fontEmoji.baseSize, (float)fontEmoji.baseSize };
 | 
			
		||||
 | 
			
		||||
                if (!CheckCollisionPointRec(mouse, emojiRect))
 | 
			
		||||
                {
 | 
			
		||||
                    DrawTextEx(fontEmoji, txt, pos, (float)fontEmoji.baseSize, 1.0f, selected == i ? emoji[i].color : Fade(LIGHTGRAY, 0.4f));
 | 
			
		||||
                    DrawTextEx(fontEmoji, txt, position, (float)fontEmoji.baseSize, 1.0f, selected == i ? emoji[i].color : Fade(LIGHTGRAY, 0.4f));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    DrawTextEx(fontEmoji, txt, pos, (float)fontEmoji.baseSize, 1.0f, emoji[i].color );
 | 
			
		||||
                    DrawTextEx(fontEmoji, txt, position, (float)fontEmoji.baseSize, 1.0f, emoji[i].color );
 | 
			
		||||
                    hovered = i;
 | 
			
		||||
                    hoveredPos = pos;
 | 
			
		||||
                    hoveredPos = position;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ((i != 0) && (i%EMOJI_PER_WIDTH == 0)) { pos.y += fontEmoji.baseSize + 24.25f; pos.x = 28.8f; }
 | 
			
		||||
                else pos.x += fontEmoji.baseSize + 28.8f;
 | 
			
		||||
                if ((i != 0) && (i%EMOJI_PER_WIDTH == 0)) { position.y += fontEmoji.baseSize + 24.25f; position.x = 28.8f; }
 | 
			
		||||
                else position.x += fontEmoji.baseSize + 28.8f;
 | 
			
		||||
            }
 | 
			
		||||
            //------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -282,8 +282,8 @@ int main(void)
 | 
			
		||||
                int length = GetCodepointCount(messages[message].text);
 | 
			
		||||
                const char *info = TextFormat("%s %u characters %i bytes", messages[message].language, length, size);
 | 
			
		||||
                sz = MeasureTextEx(GetFontDefault(), info, 10, 1.0f);
 | 
			
		||||
                Vector2 pos = { textRect.x + textRect.width - sz.x,  msgRect.y + msgRect.height - sz.y - 2 };
 | 
			
		||||
                DrawText(info, (int)pos.x, (int)pos.y, 10, RAYWHITE);
 | 
			
		||||
                
 | 
			
		||||
                DrawText(info, (int)(textRect.x + textRect.width - sz.x), (int)(msgRect.y + msgRect.height - sz.y - 2), 10, RAYWHITE);
 | 
			
		||||
            }
 | 
			
		||||
            //------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2465,7 +2465,7 @@ bool ExportAutomationEventList(AutomationEventList list, const char *fileName)
 | 
			
		||||
    byteCount += sprintf(txtData + byteCount, "c %i\n", list.count);
 | 
			
		||||
    for (int i = 0; i < list.count; i++)
 | 
			
		||||
    {
 | 
			
		||||
        byteCount += sprintf(txtData + byteCount, "e %i %i %i %i %i %i // Event: %s\n", list.events[i].frame, list.events[i].type,
 | 
			
		||||
        byteCount += snprintf(txtData + byteCount, 256, "e %i %i %i %i %i %i // Event: %s\n", list.events[i].frame, list.events[i].type,
 | 
			
		||||
            list.events[i].params[0], list.events[i].params[1], list.events[i].params[2], list.events[i].params[3], autoEventTypeName[list.events[i].type]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								src/rlgl.h
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								src/rlgl.h
									
									
									
									
									
								
							@@ -517,13 +517,13 @@ typedef enum {
 | 
			
		||||
// NOTE: By default up to 8 color channels defined, but it can be more
 | 
			
		||||
typedef enum {
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL0 = 0,       // Framebuffer attachment type: color 0
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL1,       // Framebuffer attachment type: color 1
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL2,       // Framebuffer attachment type: color 2
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL3,       // Framebuffer attachment type: color 3
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL4,       // Framebuffer attachment type: color 4
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL5,       // Framebuffer attachment type: color 5
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL6,       // Framebuffer attachment type: color 6
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL7,       // Framebuffer attachment type: color 7
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL1 = 1,       // Framebuffer attachment type: color 1
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL2 = 2,       // Framebuffer attachment type: color 2
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL3 = 3,       // Framebuffer attachment type: color 3
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL4 = 4,       // Framebuffer attachment type: color 4
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL5 = 5,       // Framebuffer attachment type: color 5
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL6 = 6,       // Framebuffer attachment type: color 6
 | 
			
		||||
    RL_ATTACHMENT_COLOR_CHANNEL7 = 7,       // Framebuffer attachment type: color 7
 | 
			
		||||
    RL_ATTACHMENT_DEPTH = 100,              // Framebuffer attachment type: depth
 | 
			
		||||
    RL_ATTACHMENT_STENCIL = 200,            // Framebuffer attachment type: stencil
 | 
			
		||||
} rlFramebufferAttachType;
 | 
			
		||||
@@ -531,11 +531,11 @@ typedef enum {
 | 
			
		||||
// Framebuffer texture attachment type
 | 
			
		||||
typedef enum {
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0,   // Framebuffer texture attachment type: cubemap, +X side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_X,   // Framebuffer texture attachment type: cubemap, -X side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_POSITIVE_Y,   // Framebuffer texture attachment type: cubemap, +Y side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y,   // Framebuffer texture attachment type: cubemap, -Y side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_POSITIVE_Z,   // Framebuffer texture attachment type: cubemap, +Z side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z,   // Framebuffer texture attachment type: cubemap, -Z side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1,   // Framebuffer texture attachment type: cubemap, -X side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2,   // Framebuffer texture attachment type: cubemap, +Y side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3,   // Framebuffer texture attachment type: cubemap, -Y side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4,   // Framebuffer texture attachment type: cubemap, +Z side
 | 
			
		||||
    RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5,   // Framebuffer texture attachment type: cubemap, -Z side
 | 
			
		||||
    RL_ATTACHMENT_TEXTURE2D = 100,          // Framebuffer texture attachment type: texture2d
 | 
			
		||||
    RL_ATTACHMENT_RENDERBUFFER = 200,       // Framebuffer texture attachment type: renderbuffer
 | 
			
		||||
} rlFramebufferAttachTextureType;
 | 
			
		||||
@@ -823,6 +823,9 @@ RLAPI void rlLoadDrawQuad(void);     // Load and draw a quad
 | 
			
		||||
    typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor);
 | 
			
		||||
    #endif
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(GRAPHICS_API_OPENGL_ES3)
 | 
			
		||||
    #include <GLES3/gl3.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>                     // Required for: malloc(), free()
 | 
			
		||||
#include <string.h>                     // Required for: strcmp(), strlen() [Used in rlglInit(), on extensions loading]
 | 
			
		||||
@@ -2243,7 +2246,7 @@ void rlLoadExtensions(void *loader)
 | 
			
		||||
 | 
			
		||||
#if defined(GRAPHICS_API_OPENGL_ES3)
 | 
			
		||||
    // Register supported extensions flags
 | 
			
		||||
    // OpenGL ES 3.0 extensions supported by default
 | 
			
		||||
    // OpenGL ES 3.0 extensions supported by default (or it should be)
 | 
			
		||||
    RLGL.ExtSupported.vao = true;
 | 
			
		||||
    RLGL.ExtSupported.instancing = true;
 | 
			
		||||
    RLGL.ExtSupported.texNPOT = true;
 | 
			
		||||
@@ -2254,20 +2257,20 @@ void rlLoadExtensions(void *loader)
 | 
			
		||||
    RLGL.ExtSupported.maxDepthBits = 24;
 | 
			
		||||
    RLGL.ExtSupported.texAnisoFilter = true;
 | 
			
		||||
    RLGL.ExtSupported.texMirrorClamp = true;
 | 
			
		||||
    // TODO: Make sure that the ones above are actually present by default
 | 
			
		||||
    // TODO: Check for these...
 | 
			
		||||
    //       RLGL.ExtSupported.texCompDXT
 | 
			
		||||
    //       RLGL.ExtSupported.texCompETC1
 | 
			
		||||
    //       RLGL.ExtSupported.texCompETC2
 | 
			
		||||
    //       RLGL.ExtSupported.texCompPVRT
 | 
			
		||||
    //       RLGL.ExtSupported.texCompASTC
 | 
			
		||||
    //       RLGL.ExtSupported.computeShader
 | 
			
		||||
    //       RLGL.ExtSupported.ssbo
 | 
			
		||||
    //       RLGL.ExtSupported.maxAnisotropyLevel
 | 
			
		||||
    // TODO: Check for additional OpenGL ES 3.0 supported extensions:
 | 
			
		||||
    //RLGL.ExtSupported.texCompDXT = true;
 | 
			
		||||
    //RLGL.ExtSupported.texCompETC1 = true;
 | 
			
		||||
    //RLGL.ExtSupported.texCompETC2 = true;
 | 
			
		||||
    //RLGL.ExtSupported.texCompPVRT = true;
 | 
			
		||||
    //RLGL.ExtSupported.texCompASTC = true;
 | 
			
		||||
    //RLGL.ExtSupported.maxAnisotropyLevel = true;
 | 
			
		||||
    //RLGL.ExtSupported.computeShader = true;
 | 
			
		||||
    //RLGL.ExtSupported.ssbo = true;
 | 
			
		||||
 | 
			
		||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
 | 
			
		||||
 | 
			
		||||
    #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL)
 | 
			
		||||
    // TODO: Support OpenGL ES 3.0
 | 
			
		||||
    // TODO: Support GLAD loader for OpenGL ES 3.0
 | 
			
		||||
    if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions");
 | 
			
		||||
    else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES 2.0 loaded successfully");
 | 
			
		||||
    #endif
 | 
			
		||||
 
 | 
			
		||||
@@ -2142,7 +2142,7 @@ Mesh GenMeshPoly(int sides, float radius)
 | 
			
		||||
    Vector3 *vertices = (Vector3 *)RL_MALLOC(vertexCount*sizeof(Vector3));
 | 
			
		||||
 | 
			
		||||
    float d = 0.0f, dStep = 360.0f/sides;
 | 
			
		||||
    for (int v = 0; v < vertexCount; v += 3)
 | 
			
		||||
    for (int v = 0; v < vertexCount - 2; v += 3)
 | 
			
		||||
    {
 | 
			
		||||
        vertices[v] = (Vector3){ 0.0f, 0.0f, 0.0f };
 | 
			
		||||
        vertices[v + 1] = (Vector3){ sinf(DEG2RAD*d)*radius, 0.0f, cosf(DEG2RAD*d)*radius };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								src/rtext.c
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								src/rtext.c
									
									
									
									
									
								
							@@ -2002,7 +2002,6 @@ int GetCodepointPrevious(const char *text, int *codepointSize)
 | 
			
		||||
// Module specific Functions Definition
 | 
			
		||||
//----------------------------------------------------------------------------------
 | 
			
		||||
#if defined(SUPPORT_FILEFORMAT_FNT)
 | 
			
		||||
 | 
			
		||||
// Read a line from memory
 | 
			
		||||
// REQUIRES: memcpy()
 | 
			
		||||
// NOTE: Returns the number of bytes read
 | 
			
		||||
@@ -2033,6 +2032,8 @@ static Font LoadBMFont(const char *fileName)
 | 
			
		||||
    char imFileName[129] = { 0 };
 | 
			
		||||
 | 
			
		||||
    int base = 0;       // Useless data
 | 
			
		||||
    int readBytes = 0;  // Data bytes read
 | 
			
		||||
    int readVars = 0;   // Variables filled by sscanf()
 | 
			
		||||
 | 
			
		||||
    char *fileText = LoadFileText(fileName);
 | 
			
		||||
 | 
			
		||||
@@ -2041,32 +2042,30 @@ static Font LoadBMFont(const char *fileName)
 | 
			
		||||
    char *fileTextPtr = fileText;
 | 
			
		||||
 | 
			
		||||
    // NOTE: We skip first line, it contains no useful information
 | 
			
		||||
    int lineBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    fileTextPtr += (lineBytes + 1);
 | 
			
		||||
    readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    fileTextPtr += (readBytes + 1);
 | 
			
		||||
 | 
			
		||||
    // Read line data
 | 
			
		||||
    lineBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    searchPoint = strstr(buffer, "lineHeight");
 | 
			
		||||
    sscanf(searchPoint, "lineHeight=%i base=%i scaleW=%i scaleH=%i", &fontSize, &base, &imWidth, &imHeight);
 | 
			
		||||
    fileTextPtr += (lineBytes + 1);
 | 
			
		||||
    readVars = sscanf(searchPoint, "lineHeight=%i base=%i scaleW=%i scaleH=%i", &fontSize, &base, &imWidth, &imHeight);
 | 
			
		||||
    fileTextPtr += (readBytes + 1);
 | 
			
		||||
    
 | 
			
		||||
    TRACELOGD("FONT: [%s] Loaded font info:", fileName);
 | 
			
		||||
    TRACELOGD("    > Base size: %i", fontSize);
 | 
			
		||||
    TRACELOGD("    > Texture scale: %ix%i", imWidth, imHeight);
 | 
			
		||||
    if (readVars < 4) { UnloadFileText(fileText); return font; } // Some data not available, file malformed
 | 
			
		||||
 | 
			
		||||
    lineBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    searchPoint = strstr(buffer, "file");
 | 
			
		||||
    sscanf(searchPoint, "file=\"%128[^\"]\"", imFileName);
 | 
			
		||||
    fileTextPtr += (lineBytes + 1);
 | 
			
		||||
    readVars = sscanf(searchPoint, "file=\"%128[^\"]\"", imFileName);
 | 
			
		||||
    fileTextPtr += (readBytes + 1);
 | 
			
		||||
 | 
			
		||||
    TRACELOGD("    > Texture filename: %s", imFileName);
 | 
			
		||||
    if (readVars < 1) { UnloadFileText(fileText); return font; } // No fileName read
 | 
			
		||||
 | 
			
		||||
    lineBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
    searchPoint = strstr(buffer, "count");
 | 
			
		||||
    sscanf(searchPoint, "count=%i", &glyphCount);
 | 
			
		||||
    fileTextPtr += (lineBytes + 1);
 | 
			
		||||
    readVars = sscanf(searchPoint, "count=%i", &glyphCount);
 | 
			
		||||
    fileTextPtr += (readBytes + 1);
 | 
			
		||||
 | 
			
		||||
    TRACELOGD("    > Chars count: %i", glyphCount);
 | 
			
		||||
    if (readVars < 1) { UnloadFileText(fileText); return font; } // No glyphCount read
 | 
			
		||||
 | 
			
		||||
    // Compose correct path using route of .fnt file (fileName) and imFileName
 | 
			
		||||
    char *imPath = NULL;
 | 
			
		||||
@@ -2124,11 +2123,13 @@ static Font LoadBMFont(const char *fileName)
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < glyphCount; i++)
 | 
			
		||||
    {
 | 
			
		||||
        lineBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
        sscanf(buffer, "char id=%i x=%i y=%i width=%i height=%i xoffset=%i yoffset=%i xadvance=%i",
 | 
			
		||||
        readBytes = GetLine(fileTextPtr, buffer, MAX_BUFFER_SIZE);
 | 
			
		||||
        readVars = sscanf(buffer, "char id=%i x=%i y=%i width=%i height=%i xoffset=%i yoffset=%i xadvance=%i",
 | 
			
		||||
                       &charId, &charX, &charY, &charWidth, &charHeight, &charOffsetX, &charOffsetY, &charAdvanceX);
 | 
			
		||||
        fileTextPtr += (lineBytes + 1);
 | 
			
		||||
        fileTextPtr += (readBytes + 1);
 | 
			
		||||
        
 | 
			
		||||
        if (readVars == 8)  // Make sure all char data has been properly read
 | 
			
		||||
        {
 | 
			
		||||
            // Get character rectangle in the font atlas texture
 | 
			
		||||
            font.recs[i] = (Rectangle){ (float)charX, (float)charY, (float)charWidth, (float)charHeight };
 | 
			
		||||
 | 
			
		||||
@@ -2141,6 +2142,8 @@ static Font LoadBMFont(const char *fileName)
 | 
			
		||||
            // Fill character image data from imFont data
 | 
			
		||||
            font.glyphs[i].image = ImageFromImage(imFont, font.recs[i]);
 | 
			
		||||
        }
 | 
			
		||||
        else TRACELOG(LOG_WARNING, "FONT: [%s] Some characters data not correctly provided", fileName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    UnloadImage(imFont);
 | 
			
		||||
    UnloadFileText(fileText);
 | 
			
		||||
 
 | 
			
		||||
@@ -1288,8 +1288,6 @@ void ImageFormat(Image *image, int newFormat)
 | 
			
		||||
            image->data = NULL;
 | 
			
		||||
            image->format = newFormat;
 | 
			
		||||
 | 
			
		||||
            int k = 0;
 | 
			
		||||
 | 
			
		||||
            switch (image->format)
 | 
			
		||||
            {
 | 
			
		||||
                case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE:
 | 
			
		||||
@@ -1306,7 +1304,7 @@ void ImageFormat(Image *image, int newFormat)
 | 
			
		||||
                {
 | 
			
		||||
                    image->data = (unsigned char *)RL_MALLOC(image->width*image->height*2*sizeof(unsigned char));
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < image->width*image->height*2; i += 2, k++)
 | 
			
		||||
                    for (int i = 0, k = 0; i < image->width*image->height*2; i += 2, k++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ((unsigned char *)image->data)[i] = (unsigned char)((pixels[k].x*0.299f + (float)pixels[k].y*0.587f + (float)pixels[k].z*0.114f)*255.0f);
 | 
			
		||||
                        ((unsigned char *)image->data)[i + 1] = (unsigned char)(pixels[k].w*255.0f);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user