From c03ab03627232047c63b11c27567ef3d0a74ca3c Mon Sep 17 00:00:00 2001 From: bXi Date: Sat, 2 Sep 2023 07:00:18 -0400 Subject: Added rudimentary SVG support. (#2738) * Added rudimentary SVG support. Added 2 functions ImageLoadSvg and ImageLoadSvgWithSize. * Added an example on how to use ImageLoadSvgWithSize and adjusted Makefiles accordingly. * Added actual correct example file. * Reviewed the code to keep the raylib coding conventions in mind. Moved the LoadImageSvg() code into LoadImage() guarded by SUPPORT_FILEFORMAT_SVG. Renamed LoadImageSvgWithSize() to LoadImageSvg(). Added a LoadImageSvgFromString() function to parse the loaded SVG into an actual image. This does the bulk of the work. * Fixed typo. --------- Co-authored-by: Ray --- examples/Makefile | 3 +- examples/Makefile.Web | 3 +- examples/textures/resources/test.svg | 1 + examples/textures/textures_svg_loading.c | 72 +++++++++++++++++++++++++++++ examples/textures/textures_svg_loading.png | Bin 0 -> 13850 bytes 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 examples/textures/resources/test.svg create mode 100644 examples/textures/textures_svg_loading.c create mode 100644 examples/textures/textures_svg_loading.png (limited to 'examples') diff --git a/examples/Makefile b/examples/Makefile index 7028a954..4ba4f172 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -475,7 +475,8 @@ TEXTURES = \ textures/textures_draw_tiled \ textures/textures_polygon \ textures/textures_gif_player \ - textures/textures_fog_of_war + textures/textures_fog_of_war \ + textures/textures_svg_loading TEXT = \ text/text_raylib_fonts \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 4574e928..ccb4550f 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -450,7 +450,8 @@ TEXTURES = \ textures/textures_draw_tiled \ textures/textures_polygon \ textures/textures_gif_player \ - textures/textures_fog_of_war + textures/textures_fog_of_war \ + textures/textures_svg_loading TEXT = \ text/text_raylib_fonts \ diff --git a/examples/textures/resources/test.svg b/examples/textures/resources/test.svg new file mode 100644 index 00000000..3d9bbb11 --- /dev/null +++ b/examples/textures/resources/test.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/textures/textures_svg_loading.c b/examples/textures/textures_svg_loading.c new file mode 100644 index 00000000..434ec760 --- /dev/null +++ b/examples/textures/textures_svg_loading.c @@ -0,0 +1,72 @@ +/******************************************************************************************* +* +* raylib [textures] example - SVG loading and texture creation +* +* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) +* +* Example originally created with raylib 4.2, last time updated with raylib 4.2 +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2022 Dennis Meinen (@bixxy#4258 on Discord) +* +********************************************************************************************/ + +#include "raylib.h" + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [textures] example - svg loading"); + + // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) + + Image image = LoadImageSvg("resources/test.svg", 400, 350); // Loaded in CPU memory (RAM) + Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) + UnloadImage(image); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //--------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // TODO: Update your variables here + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE); + + //Red border to illustrate how the SVG is centered within the specified dimensions + DrawRectangleLines((screenWidth / 2 - texture.width / 2) - 1, (screenHeight / 2 - texture.height / 2) - 1, texture.width + 2, texture.height + 2, RED); + + DrawText("this IS a texture loaded from an SVG file!", 300, 410, 10, GRAY); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadTexture(texture); // Texture unloading + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} \ No newline at end of file diff --git a/examples/textures/textures_svg_loading.png b/examples/textures/textures_svg_loading.png new file mode 100644 index 00000000..fa98605f Binary files /dev/null and b/examples/textures/textures_svg_loading.png differ -- cgit v1.2.3