From cc5739a6d7f6514e9c60173b14c0a38c4a928955 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 13 Apr 2025 20:55:38 +0200 Subject: [PATCH] REVIEWED: Some PRs formating --- examples/audio/audio_sound_positioning.c | 94 ++++++++++-------- examples/audio/audio_sound_positioning.png | Bin 12217 -> 26205 bytes .../resources/shaders/glsl100/depth.fs | 8 +- .../resources/shaders/glsl330/depth.fs | 11 +- examples/shaders/shaders_view_depth.c | 14 +-- examples/shaders/shaders_view_depth.png | Bin 11335 -> 30653 bytes examples/shaders/shaders_write_depth.c | 2 - .../examples/shaders_view_depth.vcxproj | 2 +- projects/VS2022/raylib.sln | 50 +++++++++- src/platforms/rcore_desktop_sdl.c | 5 +- src/rcore.c | 4 +- 11 files changed, 111 insertions(+), 79 deletions(-) diff --git a/examples/audio/audio_sound_positioning.c b/examples/audio/audio_sound_positioning.c index 4c78b66e3..45f211ec4 100644 --- a/examples/audio/audio_sound_positioning.c +++ b/examples/audio/audio_sound_positioning.c @@ -15,40 +15,12 @@ * ********************************************************************************************/ -#include -#include +#include "raylib.h" + +#include "raymath.h" -//------------------------------------------------------------------------------------ // Sound positioning function -//------------------------------------------------------------------------------------ -static void SetSoundPosition(Camera listener, Sound sound, Vector3 position, float maxDist) -{ - // Calculate direction vector and distance between listener and sound source - Vector3 direction = Vector3Subtract(position, listener.position); - float distance = Vector3Length(direction); - - // Apply logarithmic distance attenuation and clamp between 0-1 - float attenuation = 1.0f / (1.0f + (distance / maxDist)); - attenuation = Clamp(attenuation, 0.0f, 1.0f); - - // Calculate normalized vectors for spatial positioning - Vector3 normalizedDirection = Vector3Normalize(direction); - Vector3 forward = Vector3Normalize(Vector3Subtract(listener.target, listener.position)); - Vector3 right = Vector3Normalize(Vector3CrossProduct(forward, listener.up)); - - // Reduce volume for sounds behind the listener - float dotProduct = Vector3DotProduct(forward, normalizedDirection); - if (dotProduct < 0.0f) { - attenuation *= (1.0f + dotProduct * 0.5f); - } - - // Set stereo panning based on sound position relative to listener - float pan = 0.5f + 0.5f * Vector3DotProduct(normalizedDirection, right); - - // Apply final sound properties - SetSoundVolume(sound, attenuation); - SetSoundPan(sound, pan); -} +static void SetSoundPosition(Camera listener, Sound sound, Vector3 position, float maxDist); //------------------------------------------------------------------------------------ // Program main entry point @@ -57,12 +29,13 @@ int main(void) { // Initialization //-------------------------------------------------------------------------------------- - InitWindow(800, 600, "Quick Spatial Sound"); + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [audio] example - Playing spatialized 3D sound"); + InitAudioDevice(); - SetTargetFPS(60); - DisableCursor(); - Sound sound = LoadSound("resources/coin.wav"); Camera camera = { @@ -70,7 +43,12 @@ int main(void) .target = (Vector3) { 0, 0, 0 }, .up = (Vector3) { 0, 1, 0 }, .fovy = 60, + .projection = CAMERA_PERSPECTIVE }; + + DisableCursor(); + + SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop @@ -83,9 +61,9 @@ int main(void) float th = GetTime(); Vector3 spherePos = { - .x = 5.0f * cosf(th), + .x = 5.0f*cosf(th), .y = 0.0f, - .z = 5.0f * sinf(th) + .z = 5.0f*sinf(th) }; SetSoundPosition(camera, sound, spherePos, 20.0f); @@ -95,14 +73,14 @@ int main(void) // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - { - ClearBackground(BLACK); + + ClearBackground(RAYWHITE); BeginMode3D(camera); DrawGrid(10, 2); DrawSphere(spherePos, 0.5f, RED); EndMode3D(); - } + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -110,6 +88,36 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadSound(sound); - CloseAudioDevice(); - CloseWindow(); + CloseAudioDevice(); // Close audio device + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- } + +// Sound positioning function +static void SetSoundPosition(Camera listener, Sound sound, Vector3 position, float maxDist) +{ + // Calculate direction vector and distance between listener and sound source + Vector3 direction = Vector3Subtract(position, listener.position); + float distance = Vector3Length(direction); + + // Apply logarithmic distance attenuation and clamp between 0-1 + float attenuation = 1.0f/(1.0f + (distance/maxDist)); + attenuation = Clamp(attenuation, 0.0f, 1.0f); + + // Calculate normalized vectors for spatial positioning + Vector3 normalizedDirection = Vector3Normalize(direction); + Vector3 forward = Vector3Normalize(Vector3Subtract(listener.target, listener.position)); + Vector3 right = Vector3Normalize(Vector3CrossProduct(forward, listener.up)); + + // Reduce volume for sounds behind the listener + float dotProduct = Vector3DotProduct(forward, normalizedDirection); + if (dotProduct < 0.0f) attenuation *= (1.0f + dotProduct*0.5f); + + // Set stereo panning based on sound position relative to listener + float pan = 0.5f + 0.5f*Vector3DotProduct(normalizedDirection, right); + + // Apply final sound properties + SetSoundVolume(sound, attenuation); + SetSoundPan(sound, pan); +} \ No newline at end of file diff --git a/examples/audio/audio_sound_positioning.png b/examples/audio/audio_sound_positioning.png index 3e7a8ffdd0362afc0840717bc176d30d6f1daa0a..6feaf7e4ce62bf764021dc199659ebb3bbf89f0a 100644 GIT binary patch literal 26205 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 F2>|2Ff8GE9 diff --git a/examples/shaders/resources/shaders/glsl100/depth.fs b/examples/shaders/resources/shaders/glsl100/depth.fs index 0ea7c46e7..b330bd9c6 100644 --- a/examples/shaders/resources/shaders/glsl100/depth.fs +++ b/examples/shaders/resources/shaders/glsl100/depth.fs @@ -10,12 +10,6 @@ uniform bool flipY; float nearPlane = 0.1; float farPlane = 100.0; -// Function to linearize depth from non-linear depth buffer -float linearizeDepth(float depth) -{ - return (2.0 * nearPlane) / (farPlane + nearPlane - depth * (farPlane - nearPlane)); -} - void main() { // Handle potential Y-flipping @@ -27,7 +21,7 @@ void main() float depth = texture2D(depthTexture, texCoord).r; // Linearize depth - float linearDepth = linearizeDepth(depth); + float linearDepth = (2.0*nearPlane)/(farPlane + nearPlane - depth*(farPlane - nearPlane)); // Output final color gl_FragColor = vec4(vec3(linearDepth), 1.0); diff --git a/examples/shaders/resources/shaders/glsl330/depth.fs b/examples/shaders/resources/shaders/glsl330/depth.fs index cbcb6da67..65592c83f 100644 --- a/examples/shaders/resources/shaders/glsl330/depth.fs +++ b/examples/shaders/resources/shaders/glsl330/depth.fs @@ -13,24 +13,17 @@ const float farPlane = 100.0; // Output fragment color out vec4 finalColor; -// Linearizes the depth buffer value -float linearizeDepth(float depth) -{ - return (2.0 * nearPlane) / (farPlane + nearPlane - depth * (farPlane - nearPlane)); -} - void main() { // Handle potential Y-flipping vec2 texCoord = fragTexCoord; - if (flipY) - texCoord.y = 1.0 - texCoord.y; + if (flipY) texCoord.y = 1.0 - texCoord.y; // Sample depth float depth = texture(depthTexture, texCoord).r; // Linearize depth value - float linearDepth = linearizeDepth(depth); + float linearDepth = (2.0*nearPlane)/(farPlane + nearPlane - depth*(farPlane - nearPlane)); // Output final color finalColor = vec4(vec3(linearDepth), 1.0); diff --git a/examples/shaders/shaders_view_depth.c b/examples/shaders/shaders_view_depth.c index 5da0c1ca4..4f141acb9 100644 --- a/examples/shaders/shaders_view_depth.c +++ b/examples/shaders/shaders_view_depth.c @@ -34,11 +34,11 @@ int main(void) // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; - const int screenHeight = 600; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shader] example - render depth texture"); - // Load camera + // Init camera Camera camera = { 0 }; camera.position = (Vector3){ 4.0f, 1.0f, 5.0f }; camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; @@ -56,7 +56,7 @@ int main(void) SetShaderValue(depthShader, flipTextureLoc, (int[]){ 1 }, SHADER_UNIFORM_INT); // Flip Y texture // Load models - Model cube = LoadModelFromMesh(GenMeshCube(1.0f, 1.0f, 1.0f)); + Model cube = LoadModelFromMesh(GenMeshCube(1.0f, 1.0f, 1.0f)); Model floor = LoadModelFromMesh(GenMeshPlane(20.0f, 20.0f, 1, 1)); DisableCursor(); // Limit cursor to relative movement inside the window @@ -75,25 +75,19 @@ int main(void) // Draw //---------------------------------------------------------------------------------- BeginTextureMode(target); - ClearBackground(WHITE); - + BeginMode3D(camera); - DrawModel(cube, (Vector3){ 0.0f, 0.0f, 0.0f }, 3.0f, YELLOW); DrawModel(floor, (Vector3){ 10.0f, 0.0f, 2.0f }, 2.0f, RED); - EndMode3D(); - EndTextureMode(); BeginDrawing(); BeginShaderMode(depthShader); - SetShaderValueTexture(depthShader, depthLoc, target.depth); DrawTexture(target.depth, 0, 0, WHITE); - EndShaderMode(); DrawRectangle( 10, 10, 320, 93, Fade(SKYBLUE, 0.5f)); diff --git a/examples/shaders/shaders_view_depth.png b/examples/shaders/shaders_view_depth.png index b68de9644cab86bc0ff3422f147bdee0a59a2494..ae4c8450223497fb977d33ccb038789ac4f840e0 100644 GIT binary patch literal 30653 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

