From caf3aadb412c1ff701270300b380094a770f89de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agnis=20Aldi=C5=86=C5=A1=20=22NeZv=C4=93rs?= Date: Sat, 15 Nov 2025 14:54:49 +0200 Subject: [PATCH 1/4] Example textures_screen_buffer --- examples/Makefile | 1 + examples/Makefile.Web | 5 + examples/README.md | 5 +- examples/examples_list.txt | 1 + examples/textures/textures_screen_buffer.c | 159 +++++ examples/textures/textures_screen_buffer.png | Bin 0 -> 31532 bytes .../examples/textures_screen_buffer.vcxproj | 569 ++++++++++++++++++ projects/VS2022/raylib.sln | 27 + 8 files changed, 765 insertions(+), 2 deletions(-) create mode 100644 examples/textures/textures_screen_buffer.c create mode 100644 examples/textures/textures_screen_buffer.png create mode 100644 projects/VS2022/examples/textures_screen_buffer.vcxproj diff --git a/examples/Makefile b/examples/Makefile index 729459de40d3..e586f25e2b1c 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -619,6 +619,7 @@ TEXTURES = \ textures/textures_sprite_button \ textures/textures_sprite_explosion \ textures/textures_srcrec_dstrec \ + textures/textures_screen_buffer \ textures/textures_textured_curve \ textures/textures_tiled_drawing \ textures/textures_to_image diff --git a/examples/Makefile.Web b/examples/Makefile.Web index d2336e7df18e..38cedd275f4c 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -607,6 +607,7 @@ TEXTURES = \ textures/textures_sprite_button \ textures/textures_sprite_explosion \ textures/textures_srcrec_dstrec \ + textures/textures_screen_buffer \ textures/textures_textured_curve \ textures/textures_tiled_drawing \ textures/textures_to_image @@ -1058,6 +1059,10 @@ textures/textures_srcrec_dstrec: textures/textures_srcrec_dstrec.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file textures/resources/scarfy.png@resources/scarfy.png +textures/textures_screen_buffer: textures/textures_screen_buffer.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/road.png@resources/road.png + textures/textures_textured_curve: textures/textures_textured_curve.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file textures/resources/road.png@resources/road.png diff --git a/examples/README.md b/examples/README.md index f1f6c80b3eb0..01fda481a635 100644 --- a/examples/README.md +++ b/examples/README.md @@ -17,7 +17,7 @@ You may find it easier to use than other toolchains, especially when it comes to - `zig build [module]` to compile all examples for a module (e.g. `zig build core`) - `zig build [example]` to compile _and run_ a particular example (e.g. `zig build core_basic_window`) -## EXAMPLES COLLECTION [TOTAL: 194] +## EXAMPLES COLLECTION [TOTAL: 195] ### category: core [47] @@ -114,7 +114,7 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | [shapes_lines_drawing](shapes/shapes_lines_drawing.c) | shapes_lines_drawing | ⭐☆☆☆ | 5.6-dev | 5.6 | [Robin](https://github.com/RobinsAviary) | | [shapes_math_angle_rotation](shapes/shapes_math_angle_rotation.c) | shapes_math_angle_rotation | ⭐☆☆☆ | 5.6-dev | 5.6 | [Kris](https://github.com/krispy-snacc) | -### category: textures [26] +### category: textures [27] Examples using raylib textures functionality, including image/textures loading/generation and drawing, provided by raylib [textures](../src/rtextures.c) module. @@ -145,6 +145,7 @@ Examples using raylib textures functionality, including image/textures loading/g | [textures_image_kernel](textures/textures_image_kernel.c) | textures_image_kernel | ⭐⭐⭐⭐️ | 1.3 | 1.3 | [Karim Salem](https://github.com/kimo-s) | | [textures_image_channel](textures/textures_image_channel.c) | textures_image_channel | ⭐⭐☆☆ | 5.5 | 5.5 | [Bruno Cabral](https://github.com/brccabral) | | [textures_image_rotate](textures/textures_image_rotate.c) | textures_image_rotate | ⭐⭐☆☆ | 1.0 | 1.0 | [Ramon Santamaria](https://github.com/raysan5) | +| [textures_screen_buffer](textures/textures_screen_buffer.c) | textures_screen_buffer | ⭐⭐☆☆ | 5.5 | 5.5 | [Agnis Aldins](https://github.com/nezvers) | | [textures_textured_curve](textures/textures_textured_curve.c) | textures_textured_curve | ⭐⭐⭐☆ | 4.5 | 4.5 | [Jeffery Myers](https://github.com/JeffM2501) | ### category: text [15] diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 1804d7edcb59..946a459061f0 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -113,6 +113,7 @@ textures;textures_gif_player;★★★☆;4.2;4.2;2021;2025;"Ramon Santamaria";@ textures;textures_image_kernel;★★★★;1.3;1.3;2015;2025;"Karim Salem";@kimo-s textures;textures_image_channel;★★☆☆;5.5;5.5;2024;2025;"Bruno Cabral";@brccabral textures;textures_image_rotate;★★☆☆;1.0;1.0;2014;2025;"Ramon Santamaria";@raysan5 +textures;textures_screen_buffer;★★☆☆;5.5;5.5;2014;2025;"Agnis Aldins";@nezvers textures;textures_textured_curve;★★★☆;4.5;4.5;2022;2025;"Jeffery Myers";@JeffM2501 text;text_sprite_fonts;★☆☆☆;1.7;3.7;2017;2025;"Ramon Santamaria";@raysan5 text;text_font_spritefont;★☆☆☆;1.0;1.0;2014;2025;"Ramon Santamaria";@raysan5 diff --git a/examples/textures/textures_screen_buffer.c b/examples/textures/textures_screen_buffer.c new file mode 100644 index 000000000000..fe5f7c59e16a --- /dev/null +++ b/examples/textures/textures_screen_buffer.c @@ -0,0 +1,159 @@ +/******************************************************************************************* +* +* raylib [] example - +* +* Example complexity rating: [★★☆☆] 2/4 +* +* Example originally created with raylib 5.5, last time updated with raylib 5.6 +* +* Example contributed by (@) and reviewed by Ramon Santamaria (@raysan5) +* +* 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) - (@) +* +********************************************************************************************/ + +#include "raylib.h" + +#define MAX_COLORS 256 +#define SCREEN_WIDTH 800 +#define SCREEN_HEIGHT 450 +#define SCALE_FACTOR 2 +// buffer size at least for screenImage pixel count +#define INDEX_BUFFER_SIZE ((SCREEN_WIDTH * SCREEN_HEIGHT) / SCALE_FACTOR) +#define FLAME_WIDTH (SCREEN_WIDTH / SCALE_FACTOR) + +static void GeneretePalette(Color *palette); +static void ClearIndexBuffer(unsigned char *buffer, int count); + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = SCREEN_WIDTH; + const int screenHeight = SCREEN_HEIGHT; + const int pixelScale = SCALE_FACTOR; + const int imageWidth = screenWidth / pixelScale; + const int imageHeight = screenHeight / pixelScale; + InitWindow(screenWidth, screenHeight, "raylib [] example - "); + + Color palette[MAX_COLORS] = {0}; + unsigned char indexBuffer[INDEX_BUFFER_SIZE] = {0}; + unsigned char flameRootBuffer[FLAME_WIDTH] = {0}; + + Image screenImage = GenImageColor(imageWidth, imageHeight, BLACK); + Texture screenTexture = LoadTextureFromImage(screenImage); + GeneretePalette(palette); + ClearIndexBuffer(indexBuffer, INDEX_BUFFER_SIZE); + ClearIndexBuffer(flameRootBuffer, FLAME_WIDTH); + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Grow flameRoot + for (int x = 2; x < FLAME_WIDTH; ++x) + { + unsigned short flame = flameRootBuffer[x]; + if (flame == 255) continue; + flame += GetRandomValue(0, 2); + if (flame > 255) flame = 255; + flameRootBuffer[x] = flame; + } + + // transfer flameRoot to indexBuffer + for (int x = 0; x < FLAME_WIDTH; ++x) + { + int i = x + (imageHeight - 1) * imageWidth; + indexBuffer[i] = flameRootBuffer[x]; + } + + // Clear top row, because it can't move any higher + for (int x = 0; x < imageWidth; ++x) + { + if (indexBuffer[x] == 0) continue; + indexBuffer[x] = 0; + } + + // Skip top row, it is already cleared + for (int y = 1; y < imageHeight; ++y){ + for (int x = 0; x < imageWidth; ++x) + { + unsigned i = x + y * imageWidth; + unsigned char colorIndex = indexBuffer[i]; + if (colorIndex == 0) continue; + + // Move pixel a row above + indexBuffer[i] = 0; + int moveX = GetRandomValue(0, 2) - 1; + int newX = x + moveX; + if (newX < 0 || newX >= imageWidth) continue; + + unsigned i_above = i - imageWidth + moveX; + int decay = GetRandomValue(0, 3); + colorIndex -= (decay < colorIndex) ? decay : colorIndex; + indexBuffer[i_above] = colorIndex; + } + } + + // Update screenImage with palette colors + for (int y = 1; y < imageHeight; ++y){ + for (int x = 0; x < imageWidth; ++x) + { + unsigned i = x + y * imageWidth; + unsigned char colorIndex = indexBuffer[i]; + Color col = palette[colorIndex]; + ImageDrawPixel(&screenImage, x, y, col); + } + } + + UpdateTexture(screenTexture, screenImage.data); + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + const Vector2 origin = (Vector2){0, 0}; + const float rotation = 0.f; + DrawTextureEx(screenTexture, origin, rotation, pixelScale, WHITE); + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + + UnloadTexture(screenTexture); + UnloadImage(screenImage); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +static void GeneretePalette(Color *palette) +{ + for (int i = 0; i < MAX_COLORS; ++i) + { + float t = (float)i/(float)(MAX_COLORS - 1); + float hue = t * t; + float saturation = t; + float value = t; + palette[i] = ColorFromHSV(250.f + 150.f * hue, saturation, value); + } +} + +static void ClearIndexBuffer(unsigned char *buffer, int count) +{ + // Use memset to set to ZERO, but for demonstration a plain for loop is used + for (int i = 0; i < count; ++i) + { + buffer[i] = 0; + } +} \ No newline at end of file diff --git a/examples/textures/textures_screen_buffer.png b/examples/textures/textures_screen_buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..b93bba9896a0075208067de806b479e01f1b43d2 GIT binary patch literal 31532 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 + + + + Debug.DLL + ARM64 + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + ARM64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {6B1A933E-71B8-4C1F-9E79-02D98830E671} + Win32Proj + textures_screen_buffer + 10.0 + textures_screen_buffer + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + \ No newline at end of file diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index 34c696ffea8c..c3fbb6d2b1cd 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -409,6 +409,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_viewport_scaling", "ex EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_compute_hash", "examples\core_compute_hash.vcxproj", "{6C897101-BE52-4387-8AA2-062123A76BA1}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "textures_screen_buffer", "examples\textures_screen_buffer.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|ARM64 = Debug.DLL|ARM64 @@ -5079,6 +5081,30 @@ Global {6C897101-BE52-4387-8AA2-062123A76BA1}.Release|x64.Build.0 = Release|x64 {6C897101-BE52-4387-8AA2-062123A76BA1}.Release|x86.ActiveCfg = Release|Win32 {6C897101-BE52-4387-8AA2-062123A76BA1}.Release|x86.Build.0 = Release|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|ARM64.Build.0 = Debug|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x64.ActiveCfg = Debug|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x64.Build.0 = Debug|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x86.ActiveCfg = Debug|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x86.Build.0 = Debug|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|ARM64.ActiveCfg = Release.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|ARM64.Build.0 = Release.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|ARM64.ActiveCfg = Release|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|ARM64.Build.0 = Release|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x64.ActiveCfg = Release|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x64.Build.0 = Release|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x86.ActiveCfg = Release|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -5285,6 +5311,7 @@ Global {666346D7-C84B-498D-AE17-53B20C62DB1A} = {278D8859-20B1-428F-8448-064F46E1F021} {AD66AA6A-1E36-4FF0-8670-4F9834BCDB91} = {6C82BAAE-BDDF-457D-8FA8-7E2490B07035} {6C897101-BE52-4387-8AA2-062123A76BA1} = {6C82BAAE-BDDF-457D-8FA8-7E2490B07035} + {6B1A933E-71B8-4C1F-9E79-02D98830E671} = {DA049009-21FF-4AC0-84E4-830DD1BCD0CE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29} From dce6a4973aa5883588e8f9aa088a867099d307e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agnis=20Aldi=C5=86=C5=A1=20=22NeZv=C4=93rs?= Date: Sat, 15 Nov 2025 14:56:58 +0200 Subject: [PATCH 2/4] remove resource preload for web makefile --- examples/Makefile.Web | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 38cedd275f4c..01426d7f5ac1 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -1060,8 +1060,7 @@ textures/textures_srcrec_dstrec: textures/textures_srcrec_dstrec.c --preload-file textures/resources/scarfy.png@resources/scarfy.png textures/textures_screen_buffer: textures/textures_screen_buffer.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ - --preload-file textures/resources/road.png@resources/road.png + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) textures/textures_textured_curve: textures/textures_textured_curve.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ From 8bcc5f55e32c6e59795e4dbecb2f874b9ffea293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agnis=20Aldi=C5=86=C5=A1=20=22NeZv=C4=93rs?= Date: Sat, 15 Nov 2025 15:10:58 +0200 Subject: [PATCH 3/4] update description --- examples/textures/textures_screen_buffer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/textures/textures_screen_buffer.c b/examples/textures/textures_screen_buffer.c index fe5f7c59e16a..878186f2b554 100644 --- a/examples/textures/textures_screen_buffer.c +++ b/examples/textures/textures_screen_buffer.c @@ -1,17 +1,17 @@ /******************************************************************************************* * -* raylib [] example - +* raylib [textures] example - screen buffer / update Image as screen buffer and display with texture * * Example complexity rating: [★★☆☆] 2/4 * * Example originally created with raylib 5.5, last time updated with raylib 5.6 * -* Example contributed by (@) and reviewed by Ramon Santamaria (@raysan5) +* Example contributed by Agnis Aldiņš (@nezvers) and reviewed by Ramon Santamaria (@raysan5) * * 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) - (@) +* Copyright (c) 2025 Agnis Aldiņš (@nezvers) * ********************************************************************************************/ From f0a356b977f513a59e759fcfb49bcedb899ee06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agnis=20Aldi=C5=86=C5=A1=20=22NeZv=C4=93rs?= Date: Sat, 15 Nov 2025 15:45:11 +0200 Subject: [PATCH 4/4] code formatting --- examples/textures/textures_screen_buffer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/textures/textures_screen_buffer.c b/examples/textures/textures_screen_buffer.c index 878186f2b554..f5e67f20ce68 100644 --- a/examples/textures/textures_screen_buffer.c +++ b/examples/textures/textures_screen_buffer.c @@ -83,7 +83,8 @@ int main(void) } // Skip top row, it is already cleared - for (int y = 1; y < imageHeight; ++y){ + for (int y = 1; y < imageHeight; ++y) + { for (int x = 0; x < imageWidth; ++x) { unsigned i = x + y * imageWidth; @@ -104,7 +105,8 @@ int main(void) } // Update screenImage with palette colors - for (int y = 1; y < imageHeight; ++y){ + for (int y = 1; y < imageHeight; ++y) + { for (int x = 0; x < imageWidth; ++x) { unsigned i = x + y * imageWidth;