From 2c32a261c133f325a48a3aa51b23bcd6dea61e98 Mon Sep 17 00:00:00 2001 From: Asuro Date: Tue, 18 Feb 2025 00:03:09 +0100 Subject: [PATCH] unsuccessful experimentation --- src/engine/Shared.h | 58 ++++++++++++++++++++++- src/engine/Window.cpp | 3 ++ src/engine/Window.h | 14 +++--- src/engine/main.cpp | 1 + src/game/Instance.h | 3 +- src/game/Level.cpp | 10 +--- src/game/Setup.cpp | 19 ++++++-- src/game/compiled-shaders/dx11/frag.bin | Bin 5370 -> 12522 bytes src/game/compiled-shaders/glsl/frag.bin | Bin 13100 -> 13175 bytes src/game/compiled-shaders/spirv/frag.bin | Bin 4362 -> 7810 bytes src/game/rendering/Rendering.cpp | 10 ++-- src/game/shaders/frag.sc | 27 +++++++---- 12 files changed, 111 insertions(+), 34 deletions(-) diff --git a/src/engine/Shared.h b/src/engine/Shared.h index bc2f9b9..9669249 100644 --- a/src/engine/Shared.h +++ b/src/engine/Shared.h @@ -1,6 +1,60 @@ #pragma once +#include "bx/timer.h" #include +#define START_PERF() int64_t __perfStart = bx::getHPCounter(); +#define END_PERF(counters, idx, frame) counters[(int32_t)idx].Write(bx::getHPCounter() - __perfStart, frame); + +enum class PerfCounterType +{ + WindowEvents, + GameDelta, + COUNT +}; + +struct PerfCounter +{ + static constexpr int32_t TimeWindow = 128; + int64_t Times[TimeWindow]{0}; + void Write(int64_t value, uint64_t frameCounter) + { + Times[frameCounter % TimeWindow] = value; + } + float GetAverage() + { + int64_t sum = 0; + for (int32_t i = 0; i < TimeWindow; ++i) + { + sum += Times[i]; + } + return (double)sum / bx::getHPFrequency(); + } + float GetMin() + { + int64_t min = INT64_MAX; + for (int32_t i = 0; i < TimeWindow; ++i) + { + if (Times[i] < min) + { + min = Times[i]; + } + } + return (double)min / bx::getHPFrequency(); + } + float GetMax() + { + int64_t max = 0; + for (int32_t i = 0; i < TimeWindow; ++i) + { + if (Times[i] > max) + { + max = Times[i]; + } + } + return (double)max / bx::getHPFrequency(); + } +}; + struct SharedWindowData { void* Handle = nullptr; @@ -12,6 +66,8 @@ struct SharedWindowData bool LastHeldMouseButtons[8]{false}; float MouseDeltaX = 0.0f; float MouseDeltaY = 0.0f; + uint64_t FrameCounter = 0; + PerfCounter PerfCounters[(int32_t)PerfCounterType::COUNT] = {0}; }; struct FileChangeNotification @@ -39,9 +95,9 @@ struct GameData struct SharedData { + GameData Game; SharedDevData Dev; SharedWindowData Window; - GameData Game; }; typedef void (*Startup)(SharedData& shared); diff --git a/src/engine/Window.cpp b/src/engine/Window.cpp index 3f5933c..623b4e1 100644 --- a/src/engine/Window.cpp +++ b/src/engine/Window.cpp @@ -1,6 +1,7 @@ #include "SDL3/SDL_events.h" #include "Shared.h" #include "Window.h" +#include "bx/timer.h" #include #include @@ -30,6 +31,7 @@ void EngineWindow::Startup(SharedWindowData& shared) void EngineWindow::Update(SharedWindowData& shared) { + START_PERF(); SDL_Event evt; while (SDL_PollEvent(&evt)) { @@ -75,6 +77,7 @@ void EngineWindow::Update(SharedWindowData& shared) break; } } + END_PERF(shared.PerfCounters, PerfCounterType::WindowEvents, shared.FrameCounter); } void EngineWindow::Shutdown() diff --git a/src/engine/Window.h b/src/engine/Window.h index 3051b0d..7924316 100644 --- a/src/engine/Window.h +++ b/src/engine/Window.h @@ -4,12 +4,12 @@ class EngineWindow { -public: - SDL_Window* Window; - bool CloseRequested = false; + public: + SDL_Window* Window; + bool CloseRequested = false; -public: - void Startup(SharedWindowData& Shared); - void Update(SharedWindowData& Shared); - void Shutdown(); + public: + void Startup(SharedWindowData& Shared); + void Update(SharedWindowData& Shared); + void Shutdown(); }; diff --git a/src/engine/main.cpp b/src/engine/main.cpp index f0da9df..0134572 100644 --- a/src/engine/main.cpp +++ b/src/engine/main.cpp @@ -318,6 +318,7 @@ int main() } UpdateFunc(); + ++Shared.Window.FrameCounter; } ShutdownFunc(); diff --git a/src/game/Instance.h b/src/game/Instance.h index 9a90389..72762fa 100644 --- a/src/game/Instance.h +++ b/src/game/Instance.h @@ -15,7 +15,8 @@ namespace Game { double Now = 0.0; double Delta = 0.0; - uint32_t FrameCounter = 0; + int64_t NowHP = 0; + int64_t DeltaHP = 1000; int64_t StartTime = 0; }; diff --git a/src/game/Level.cpp b/src/game/Level.cpp index 5e7ee8a..7209615 100644 --- a/src/game/Level.cpp +++ b/src/game/Level.cpp @@ -68,12 +68,6 @@ namespace Game void Level::Update() { PlayerData& player = GetInstance().Player; - if (GetKeyPressedNow(ScanCode::R)) - { - Cubes.Count = 0; - Tests.Count = 0; - Setup(GetShared().Game); - } float delta = GetInstance().Time.Delta; constexpr float moveSpeed = 10.0f; @@ -126,8 +120,8 @@ namespace Game EData.Transform.Position = {0.0f, -1.0f, 0.0f}; EData.Transform.Scale = {100.0f, 1.0f, 100.0f}; EData.TestColor[0] = 0.3f; - EData.TestColor[1] = 0.4f; - EData.TestColor[2] = 0.8f; + EData.TestColor[1] = 0.325f; + EData.TestColor[2] = 0.3f; } } diff --git a/src/game/Setup.cpp b/src/game/Setup.cpp index b943118..ae12fc9 100644 --- a/src/game/Setup.cpp +++ b/src/game/Setup.cpp @@ -1,4 +1,5 @@ #include "Global.h" +#include "Input.h" #include "Instance.h" #include "Log.h" #include "Setup.h" @@ -53,11 +54,21 @@ namespace Game void Update() { - ++GetInstance().Time.FrameCounter; - double newNow = (bx::getHPCounter() - GetInstance().Time.StartTime) / (double)(bx::getHPFrequency()); - GetInstance().Time.Delta = newNow - GetInstance().Time.Now; - GetInstance().Time.Now = newNow; + auto& inst = GetInstance(); + int64_t newNowHP = bx::getHPCounter() - GetInstance().Time.StartTime; + inst.Time.DeltaHP = newNowHP - inst.Time.NowHP; + inst.Time.NowHP = newNowHP; + inst.Time.Now = (double)inst.Time.NowHP / bx::getHPFrequency(); + inst.Time.Delta = (double)inst.Time.DeltaHP / bx::getHPFrequency(); + GetShared().Window.PerfCounters[(int32_t)PerfCounterType::GameDelta].Write(inst.Time.DeltaHP, + GetShared().Window.FrameCounter); + if (GetKeyPressedNow(ScanCode::R)) + { + GetInstance().Size = 0; + Shutdown(); + Setup(GetShared()); + } SetupInstance.Rendering.Update(); auto& win = GetShared().Window; diff --git a/src/game/compiled-shaders/dx11/frag.bin b/src/game/compiled-shaders/dx11/frag.bin index 9f39df50c675510b6f5b868755a3a95ab6b547a9..df77b99c9c530962bec3b64238f2cb797ecd226d 100644 GIT binary patch literal 12522 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 diff --git a/src/game/compiled-shaders/glsl/frag.bin b/src/game/compiled-shaders/glsl/frag.bin index 8a6636891d8a57aa51bcfd45ac69819775a698d4..9230797c8c1dd087fb261fa017331408d78be37f 100644 GIT binary patch delta 197 zcmZ3J_C1Z?E!czGPyA0l0~n-iLSz4@MtB{*mp#kCOC>ZJ)Xj)HxuMsGj zmXn`YqL7@Em|KvVqF@VQX&CC6P7cr%<10!nDJ{x_2&SfNPSFhIn9OdJ#9_^qoS&0l uq&NA9p@X=BmO@Etg)>;7NE0TNKKZDjJ&Ig9TrLSD$A_#hNpmuru^Ir}CqOO$ delta 247 zcmeyKwkD0=E!czGPyA0l0~knd8-B^jwjlh+y9Pkv>XTCZTMkdj)QSW;S)Sdywyl3L-M zpOastsi37`pl4vHpbb^8prrtl14~(&T62}9CL1dh=jP{^WPmj(*eWCyWu|A88ger$Qd7W!3bqOca(adeS}2BSD;VfmDrhMrgWNGW&{z!s Dkq}V; diff --git a/src/game/compiled-shaders/spirv/frag.bin b/src/game/compiled-shaders/spirv/frag.bin index 77f42cf80937b273b353c8ae4ed51adae888bd20..30eb60682a7003dd92f9688b966d43e73699ee02 100644 GIT binary patch literal 7810 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 XlCxuA2G4DRUU5l^ zo{6aeNCh7QL?OsReg#U|?9q$iT3Uk%8e5BLjl~ z12b41JJ{vS46FV_;=q2D=-i zmX(1O?EbR&y!@iv#2kni3)nwp@ug*;z+h!y1N$v0J*^_%ttc_wC9x#YfPulCfd%Xb zMFs{2AqE6r31kSA4+Op*jJTutMAUO{t_bWs7!^A-D2Z;$l%>;!x$V`wp z$V?C)VI~XMKXMF^!~&8B#SMrLvIoQm#S@4RvPPJJ37l3G8JNK_4pJkK*n%)9oIWxzfa4LAH$dS8;)Bu!C>}uapP}*~Kf>%~Wn^HOHFGB19yUgZ zUqIrZaFAeNVGv_v0Q(bU4osgZD6knC;QlFPWMDXZ=8UZf0~13TBPc#t7%CVc?g6gRI)lYk5;Fq>$X_4~6HA7Qf#MG)mck4P2aq~OXdXyqW?(R5 zU&NGe-4B#>W#0TXU7ic*N;)DFQnh{c7g7_f6tcRAJ zQy4%cA_GGk69cHIW&o+U;w2@keWVd`r~I}U;vxJz`$@Gn*Rit z7#Kj}Fg3zRYA!(4h%hlQfW!kBSix~D%f!F{(gzX`gt|omDhBc^OiU3f1`2nWm=Y5M z14tjTI%TLBNL>H}J2+lcm>3v9W`fKB=>e&M`CFZdfdM2B!aNLYV1H{u{S7MXK<;aW zx=V+NfdQl*gkfTOObiU5bP3V}6Ek39U;v4O#G0Xc4Vf4iK>9&)u<$j4+5-z;kQ$g9 zOrUb|3=9k)bue?Rpl$%kgTfFLm)1-S44`xZk^{K`BxcLRzyJ~ll@lN{L1K1DW`g8l z;po7`zyOo$fV$V2iGcxBUV!94W`gps8xsQqNF0gX!6Wqz5FAu4f-q52*fu>DiB@2P6;E1Cu`pmDhvTYoN3Tax2X3 zhnW}{Kx#l~50-A9GBGfK;s!bYKSvUS>3zY(zyMMUl7s1e1yu(sCtzZ4ki=km-!d^U zfYgHIKyeQWlXpxE3?MT>a1760K+FsbAURl=urM<)fXoER!NP=%8B%|M!UQA_3lk1z1_qEE z$o;S|;eytOAURl=a6|Qj!UQA_3lmrwa~2wApfUy&ejxQQH(r2-7bva5#4a&0Fo497 z!%L8vfdQ1yki$zDNere}gqeW>q!uIx3okLKI#Afa#3Yc!V0tB)85lrnL2|J0l453H z0GSDrgN2t2)W4wc0?EU|OOBa=0VD@R(WJf#hM~Wx~wB0Fnc_9~NF_(C`Au!NSWN zsvi_yAbIrgx{DNEps)j}ho!yyP&riw1_qEiQ2FS{z{UV-@5V4e`lq1&0H~c0YIA|g zjaViI29Vq?23Bx;HI9ja0VD=$$2u~wg4?d~NP0o~K<&x|CI$wOxIY62xLuye#J~U& z17T1+fWi~hP7Y&W1@}Abm>C#A?LSbPFr0xE+y-)BW?%q`gW7B`b5fZY7(n76jBL(I zX!}2niGcy+Mv#3VwXimmD>DNFNDkCL2!N{fVrF0fiNi3c-UYQgGnp6|KysiqI7}>u z38EhqhA^>QCI$wOIH+w7igS?OJSGMPkbaOHEDcpLF))C{LGFc#RYS!<;Q$k>fr^2` m1=bF%Wny3e=?AF?$%Ep|j)586#|Fv$Wng5m0FO#2FaQAI!*+xK diff --git a/src/game/rendering/Rendering.cpp b/src/game/rendering/Rendering.cpp index 2e0ab6b..d2a6ade 100644 --- a/src/game/rendering/Rendering.cpp +++ b/src/game/rendering/Rendering.cpp @@ -290,10 +290,14 @@ namespace Game GetInstance().GameLevel.Cubes.Render(Models, Materials); GetInstance().GameLevel.Tests.Render(Models, Materials); - bgfx::dbgTextPrintf(1, 1, 0x0F, "Time: %.1f", GetInstance().Time.Now); - bgfx::dbgTextPrintf(1, 2, 0x0F, "Frame: %u", GetInstance().Time.FrameCounter); + bgfx::dbgTextPrintf(1, 1, 0x0F, "Time: %.1fs", GetInstance().Time.Now); + bgfx::dbgTextPrintf(1, + 2, + 0x0F, + "Window Events: %.3fms", + GetShared().Window.PerfCounters[(int32_t)PerfCounterType::WindowEvents].GetMax()); bgfx::dbgTextPrintf( - 1, 3, 0x0F, "Delta: %.3fms / %.0ffps", GetInstance().Time.Delta, 1.0 / GetInstance().Time.Delta); + 1, 3, 0x0F, "Delta: %.3fms", GetShared().Window.PerfCounters[(int32_t)PerfCounterType::GameDelta].GetMax()); bgfx::frame(); } diff --git a/src/game/shaders/frag.sc b/src/game/shaders/frag.sc index 341b596..b2a7c18 100644 --- a/src/game/shaders/frag.sc +++ b/src/game/shaders/frag.sc @@ -12,9 +12,11 @@ uniform vec4 u_testColor; float circle(vec2 uv, float radius) { float distSq = uv.x * uv.x + uv.y * uv.y; + // float result = sqrt(distSq) / radius * 0.8; float result = sqrt(distSq) / radius; - // return result < 0.5; - return clamp(1.0 - result, 0.0, 1.0); + // float clamped = clamp(1.0 - result, 0.0, 1.0); + float clamped = clamp(1.5 - result, 0.0, 1.0); + return clamped; } float calcBrightness(vec3 lightPos, vec3 vertPos, vec3 normal) @@ -65,8 +67,9 @@ void main() // float brightness = calcBrightness(lightPos, v_wpos, v_normal); float brightness = calcBrightnessDirectional(vec3(0.5, 0.3, 1.0), v_normal); // brightness = 1.0; - // brightness = 0.1 + brightness * 0.9; + // brightness = sin(u_time.x) * 0.5 + 0.5; + // Magic dot frequency calculation float baseScale = 2.0; float2 dx = ddx(v_uv0 * baseScale); float2 dy = ddy(v_uv0 * baseScale); @@ -78,24 +81,28 @@ void main() float discriminant = sqrt(discriminantSqr); float2 freq = sqrt(float2(qq + discriminant, qq - discriminant) / 2.0); + // Figuring out how many dots we want float spacing = freq.y * exp2(2.0); spacing = 1.0 / spacing; spacing *= brightness; // TODO: check reference to see how to calculate this! float spacingLog = max(log2(spacing), 0.0); int patternScaleLevel = floor(spacingLog); float patternFractional = spacingLog - patternScaleLevel; - vec2 uv = v_uv0 * exp2(patternScaleLevel); - float dither = circles(uv, patternScaleLevel, patternFractional, brightness); + + // Coloring vec3 texColor = u_testColor.x > 0.1 ? u_testColor.xyz : texture2D(s_texColor, v_uv0).xyz; - vec3 color = desaturate(texColor) * 0.01 + dither * texColor * 0.95; - vec3 smoothColor = brightness * u_testColor.xyz; - vec3 mixedColor = 0.1 * smoothColor + 0.9 * color; - // gl_FragColor = vec4(mixedColor, 1.0); + vec3 color; + color.r = circles(uv, patternScaleLevel, patternFractional, brightness * texColor.r); + color.g = circles(uv, patternScaleLevel, patternFractional, brightness * texColor.g); + color.b = circles(uv, patternScaleLevel, patternFractional, brightness * texColor.b); + // color = circles(uv, patternScaleLevel, patternFractional, brightness) * texColor; gl_FragColor = vec4(color, 1.0); + // vec3 smoothColor = brightness * u_testColor.xyz; // gl_FragColor = brightness; // gl_FragColor = dither; // gl_FragColor = u_testColor; - // gl_FragColor = texture2D(s_texColor, v_uv0); + // gl_FragColor = vec4(texColor, 1.0); // gl_FragColor = vec4(v_normal, 1.0); + // gl_FragColor = vec4(uv, 0.0, 1.0); }