From 596d3bcb7e658a82218c84fdb437310a960bc0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agnis=20Aldi=C5=86=C5=A1=20=22NeZv=C4=93rs?= Date: Sun, 16 Nov 2025 20:40:49 +0200 Subject: [PATCH] [examples] Added: `textures_screen_buffer` (#5357) * Example textures_screen_buffer * remove resource preload for web makefile * update description * code formatting --- examples/Makefile | 1 + examples/Makefile.Web | 4 + examples/README.md | 5 +- examples/examples_list.txt | 1 + examples/textures/textures_screen_buffer.c | 161 +++++ examples/textures/textures_screen_buffer.png | Bin 0 -> 31532 bytes .../examples/textures_screen_buffer.vcxproj | 569 ++++++++++++++++++ projects/VS2022/raylib.sln | 27 + 8 files changed, 766 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 f36b89bc2..ccd24bf28 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 d2336e7df..01426d7f5 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,9 @@ 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) + 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 82a91e60b..bdf50cb82 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 7ce5cf2dd..4e7130d7d 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 000000000..f5e67f20c --- /dev/null +++ b/examples/textures/textures_screen_buffer.c @@ -0,0 +1,161 @@ +/******************************************************************************************* +* +* 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 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) 2025 Agnis Aldiņš (@nezvers) +* +********************************************************************************************/ + +#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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 ZvuA$4dF#pV9?-qm44$rjF6*2UngDKxo6G + + + + 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 34c696ffe..c3fbb6d2b 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}