diff options
| author | raysan5 <[email protected]> | 2021-10-17 21:02:18 +0200 |
|---|---|---|
| committer | raysan5 <[email protected]> | 2021-10-17 21:02:18 +0200 |
| commit | 35e67da08e3d214589968c19b4b2fb31d8e566cc (patch) | |
| tree | 5054bcea5f6df754f467590101789b17dd9d9944 /examples/web/shaders/shaders_julia_set.c | |
| parent | b2228039039afc05c41edd12103123f2a36c8080 (diff) | |
| download | raylib.com-35e67da08e3d214589968c19b4b2fb31d8e566cc.tar.gz raylib.com-35e67da08e3d214589968c19b4b2fb31d8e566cc.zip | |
UPDATED: examples to raylib 4.0
Some new examples added
Diffstat (limited to 'examples/web/shaders/shaders_julia_set.c')
| -rw-r--r-- | examples/web/shaders/shaders_julia_set.c | 232 |
1 files changed, 0 insertions, 232 deletions
diff --git a/examples/web/shaders/shaders_julia_set.c b/examples/web/shaders/shaders_julia_set.c deleted file mode 100644 index 378da2f..0000000 --- a/examples/web/shaders/shaders_julia_set.c +++ /dev/null @@ -1,232 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - julia sets -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3). -* -* This example has been created using raylib 2.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Example contributed by eggmund (@eggmund) and reviewed by Ramon Santamaria (@raysan5) -* -* Copyright (c) 2019 eggmund (@eggmund) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -// A few good julia sets -const float POINTS_OF_INTEREST[6][2] = -{ - { -0.348827, 0.607167 }, - { -0.786268, 0.169728 }, - { -0.8, 0.156 }, - { 0.285, 0.0 }, - { -0.835, -0.2321 }, - { -0.70176, -0.3842 }, -}; - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - -RenderTexture2D target = { 0 }; -Shader shader = { 0 }; - -float c[2] = { 0.0f, 0.0f }; -float offset[2] = { 0.0f, 0.0f }; - -int cLoc = 0; -int zoomLoc = 0; -int offsetLoc = 0; - -float zoom = 1.0f; -Vector2 offsetSpeed = { 0.0f, 0.0f }; - -int incrementSpeed = 0; // Multiplier of speed to change c value -bool showControls = true; // Show controls -static bool pause = false; // Pause animation - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - julia sets"); - - // Load julia set shader - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/julia_set.fs", GLSL_VERSION)); - - // c constant to use in z^2 + c - c[0] = POINTS_OF_INTEREST[0][0]; - c[1] = POINTS_OF_INTEREST[0][1]; - - // Offset and zoom to draw the julia set at. (centered on screen and default size) - offset[0] = -(float)screenWidth/2; - offset[1] = -(float)screenHeight/2; - - // Get variable (uniform) locations on the shader to connect with the program - // NOTE: If uniform variable could not be found in the shader, function returns -1 - cLoc = GetShaderLocation(shader, "c"); - zoomLoc = GetShaderLocation(shader, "zoom"); - offsetLoc = GetShaderLocation(shader, "offset"); - - // Tell the shader what the screen dimensions, zoom, offset and c are - float screenDims[2] = { (float)screenWidth, (float)screenHeight }; - SetShaderValue(shader, GetShaderLocation(shader, "screenDims"), screenDims, SHADER_UNIFORM_VEC2); - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - SetShaderValue(shader, zoomLoc, &zoom, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, offsetLoc, offset, SHADER_UNIFORM_VEC2); - - // Create a RenderTexture2D to be used for render to texture - target = LoadRenderTexture(screenWidth, screenHeight); - -#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 - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - - // Press [1 - 6] to reset c to a point of interest - if (IsKeyPressed(KEY_ONE) || - IsKeyPressed(KEY_TWO) || - IsKeyPressed(KEY_THREE) || - IsKeyPressed(KEY_FOUR) || - IsKeyPressed(KEY_FIVE) || - IsKeyPressed(KEY_SIX)) - { - if (IsKeyPressed(KEY_ONE)) c[0] = POINTS_OF_INTEREST[0][0], c[1] = POINTS_OF_INTEREST[0][1]; - else if (IsKeyPressed(KEY_TWO)) c[0] = POINTS_OF_INTEREST[1][0], c[1] = POINTS_OF_INTEREST[1][1]; - else if (IsKeyPressed(KEY_THREE)) c[0] = POINTS_OF_INTEREST[2][0], c[1] = POINTS_OF_INTEREST[2][1]; - else if (IsKeyPressed(KEY_FOUR)) c[0] = POINTS_OF_INTEREST[3][0], c[1] = POINTS_OF_INTEREST[3][1]; - else if (IsKeyPressed(KEY_FIVE)) c[0] = POINTS_OF_INTEREST[4][0], c[1] = POINTS_OF_INTEREST[4][1]; - else if (IsKeyPressed(KEY_SIX)) c[0] = POINTS_OF_INTEREST[5][0], c[1] = POINTS_OF_INTEREST[5][1]; - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - } - - if (IsKeyPressed(KEY_SPACE)) pause = !pause; // Pause animation (c change) - if (IsKeyPressed(KEY_F1)) showControls = !showControls; // Toggle whether or not to show controls - - if (!pause) - { - if (IsKeyPressed(KEY_RIGHT)) incrementSpeed++; - else if (IsKeyPressed(KEY_LEFT)) incrementSpeed--; - - // TODO: The idea is to zoom and move around with mouse - // Probably offset movement should be proportional to zoom level - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) || IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) zoom += zoom*0.003f; - if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) zoom -= zoom*0.003f; - - Vector2 mousePos = GetMousePosition(); - - offsetSpeed.x = mousePos.x -(float)screenWidth/2; - offsetSpeed.y = mousePos.y -(float)screenHeight/2; - - // Slowly move camera to targetOffset - offset[0] += GetFrameTime()*offsetSpeed.x*0.8f; - offset[1] += GetFrameTime()*offsetSpeed.y*0.8f; - } - else offsetSpeed = (Vector2){ 0.0f, 0.0f }; - - SetShaderValue(shader, zoomLoc, &zoom, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, offsetLoc, offset, SHADER_UNIFORM_VEC2); - - // Increment c value with time - float amount = GetFrameTime()*incrementSpeed*0.0005f; - c[0] += amount; - c[1] += amount; - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(BLACK); // Clear the screen of the previous frame. - - // Using a render texture to draw Julia set - BeginTextureMode(target); // Enable drawing to texture - ClearBackground(BLACK); // Clear the render texture - - // Draw a rectangle in shader mode to be used as shader canvas - // NOTE: Rectangle uses font white character texture coordinates, - // so shader can not be applied here directly because input vertexTexCoord - // do not represent full screen coordinates (space where want to apply shader) - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); - EndTextureMode(); - - // Draw the saved texture and rendered julia set with shader - // NOTE: We do not invert texture on Y, already considered inside shader - BeginShaderMode(shader); - DrawTexture(target.texture, 0, 0, WHITE); - EndShaderMode(); - - if (showControls) - { - DrawText("Press Mouse buttons right/left to zoom in/out and move", 10, 15, 10, RAYWHITE); - DrawText("Press KEY_F1 to toggle these controls", 10, 30, 10, RAYWHITE); - DrawText("Press KEYS [1 - 6] to change point of interest", 10, 45, 10, RAYWHITE); - DrawText("Press KEY_LEFT | KEY_RIGHT to change speed", 10, 60, 10, RAYWHITE); - DrawText("Press KEY_SPACE to pause movement animation", 10, 75, 10, RAYWHITE); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- -} |