uP@zKimId|c7#HR(#6nW@9GUb8?6 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 b1H&!%-0pii#yc4p7#KWV{an^LB{Ts56y0O# literal 11335 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 Wvux(SwEYYW3=E#GelF{r5}E+rzr5f8 diff --git a/examples/shaders/shaders_write_depth.c b/examples/shaders/shaders_write_depth.c index d47ea1ae3..2d24dcaed 100644 --- a/examples/shaders/shaders_write_depth.c +++ b/examples/shaders/shaders_write_depth.c @@ -74,7 +74,6 @@ int main(void) // Draw //---------------------------------------------------------------------------------- - // Draw into our custom render texture (framebuffer) BeginTextureMode(target); ClearBackground(WHITE); @@ -93,7 +92,6 @@ int main(void) // Draw into screen our custom render texture BeginDrawing(); ClearBackground(RAYWHITE); - DrawTextureRec(target.texture, (Rectangle) { 0, 0, (float)screenWidth, (float)-screenHeight }, (Vector2) { 0, 0 }, WHITE); DrawFPS(10, 10); EndDrawing(); diff --git a/projects/VS2022/examples/shaders_view_depth.vcxproj b/projects/VS2022/examples/shaders_view_depth.vcxproj index 5f6250256..c176cbf33 100644 --- a/projects/VS2022/examples/shaders_view_depth.vcxproj +++ b/projects/VS2022/examples/shaders_view_depth.vcxproj @@ -51,7 +51,7 @@ - {70B35F59-AFC2-4D8F-8833-5314D2047A81} + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7} Win32Proj shaders_view_depth 10.0 diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index 8c0c7f747..4f8c3beea 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -271,7 +271,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "models_loading_m3d", "examp EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shaders_write_depth", "examples\shaders_write_depth.vcxproj", "{70B35F59-AFC2-4D8F-8833-5314D2047A81}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shaders_view_depth", "examples\shaders_view_depth.vcxproj", "{70B35F59-AFC2-4D8F-8833-5314D2047A81}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shaders_view_depth", "examples\shaders_view_depth.vcxproj", "{DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shaders_hybrid_render", "examples\shaders_hybrid_render.vcxproj", "{3755E9F4-CB48-4EC3-B561-3B85964EBDEF}" EndProject @@ -761,6 +761,30 @@ Global {0199E349-0701-40BC-8A7F-06A54FFA3E7C}.Release|x64.Build.0 = Release|x64 {0199E349-0701-40BC-8A7F-06A54FFA3E7C}.Release|x86.ActiveCfg = Release|Win32 {0199E349-0701-40BC-8A7F-06A54FFA3E7C}.Release|x86.Build.0 = Release|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|ARM64.Build.0 = Debug|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|x64.ActiveCfg = Debug|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|x64.Build.0 = Debug|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|x86.ActiveCfg = Debug|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Debug|x86.Build.0 = Debug|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|ARM64.ActiveCfg = Release.DLL|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|ARM64.Build.0 = Release.DLL|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|ARM64.ActiveCfg = Release|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|ARM64.Build.0 = Release|ARM64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|x64.ActiveCfg = Release|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|x64.Build.0 = Release|x64 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|x86.ActiveCfg = Release|Win32 + {BCB71111-8505-4B35-8CEF-EC6115DC9D4D}.Release|x86.Build.0 = Release|Win32 {8F19E3DA-8929-4000-87B5-3CA6929636CC}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 {8F19E3DA-8929-4000-87B5-3CA6929636CC}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 {8F19E3DA-8929-4000-87B5-3CA6929636CC}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 @@ -3293,6 +3317,30 @@ Global {70B35F59-AFC2-4D8F-8833-5314D2047A81}.Release|x64.Build.0 = Release|x64 {70B35F59-AFC2-4D8F-8833-5314D2047A81}.Release|x86.ActiveCfg = Release|Win32 {70B35F59-AFC2-4D8F-8833-5314D2047A81}.Release|x86.Build.0 = Release|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|ARM64.Build.0 = Debug|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|x64.ActiveCfg = Debug|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|x64.Build.0 = Debug|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|x86.ActiveCfg = Debug|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Debug|x86.Build.0 = Debug|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|ARM64.ActiveCfg = Release.DLL|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|ARM64.Build.0 = Release.DLL|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|ARM64.ActiveCfg = Release|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|ARM64.Build.0 = Release|ARM64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|x64.ActiveCfg = Release|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|x64.Build.0 = Release|x64 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|x86.ActiveCfg = Release|Win32 + {DFDE29A7-4F54-455D-B20B-D2BF79D3B3F7}.Release|x86.Build.0 = Release|Win32 {3755E9F4-CB48-4EC3-B561-3B85964EBDEF}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 {3755E9F4-CB48-4EC3-B561-3B85964EBDEF}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 {3755E9F4-CB48-4EC3-B561-3B85964EBDEF}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c index 517e43914..70d529202 100644 --- a/src/platforms/rcore_desktop_sdl.c +++ b/src/platforms/rcore_desktop_sdl.c @@ -1363,10 +1363,7 @@ void PollInputEvents(void) for (int i = 0; i < MAX_TOUCH_POINTS; i++) CORE.Input.Touch.previousTouchState[i] = CORE.Input.Touch.currentTouchState[i]; // Map touch position to mouse position for convenience - if (CORE.Input.Touch.pointCount == 0) - { - CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition; - } + if (CORE.Input.Touch.pointCount == 0) CORE.Input.Touch.position[0] = CORE.Input.Mouse.currentPosition; int touchAction = -1; // 0-TOUCH_ACTION_UP, 1-TOUCH_ACTION_DOWN, 2-TOUCH_ACTION_MOVE bool realTouch = false; // Flag to differentiate real touch gestures from mouse ones diff --git a/src/rcore.c b/src/rcore.c index ea971b52f..ec6c94e94 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -1879,8 +1879,8 @@ void TakeScreenshot(const char *fileName) // Security check to (partially) avoid malicious code if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; } - // apply a scale if we are doing HIGHDPI auto-scaling - Vector2 scale = { 1,1 }; + // Apply a scale if we are doing HIGHDPI auto-scaling + Vector2 scale = { 1.0f, 1.0f }; if (IsWindowState(FLAG_WINDOW_HIGHDPI)) scale = GetWindowScaleDPI(); unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));