diff --git a/examples/Makefile b/examples/Makefile index 083afd92..6b9f5229 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -423,6 +423,7 @@ EXAMPLES = \ shaders/shaders_postprocessing \ shaders/shaders_raymarching \ shaders/shaders_palette_switch \ + shaders/shaders_julia_set \ audio/audio_sound_loading \ audio/audio_music_stream \ audio/audio_module_playing \ diff --git a/examples/raylib_compile_execute.bat b/examples/raylib_compile_execute.bat index aaae4056..4b356419 100644 --- a/examples/raylib_compile_execute.bat +++ b/examples/raylib_compile_execute.bat @@ -25,7 +25,7 @@ cmd /c if exist %NAMEPART%.exe del /F %NAMEPART%.exe :: -std=c99 : Use C99 language standard :: -Wall : Enable all compilation Warnings :: -mwindows : Compile a Windows executable, no cmd window -gcc -o %NAMEPART%.exe %FILENAME% %RAYLIB_RES_FILE% -s -O2 -I%RAYLIB_INCLUDE_DIR% -I%RAYLIB_LIB_DIR% -lraylib -lopengl32 -lgdi32 -std=c99 -Wall -mwindows +gcc -o %NAMEPART%.exe %FILENAME% %RAYLIB_RES_FILE% -s -O2 -I%RAYLIB_INCLUDE_DIR% -I%RAYLIB_LIB_DIR% -lraylib -lopengl32 -lgdi32 -lwinmm -std=c99 -Wall -mwindows :: . :: > Executing program :: ------------------------- diff --git a/examples/shaders/resources/shaders/glsl330/julia_shader.fs b/examples/shaders/resources/shaders/glsl330/julia_shader.fs new file mode 100644 index 00000000..b1331d84 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/julia_shader.fs @@ -0,0 +1,86 @@ +#version 330 + +// Input vertex attributes (from vertex shader) + +uniform vec2 screenDims; // Dimensions of the screen +uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c +uniform vec2 offset; // Offset of the scale. +uniform float zoom; // Zoom of the scale. + +// Output fragment color +out vec4 finalColor; + +const int MAX_ITERATIONS = 255; // Max iterations to do. + +// Square a complex number +vec2 complexSquare(vec2 z) +{ + return vec2( + z.x * z.x - z.y * z.y, + z.x * z.y * 2.0 + ); +} + +// Convert Hue Saturation Value color into RGB +vec3 hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + + +void main() +{ + // The pixel coordinates scaled so they are on the mandelbrot scale. + vec2 z = vec2(((gl_FragCoord.x + offset.x)/screenDims.x) * 2.5 * zoom, + ((screenDims.y - gl_FragCoord.y + offset.y)/screenDims.y) * 1.5 * zoom); // y also flipped due to opengl + int iterations = 0; + + /* + Julia sets use a function z^2 + c, where c is a constant. + This function is iterated until the nature of the point is determined. + + If the magnitude of the number becomes greater than 2, then from that point onward + the number will get bigger and bigger, and will never get smaller (tends towards infinity). + 2^2 = 4, 4^2 = 8 and so on. + So at 2 we stop iterating. + + If the number is below 2, we keep iterating. + But when do we stop iterating if the number is always below 2 (it converges)? + That is what MAX_ITERATIONS is for. + Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can + then map to a color. + + We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared. + And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power). + */ + for (iterations = 0; iterations < MAX_ITERATIONS; iterations++) + { + z = complexSquare(z) + c; // Iterate function + if (dot(z, z) > 4.0) + { + break; + } + } + + // Another few iterations decreases errors in the smoothing calculation. + // See http://linas.org/art-gallery/escape/escape.html for more information. + z = complexSquare(z) + c; + z = complexSquare(z) + c; + + // This last part smooths the color (again see link above). + float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0)); + + // Normalize the value so it is between 0 and 1. + float norm = smoothVal/float(MAX_ITERATIONS); + + // If in set, color black. 0.999 allows for some float accuracy error. + if (norm > 0.999) + { + finalColor = vec4(0.0, 0.0, 0.0, 1.0); + } else + { + finalColor = vec4(hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0); + } +} diff --git a/examples/shaders/shaders_julia_set.c b/examples/shaders/shaders_julia_set.c new file mode 100644 index 00000000..381cd33e --- /dev/null +++ b/examples/shaders/shaders_julia_set.c @@ -0,0 +1,213 @@ +/******************************************************************************************* +* +* raylib [shaders] example - Render julia sets using a shader. +* +* 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) +* +* Author: eggmund (https://github.com/eggmund) +* +********************************************************************************************/ + +#include "raylib.h" +#include // For memcpy + +// Speed when using auto +const float AUTO_SPEED = 0.0005; + +// 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}, +}; + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 1280; + int screenHeight = 720; + + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - julia set renderer"); + + // If julia set is rendered for this frame. + bool rendered = false; + + bool showControls = true; + + // Multiplier of speed to change c value. Set to 3 to start off with. + int incrementSpeed = 3; + + // Offset and zoom to draw the julia set at. (centered on screen and 1.6 times smaller) + float offset[2] = { -(float)screenWidth/2, -(float)screenHeight/2 }; + float zoom = 1.6; + + // c constant to use in z^2 + c + float c[2]; + // Copy a point of interest into the c variable. 4 bytes per float (32 bits). + memcpy(c, &POINTS_OF_INTEREST[0], 8); + + // Load julia set shader + // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader + Shader shader = LoadShader(0, "resources/shaders/glsl330/julia_shader.fs"); + + // Get variable (uniform) location on the shader to connect with the program + // NOTE: If uniform variable could not be found in the shader, function returns -1 + // The location of c will be stored since we will need to change this whenever c changes + int cLoc = GetShaderLocation(shader, "c"); + + // 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, UNIFORM_VEC2); + SetShaderValue(shader, GetShaderLocation(shader, "zoom"), &zoom, UNIFORM_FLOAT); + SetShaderValue(shader, GetShaderLocation(shader, "offset"), offset, UNIFORM_VEC2); + + SetShaderValue(shader, cLoc, c, UNIFORM_VEC2); + + // Create a RenderTexture2D to be used for render to texture + RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); + + SetTargetFPS(60); // Set the window to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + + // Get input + //---------------------------------------------------------------------------------- + + // 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)) + { + memcpy(c, &POINTS_OF_INTEREST[0], 8); + } + else if (IsKeyPressed(KEY_TWO)) + { + memcpy(c, &POINTS_OF_INTEREST[1], 8); + } + else if (IsKeyPressed(KEY_THREE)) + { + memcpy(c, &POINTS_OF_INTEREST[2], 8); + } + else if (IsKeyPressed(KEY_FOUR)) + { + memcpy(c, &POINTS_OF_INTEREST[3], 8); + } + else if (IsKeyPressed(KEY_FIVE)) + { + memcpy(c, &POINTS_OF_INTEREST[4], 8); + } + else if (IsKeyPressed(KEY_SIX)) + { + memcpy(c, &POINTS_OF_INTEREST[5], 8); + } + SetShaderValue(shader, cLoc, c, UNIFORM_VEC2); + rendered = false; // c value has changed, so render the set again. + } + + // Press "r" to stop changing c + if (IsKeyPressed(KEY_R)) + { + incrementSpeed = 0; + } + + // Toggle whether or not to show controls + if (IsKeyPressed(KEY_H)) + { + showControls = !showControls; + } + + // Scroll to change c increment speed. + int mouseMv = GetMouseWheelMove(); // Get the amount the mouse has moved this frame + if (mouseMv != 0) + { + if (IsKeyDown(KEY_LEFT_SHIFT)) + { + incrementSpeed += mouseMv * 10; + } + else + { + incrementSpeed += mouseMv; + } + rendered = false; + } + + if (incrementSpeed != 0) + { + float amount = GetFrameTime() * incrementSpeed * AUTO_SPEED; + c[0] += amount; + c[1] += amount; + + // Update the c value in the shader. + SetShaderValue(shader, cLoc, c, UNIFORM_VEC2); + rendered = false; + } + + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(BLACK); // Clear the screen of the previous frame. + + // If the c value has changed, redraw the julia set using the shader, onto the render texture. + if (!rendered) + { + BeginTextureMode(target); // Enable drawing to texture + + ClearBackground(BLACK); // Clear the last frame drawn on the texture. + + // Draw a rectangle in shader mode. This acts as a canvas for the shader to draw on. + BeginShaderMode(shader); + DrawRectangle(0, 0, screenWidth, screenHeight, BLACK); + EndShaderMode(); + + EndTextureMode(); + + rendered = true; // The set is now rendered, so do not compute it again until it next changes. + } + + // Draw the saved texture (rendered julia set). + DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, target.texture.height }, (Vector2){ 0, 0 }, WHITE); + + // Print information. + DrawText( FormatText("cx: %f\ncy: %f\nspeed: %d", c[0], c[1], incrementSpeed), 10, 10, 20, RAYWHITE ); + + if (showControls) + { + DrawText("Press keys 1 - 6 to change point of interest.", 10, screenHeight - 88, 20, RAYWHITE); + DrawText("Use the scroll wheel to auto increment the c value. Hold shift while scrolling to increase speed by 10.", 10, screenHeight - 66, 20, RAYWHITE); + DrawText("Press 'r' to reset speed.", 10, screenHeight - 44, 20, RAYWHITE); + DrawText("Press 'h' to hide these controls.", 10, screenHeight - 22, 20, RAYWHITE); + } + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadShader(shader); // Unload shader + UnloadRenderTexture(target); // Unload render texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shaders/shaders_julia_set.png b/examples/shaders/shaders_julia_set.png new file mode 100644 index 00000000..5117ed0d Binary files /dev/null and b/examples/shaders/shaders_julia_set.png differ diff --git a/projects/4coder/Makefile b/projects/4coder/Makefile index 3cffaaba..55c8a462 100644 --- a/projects/4coder/Makefile +++ b/projects/4coder/Makefile @@ -235,7 +235,7 @@ endif ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # Libraries for Windows desktop compilation - LDLIBS = -lraylib -lopengl32 -lgdi32 + LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm # Required for physac examples #LDLIBS += -static -lpthread diff --git a/projects/CodeBlocks/core_basic_window.cbp b/projects/CodeBlocks/core_basic_window.cbp index 10390e25..0000860f 100644 --- a/projects/CodeBlocks/core_basic_window.cbp +++ b/projects/CodeBlocks/core_basic_window.cbp @@ -31,7 +31,7 @@ - + diff --git a/projects/Geany/raylib_compile_execute.bat b/projects/Geany/raylib_compile_execute.bat index a62a1aca..eeba0b05 100644 --- a/projects/Geany/raylib_compile_execute.bat +++ b/projects/Geany/raylib_compile_execute.bat @@ -13,7 +13,7 @@ cmd /c if exist %NAME_PART%.exe del /F %NAME_PART%.exe :: . :: > Compiling program :: -------------------------- -gcc -o %NAME_PART%.exe %FILE_NAME% %RAYLIB_DIR%\raylib.rc.data -s -O2 -I../../src -Iexternal -lraylib -lopengl32 -lgdi32 -std=c99 -Wall -mwindows +gcc -o %NAME_PART%.exe %FILE_NAME% %RAYLIB_DIR%\raylib.rc.data -s -O2 -I../../src -Iexternal -lraylib -lopengl32 -lgdi32 -lwinmm -std=c99 -Wall -mwindows :: . :: . > Executing program :: ------------------------- diff --git a/projects/Notepad++/npes_saved_tcc.txt b/projects/Notepad++/npes_saved_tcc.txt index 419e4af6..82f88aaf 100644 Binary files a/projects/Notepad++/npes_saved_tcc.txt and b/projects/Notepad++/npes_saved_tcc.txt differ diff --git a/projects/VS2015/examples/core_basic_window.vcxproj b/projects/VS2015/examples/core_basic_window.vcxproj index dd964a97..ee01c79d 100644 --- a/projects/VS2015/examples/core_basic_window.vcxproj +++ b/projects/VS2015/examples/core_basic_window.vcxproj @@ -5,10 +5,6 @@ Debug.DLL Win32 - - Debug.UWP - Win32 - Debug Win32 @@ -26,7 +22,7 @@ {0981CA98-E4A5-4DF1-987F-A41D09131EFC} Win32Proj core_basic_window - 10.0.16299.0 + 10.0.17763.0 core_basic_window @@ -56,9 +52,6 @@ true Unicode - - v140 - @@ -105,13 +98,13 @@ Disabled WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) CompileAsC - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) Console true %(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winmm.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -122,13 +115,13 @@ Disabled WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) CompileAsC - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) Console true %(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winmm.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -140,7 +133,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) CompileAsC true @@ -149,7 +142,7 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;gdi32.lib;winmm.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) @@ -162,7 +155,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) CompileAsC true @@ -171,12 +164,7 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - %(AdditionalLibraryDirectories) - - - - + kernel32.lib;user32.lib;gdi32.lib;winmm.lib;opengl32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) diff --git a/projects/VS2015/examples/core_basic_window_cpp.vcxproj b/projects/VS2015/examples/core_basic_window_cpp.vcxproj index 2ec74bc4..89504224 100644 --- a/projects/VS2015/examples/core_basic_window_cpp.vcxproj +++ b/projects/VS2015/examples/core_basic_window_cpp.vcxproj @@ -5,10 +5,6 @@ Debug.DLL Win32 - - Debug.UWP - Win32 - Debug Win32 @@ -26,7 +22,7 @@ {B655E850-3322-42F7-941D-6AC18FD66CA1} Win32Proj raylib_example_cpp - 10.0.16299.0 + 10.0.17763.0 core_basic_window_cpp @@ -56,9 +52,6 @@ true Unicode - - v140 - @@ -104,13 +97,13 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) CompileAsCpp Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) @@ -121,13 +114,13 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) CompileAsCpp Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) @@ -141,7 +134,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) CompileAsCpp - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) Console @@ -149,7 +142,7 @@ true true $(SolutionDir)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) @@ -162,7 +155,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) CompileAsCpp - $(SolutionDir)..\..\release\include;%(AdditionalIncludeDirectories) + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) Console @@ -170,7 +163,7 @@ true true $(SolutionDir)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) diff --git a/projects/VS2015/raylib.sln b/projects/VS2015/raylib.sln index f8ddf5cd..b0742574 100644 --- a/projects/VS2015/raylib.sln +++ b/projects/VS2015/raylib.sln @@ -35,15 +35,13 @@ Global {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x64.ActiveCfg = Release|Win32 {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.ActiveCfg = Release|Win32 {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.Build.0 = Release|Win32 - {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.ActiveCfg = Debug.UWP|Win32 - {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.Build.0 = Debug.UWP|Win32 + {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.ActiveCfg = Debug.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x64.ActiveCfg = Debug|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.ActiveCfg = Debug|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.Build.0 = Debug|Win32 - {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.ActiveCfg = Debug.UWP|Win32 - {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.Build.0 = Debug.UWP|Win32 + {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.ActiveCfg = Release.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.Build.0 = Release.DLL|Win32 {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x64.ActiveCfg = Release|Win32 diff --git a/projects/VS2015/raylib/raylib.vcxproj b/projects/VS2015/raylib/raylib.vcxproj index 6722ed07..0b3527cb 100644 --- a/projects/VS2015/raylib/raylib.vcxproj +++ b/projects/VS2015/raylib/raylib.vcxproj @@ -5,10 +5,6 @@ Debug.DLL Win32 - - Debug.UWP - Win32 - Debug Win32 @@ -17,10 +13,6 @@ Release.DLL Win32 - - Release.UWP - Win32 - Release Win32 @@ -30,7 +22,7 @@ {E89D61AC-55DE-4482-AFD4-DF7242EBC859} Win32Proj raylib - 10.0.16299.0 + 10.0.17763.0 @@ -39,12 +31,6 @@ v140 Unicode - - StaticLibrary - true - v140 - Unicode - DynamicLibrary true @@ -58,13 +44,6 @@ true Unicode - - StaticLibrary - false - v140 - true - Unicode - DynamicLibrary false @@ -80,18 +59,12 @@ - - - - - - @@ -99,9 +72,6 @@ $(SolutionDir)$(ProjectName)\$(Configuration)\ - - $(SolutionDir)$(ProjectName)\$(Configuration)\ - $(SolutionDir)$(ProjectName)\$(Configuration)\ @@ -109,10 +79,6 @@ $(SolutionDir)$(ProjectName)\$(Configuration)\ $(SolutionDir)$(ProjectName)\$(Configuration)\temp - - $(SolutionDir)$(ProjectName)\$(Configuration)\ - $(SolutionDir)$(ProjectName)\$(Configuration)\temp - $(SolutionDir)$(ProjectName)\$(Configuration)\ $(SolutionDir)$(ProjectName)\$(Configuration)\temp @@ -135,24 +101,6 @@ %(AdditionalLibraryDirectories) - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_ES2;PLATFORM_UWP - CompileAsC - $(SolutionDir)..\..\release\include;$(SolutionDir)..\..\src\external\ANGLE - MultiThreadedDebug - - - Windows - - - %(AdditionalLibraryDirectories) - - @@ -190,25 +138,6 @@ true - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_ES2;PLATFORM_UWP - $(SolutionDir)..\..\src\external\ANGLE;$(SolutionDir)..\..\release\include - CompileAsC - MultiThreaded - - - Windows - true - true - - Level3 diff --git a/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj b/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj index 421d7209..fe97faac 100644 --- a/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj +++ b/projects/VS2017.UWP/raylib.App.UWP/raylib.App.UWP.vcxproj @@ -76,8 +76,8 @@ - mincore.lib;%(AdditionalDependencies) - C:\Users\Sam\Documents\GitHub\raylib\project\vs2015.UWP\x64\Debug;C:\Users\Alumno\Downloads\angle\UWP_OpenGLES2\raylib;%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64 + mincore.lib;winmm.lib;%(AdditionalDependencies) + $(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64;%(AdditionalLibraryDirectories) diff --git a/projects/VS2017/examples/core_basic_window.vcxproj b/projects/VS2017/examples/core_basic_window.vcxproj index 87bef8d8..0348589f 100644 --- a/projects/VS2017/examples/core_basic_window.vcxproj +++ b/projects/VS2017/examples/core_basic_window.vcxproj @@ -104,7 +104,7 @@ Console true %(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) @@ -121,7 +121,7 @@ Console true %(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) @@ -142,7 +142,7 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) %(AdditionalLibraryDirectories) @@ -164,7 +164,7 @@ true true true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) %(AdditionalLibraryDirectories) diff --git a/projects/VS2017/examples/core_basic_window_cpp.vcxproj b/projects/VS2017/examples/core_basic_window_cpp.vcxproj index cfe08524..6ade272d 100644 --- a/projects/VS2017/examples/core_basic_window_cpp.vcxproj +++ b/projects/VS2017/examples/core_basic_window_cpp.vcxproj @@ -103,7 +103,7 @@ Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) @@ -120,7 +120,7 @@ Console true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) @@ -142,7 +142,7 @@ true true $(SolutionDir)..\..\release\libs\win32\msvc;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) @@ -163,7 +163,7 @@ true true %(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + 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) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8ccdc932..b6006c8b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,7 +46,7 @@ endif() add_definitions("-DRAYLIB_CMAKE=1") if(USE_AUDIO) - MESSAGE(STATUS "Audio Backend: mini_al") + MESSAGE(STATUS "Audio Backend: miniaudio") set(sources ${raylib_sources}) else() MESSAGE(STATUS "Audio Backend: None (-DUSE_AUDIO=OFF)") diff --git a/src/physac.h b/src/physac.h index 038361a4..374aa4bc 100644 --- a/src/physac.h +++ b/src/physac.h @@ -43,7 +43,7 @@ * NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) * * Use the following code to compile: -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static -lraylib -lpthread -lopengl32 -lgdi32 -std=c99 +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static -lraylib -lpthread -lopengl32 -lgdi32 -lwinmm -std=c99 * * VERY THANKS TO: * Ramon Santamaria (github: @raysan5) diff --git a/src/text.c b/src/text.c index 1050d12d..db4e8f75 100644 --- a/src/text.c +++ b/src/text.c @@ -899,7 +899,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f int state = wordWrap? MEASURE_STATE : DRAW_STATE; int startLine = -1; // Index where to begin drawing (where a line begins) int endLine = -1; // Index where to stop drawing (where a line ends) - + int lastk = -1; // Holds last value of the character position for (int i = 0, k = 0; i < length; i++, k++) { int glyphWidth = 0; @@ -954,6 +954,11 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f textOffsetX = 0; i = startLine; glyphWidth = 0; + + // Save character position when we switch states + int tmp = lastk; + lastk = k - 1; + k = tmp; } } @@ -981,7 +986,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f bool isGlyphSelected = false; if ((selectStart >= 0) && (k >= selectStart) && (k < (selectStart + selectLength))) { - Rectangle strec = {rec.x + textOffsetX-1, rec.y + textOffsetY, glyphWidth, (font.baseSize + font.baseSize/4)*scaleFactor }; + Rectangle strec = {rec.x + textOffsetX-1, rec.y + textOffsetY, glyphWidth, font.baseSize*scaleFactor }; DrawRectangleRec(strec, selectBack); isGlyphSelected = true; } @@ -1005,6 +1010,7 @@ void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, f startLine = endLine; endLine = -1; glyphWidth = 0; + k = lastk; state = !state; } } diff --git a/templates/advance_game/Makefile b/templates/advance_game/Makefile index e475f72c..3f3c65fb 100644 --- a/templates/advance_game/Makefile +++ b/templates/advance_game/Makefile @@ -224,7 +224,7 @@ endif ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # Libraries for Windows desktop compilation - LDLIBS = -lraylib -lopengl32 -lgdi32 + LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm # Required for physac examples #LDLIBS += -static -lpthread diff --git a/templates/simple_game/Makefile b/templates/simple_game/Makefile index 9f27a429..3fc78b9c 100644 --- a/templates/simple_game/Makefile +++ b/templates/simple_game/Makefile @@ -224,7 +224,7 @@ endif ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # Libraries for Windows desktop compilation - LDLIBS = -lraylib -lopengl32 -lgdi32 + LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm # Required for physac examples #LDLIBS += -static -lpthread diff --git a/templates/standard_game/Makefile b/templates/standard_game/Makefile index 4333c8b8..51d2b2dc 100644 --- a/templates/standard_game/Makefile +++ b/templates/standard_game/Makefile @@ -224,7 +224,7 @@ endif ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) # Libraries for Windows desktop compilation - LDLIBS = -lraylib -lopengl32 -lgdi32 + LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm # Required for physac examples #LDLIBS += -static -lpthread