summaryrefslogtreecommitdiffhomepage
path: root/examples/web/textures/textures_image_processing.c
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2021-10-17 21:02:18 +0200
committerraysan5 <[email protected]>2021-10-17 21:02:18 +0200
commit35e67da08e3d214589968c19b4b2fb31d8e566cc (patch)
tree5054bcea5f6df754f467590101789b17dd9d9944 /examples/web/textures/textures_image_processing.c
parentb2228039039afc05c41edd12103123f2a36c8080 (diff)
downloadraylib.com-35e67da08e3d214589968c19b4b2fb31d8e566cc.tar.gz
raylib.com-35e67da08e3d214589968c19b4b2fb31d8e566cc.zip
UPDATED: examples to raylib 4.0
Some new examples added
Diffstat (limited to 'examples/web/textures/textures_image_processing.c')
-rw-r--r--examples/web/textures/textures_image_processing.c199
1 files changed, 0 insertions, 199 deletions
diff --git a/examples/web/textures/textures_image_processing.c b/examples/web/textures/textures_image_processing.c
deleted file mode 100644
index 00282d0..0000000
--- a/examples/web/textures/textures_image_processing.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************************
-*
-* raylib [textures] example - Image processing
-*
-* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM)
-*
-* This example has been created using raylib 3.5 (www.raylib.com)
-* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-* Copyright (c) 2016 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <stdlib.h> // Required for: free()
-
-#if defined(PLATFORM_WEB)
- #include <emscripten/emscripten.h>
-#endif
-
-#define NUM_PROCESSES 8
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition
-//----------------------------------------------------------------------------------
-const int screenWidth = 800;
-const int screenHeight = 450;
-
-typedef enum {
- NONE = 0,
- COLOR_GRAYSCALE,
- COLOR_TINT,
- COLOR_INVERT,
- COLOR_CONTRAST,
- COLOR_BRIGHTNESS,
- FLIP_VERTICAL,
- FLIP_HORIZONTAL
-} ImageProcess;
-
-static const char *processText[] = {
- "NO PROCESSING",
- "COLOR GRAYSCALE",
- "COLOR TINT",
- "COLOR INVERT",
- "COLOR CONTRAST",
- "COLOR BRIGHTNESS",
- "FLIP VERTICAL",
- "FLIP HORIZONTAL"
-};
-
-static Image imOrigin = { 0 };
-static Texture2D texture = { 0 };
-
-static Image imCopy = { 0 };
-
-static int currentProcess = NONE;
-static bool textureReload = false;
-
-static Rectangle toggleRecs[NUM_PROCESSES] = { 0 };
-int mouseHoverRec = -1;
-
-//----------------------------------------------------------------------------------
-// Module Functions Declaration
-//----------------------------------------------------------------------------------
-void UpdateDrawFrame(void); // Update and Draw one frame
-
-//----------------------------------------------------------------------------------
-// Program Main Entry Point
-//----------------------------------------------------------------------------------
-int main(void)
-{
- // Initialization
- //--------------------------------------------------------------------------------------
- InitWindow(screenWidth, screenHeight, "raylib [textures] example - image processing");
-
- // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
-
- imOrigin = LoadImage("resources/parrots.png"); // Loaded in CPU memory (RAM)
- ImageFormat(&imOrigin, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8); // Format image to RGBA 32bit (required for texture update)
- texture = LoadTextureFromImage(imOrigin); // Image converted to texture, GPU memory (VRAM)
-
- for (int i = 0; i < NUM_PROCESSES; i++) toggleRecs[i] = (Rectangle){ 40.0f, (float)(50 + 32*i), 150.0f, 30.0f };
-
-#if defined(PLATFORM_WEB)
- emscripten_set_main_loop(UpdateDrawFrame, 60, 1);
-#else
- SetTargetFPS(60); // Set our game to run at 60 frames-per-second
- //--------------------------------------------------------------------------------------
-
- // Main game loop
- while (!WindowShouldClose()) // Detect window close button or ESC key
- {
- UpdateDrawFrame();
- }
-#endif
-
- // De-Initialization
- //--------------------------------------------------------------------------------------
- UnloadTexture(texture); // Unload texture from VRAM
- UnloadImage(imOrigin); // Unload image-origin from RAM
- UnloadImage(imCopy); // Unload image-copy from RAM
-
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
-
- return 0;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition
-//----------------------------------------------------------------------------------
-void UpdateDrawFrame(void)
-{
- // Update
- //----------------------------------------------------------------------------------
- // Mouse toggle group logic
- for (int i = 0; i < NUM_PROCESSES; i++)
- {
- if (CheckCollisionPointRec(GetMousePosition(), toggleRecs[i]))
- {
- mouseHoverRec = i;
-
- if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON))
- {
- currentProcess = i;
- textureReload = true;
- }
- break;
- }
- else mouseHoverRec = -1;
- }
-
- // Keyboard toggle group logic
-
- if (IsKeyPressed(KEY_DOWN))
- {
- currentProcess++;
- if (currentProcess > (NUM_PROCESSES - 1)) currentProcess = 0;
- textureReload = true;
- }
- else if (IsKeyPressed(KEY_UP))
- {
- currentProcess--;
- if (currentProcess < 0) currentProcess = 7;
- textureReload = true;
- }
-
- // Reload texture when required
- if (textureReload)
- {
- UnloadImage(imCopy); // Unload image-copy data
- imCopy = ImageCopy(imOrigin); // Restore image-copy from image-origin
-
- // NOTE: Image processing is a costly CPU process to be done every frame,
- // If image processing is required in a frame-basis, it should be done
- // with a texture and by shaders
- switch (currentProcess)
- {
- case COLOR_GRAYSCALE: ImageColorGrayscale(&imCopy); break;
- case COLOR_TINT: ImageColorTint(&imCopy, GREEN); break;
- case COLOR_INVERT: ImageColorInvert(&imCopy); break;
- case COLOR_CONTRAST: ImageColorContrast(&imCopy, -40); break;
- case COLOR_BRIGHTNESS: ImageColorBrightness(&imCopy, -80); break;
- case FLIP_VERTICAL: ImageFlipVertical(&imCopy); break;
- case FLIP_HORIZONTAL: ImageFlipHorizontal(&imCopy); break;
- default: break;
- }
-
- Color *pixels = LoadImageColors(imCopy); // Load pixel data from image (RGBA 32bit)
- UpdateTexture(texture, pixels); // Update texture with new image data
- UnloadImageColors(pixels); // Unload pixels data from RAM
-
- textureReload = false;
- }
- //----------------------------------------------------------------------------------
-
- // Draw
- //----------------------------------------------------------------------------------
- BeginDrawing();
-
- ClearBackground(RAYWHITE);
-
- DrawText("IMAGE PROCESSING:", 40, 30, 10, DARKGRAY);
-
- // Draw rectangles
- for (int i = 0; i < NUM_PROCESSES; i++)
- {
- DrawRectangleRec(toggleRecs[i], ((i == currentProcess) || (i == mouseHoverRec)) ? SKYBLUE : LIGHTGRAY);
- DrawRectangleLines((int)toggleRecs[i].x, (int) toggleRecs[i].y, (int) toggleRecs[i].width, (int) toggleRecs[i].height, ((i == currentProcess) || (i == mouseHoverRec)) ? BLUE : GRAY);
- DrawText( processText[i], (int)( toggleRecs[i].x + toggleRecs[i].width/2 - MeasureText(processText[i], 10)/2), (int) toggleRecs[i].y + 11, 10, ((i == currentProcess) || (i == mouseHoverRec)) ? DARKBLUE : DARKGRAY);
- }
-
- DrawTexture(texture, screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, WHITE);
- DrawRectangleLines(screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, texture.width, texture.height, BLACK);
-
- EndDrawing();
- //----------------------------------------------------------------------------------
-} \ No newline at end of file