{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":4003841,"defaultBranch":"master","name":"vectorstorm","ownerLogin":"vectorstorm","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-04-12T11:10:32.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1581721?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1708044686.0","currentOid":""},"activityList":{"items":[{"before":"56563056949dff9015b7a612966fd078c46decc6","after":"42163d4494b3d746f1d1f8f06799958fc4d9e250","ref":"refs/heads/master","pushedAt":"2024-05-05T07:16:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Move the debug timing visualisation (when enabled) into explicit pipelines.\n\nThe engine now draws the debug timing by putting it into a pipeline\nexplicitly. When DEBUG_SCENE is enabled in the engine, it goes into the\nengine's default pipeline. If your game is providing its own rendering\npipeline, (as MMORPG Tycoon 2 does), then you'll need to add it to your\nown pipeline manually, if you want it!","shortMessageHtmlLink":"Move the debug timing visualisation (when enabled) into explicit pipe…"}},{"before":"443716538f06c0f3e4e706e0b74493fbb6521472","after":"56563056949dff9015b7a612966fd078c46decc6","ref":"refs/heads/master","pushedAt":"2024-05-05T06:08:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Splits up 'Draw' and 'Present'.\n\nPreviously, \"Present\" happened automatically at the end of every call to\n`vsScreen::Draw()` (or similar functions). Now that no longer happens;\ngames are now responsible for explicitly calling `vsScreen::Present()`\nwhen it's done drawing things. (we've done that in the default\n'coreGame' implementation of DrawFrame, as an example of how it's meant\nto work)\n\nThis makes it possible for a game to submit multiple render pipelines\nduring a frame, instead of stuffing everything into a single monolithic\none. And *this* can simplify a loot of game logic, since systems can\nnow just perform their own mini-draws whenever required, mid-frame,\ninstead of trying to compose them into a single game-wide render\npipeline.\n\nThis adds a new function `vsScreen::DrawPipeline_ThreadSafe()`, which is\nthe same as `vsScreen::DrawPipeline()`, but will detect if we're not\nrunning on the main thread and will marshal the draw request over to the\nmain thread, blocking the calling thread until the draw has completed.","shortMessageHtmlLink":"Splits up 'Draw' and 'Present'."}},{"before":"def71ce85b3bb64f6cd9a409de695fce16a5b51c","after":"443716538f06c0f3e4e706e0b74493fbb6521472","ref":"refs/heads/master","pushedAt":"2024-04-26T08:41:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fixes error in vsModelInstanceLodGroup\n\nOnly removed half the instances were being removed when the group was\ndestroyed, which left the other half pointing at random memory. I'm\namazed this bug lasted as long as it did before showing up in memory\ntests!","shortMessageHtmlLink":"Fixes error in vsModelInstanceLodGroup"}},{"before":"7541de26ecdeaa1cb149e64ea7b2c90ce48e827d","after":"def71ce85b3bb64f6cd9a409de695fce16a5b51c","ref":"refs/heads/master","pushedAt":"2024-04-22T05:21:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fixed silly :s/mutex/spinlock error in a comment in VS_Spinlock.h","shortMessageHtmlLink":"Fixed silly :s/mutex/spinlock error in a comment in VS_Spinlock.h"}},{"before":"801a8788ba43d5f8fe7cd1fed29722aee63d2cad","after":"7541de26ecdeaa1cb149e64ea7b2c90ce48e827d","ref":"refs/heads/master","pushedAt":"2024-04-13T12:43:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Adds CT_KeyboardKeycode for keycode-based keyboard controls.\n\nThere are two ways to handle keyboard input; scancode or keycode.\n\nScancode refers to the physical position of a key on a keyboard (WASD,\nfor example, is commonly mapped by scancode), Keycode refers to what\nletter is produced when you press the key.\n\nAs a general rule, when you're doing video game controls, you want to be\nusing scancodes to put keys in convenient locations. But sometimes\nyou're picking keys based upon a mnemonic ('M' for 'Map', for example),\nand so maybe you want to actually use the 'M' key no matter what\nkeyboard layout somebody's using.\n\nThe danger, of course, is always that you're going to end up with keys\noverlapping if you use both scancodes and keycodes.\n\nFor example, it's common to use the 'Z' keycode to for 'Undo' features.\nHowever, in an AZERTY layout, the 'Z' key is where 'W' is on a QWERTY\nlayout, and so your scancode WASD for movement is conflicting with your\nkeycode Z for 'undo'!\n\nGeneral rule of thumb is to only use scancodes or only use keycodes.\nHere, we generally prefer scancodes. But sometimes you do need keycodes\n(for example, for 'undo'), and so this supports that use-case. Just be\ncareful with it!","shortMessageHtmlLink":"Adds CT_KeyboardKeycode for keycode-based keyboard controls."}},{"before":"526c3aaf57e2c3ccc7e49a346e3707438ea5a6f4","after":"801a8788ba43d5f8fe7cd1fed29722aee63d2cad","ref":"refs/heads/master","pushedAt":"2024-04-02T06:00:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fix save/load of key bindings to maintain modifier status","shortMessageHtmlLink":"Fix save/load of key bindings to maintain modifier status"}},{"before":"f75b75ab209e30051e7575160a4ad5e508531ff6","after":"526c3aaf57e2c3ccc7e49a346e3707438ea5a6f4","ref":"refs/heads/master","pushedAt":"2024-04-01T03:53:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Workaround for 'between frames' press of modded key combos.\n\nWasn't checking for controlkey combos there, and it's not a trivial fix (since\nwe don't currently have modifier states during the between-frames\ntimes). As a temporary workaround, just disable between-frames\npress/release detection for controlkey combos.","shortMessageHtmlLink":"Workaround for 'between frames' press of modded key combos."}},{"before":"ed2a075d5e730dc9fbeeec962594a6f189c1f345","after":"f75b75ab209e30051e7575160a4ad5e508531ff6","ref":"refs/heads/master","pushedAt":"2024-03-31T15:10:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Adds input binding for control keys.\n\nThis makes it so you can bind a single input code to \"control+z\", for\nexample, and not have it trigger on simple \"z\" and always have to check\nfor 'control' yourself.\n\nDownside is that we're *not* currently masking out NON-control. That\nis, a control that's mapped to Z *will* be triggered at the same time as\nyour control+Z mapping.\n\nI need to make this easier to handle! But that'll be a future update.","shortMessageHtmlLink":"Adds input binding for control keys."}},{"before":"aff3c4f548d1695c3295e10c1bdcb00ebb7a0206","after":"ed2a075d5e730dc9fbeeec962594a6f189c1f345","ref":"refs/heads/master","pushedAt":"2024-03-31T13:54:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fixes vsVolatileArray 'RemoveItem' -> 'RemoveIndex'\n\nThis keeps it from overlapping with the templated by-value item type for\nvolatile arrays of integers.","shortMessageHtmlLink":"Fixes vsVolatileArray 'RemoveItem' -> 'RemoveIndex'"}},{"before":"8945c12fe2fef9a95ced6988502a82e6395f75de","after":"aff3c4f548d1695c3295e10c1bdcb00ebb7a0206","ref":"refs/heads/master","pushedAt":"2024-03-27T06:08:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Tweaked code for vsTransform3D::ApplyInverseTo.\n\nThis makes it almost identical to vsTransform::ApplyTo, which makes me\nmore confident in the code.","shortMessageHtmlLink":"Tweaked code for vsTransform3D::ApplyInverseTo."}},{"before":"f985ae1b9afeb8cdee103f624ec74a3f72337766","after":"8945c12fe2fef9a95ced6988502a82e6395f75de","ref":"refs/heads/master","pushedAt":"2024-03-27T02:18:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Tweaked vsIsWhitespace to be far, far easier to read.\n\nAlso adds the five whitespace characters we hadn't been testing for\n(which were mostly things like vertical tabs, but also included a\nsix-per-em space that we'd somehow missed before)","shortMessageHtmlLink":"Tweaked vsIsWhitespace to be far, far easier to read."}},{"before":"dfc263287d59b13ac7a9f87d03d8afd54dbce735","after":"f985ae1b9afeb8cdee103f624ec74a3f72337766","ref":"refs/heads/master","pushedAt":"2024-03-26T23:35:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fixes a crash if you try to bake an empty vsLineBuilder2D.\n\nIf you create a vsLineBuilder2D and call 'Bake' on it to produce a\nrenderable vsFragment, it would crash if no lines had been added to the\nvsLineBuilder2D. Now fixed; we now return a nullptr in that situation,\ninstead of crashing.","shortMessageHtmlLink":"Fixes a crash if you try to bake an empty vsLineBuilder2D."}},{"before":"44582b96b1685491154d7b43c3fdd0a2304b19fb","after":"dbcf20cba11b3306d671b42b349f6092a62b17d9","ref":"refs/heads/reuse_vbos","pushedAt":"2024-03-12T13:24:33.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Merge branch 'master' into reuse_vbos","shortMessageHtmlLink":"Merge branch 'master' into reuse_vbos"}},{"before":"3b8d0cb4de3677b2508bed7de394900c276c8418","after":"dfc263287d59b13ac7a9f87d03d8afd54dbce735","ref":"refs/heads/master","pushedAt":"2024-03-11T09:34:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fix vsFrustum testing vs vsBox3D","shortMessageHtmlLink":"Fix vsFrustum testing vs vsBox3D"}},{"before":"52740be44c1c2e06fa232d4603917b615b9d2122","after":"44582b96b1685491154d7b43c3fdd0a2304b19fb","ref":"refs/heads/reuse_vbos","pushedAt":"2024-03-11T06:36:19.000Z","pushType":"push","commitsCount":20,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Merge branch 'master' into reuse_vbos","shortMessageHtmlLink":"Merge branch 'master' into reuse_vbos"}},{"before":"1eccd2eec6843cfbc636e3c795886be26a88d549","after":"3b8d0cb4de3677b2508bed7de394900c276c8418","ref":"refs/heads/master","pushedAt":"2024-03-10T07:00:44.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Make vsCache threadsafe by adding a mutex.","shortMessageHtmlLink":"Make vsCache threadsafe by adding a mutex."}},{"before":"c2b46a0e7f3fc5460a8b9368e076f605488d1c6a","after":"1eccd2eec6843cfbc636e3c795886be26a88d549","ref":"refs/heads/master","pushedAt":"2024-03-08T08:56:12.000Z","pushType":"push","commitsCount":12,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Merge branch 'profile_directory'","shortMessageHtmlLink":"Merge branch 'profile_directory'"}},{"before":"4b2bd8ad3bb1f5addff1e15c9300b01f8018d2c4","after":"c2b46a0e7f3fc5460a8b9368e076f605488d1c6a","ref":"refs/heads/master","pushedAt":"2024-03-08T08:22:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"StupidHoroscope","name":null,"path":"/StupidHoroscope","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/101994305?s=80&v=4"},"commit":{"message":"Added ability to specify subrect for vsFrustum","shortMessageHtmlLink":"Added ability to specify subrect for vsFrustum"}},{"before":"469c590f03505db8b0accbe998a306f42c030976","after":"27d44728389d52e88b99e9de85e32e7785b67055","ref":"refs/heads/profile_directory","pushedAt":"2024-03-07T06:59:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Increase default generic list size in a vsRenderQueue\n\n50kb->100kb.","shortMessageHtmlLink":"Increase default generic list size in a vsRenderQueue"}},{"before":"16e3c54dffebb037cdeca84d49a8558a52660701","after":"469c590f03505db8b0accbe998a306f42c030976","ref":"refs/heads/profile_directory","pushedAt":"2024-03-07T01:11:28.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Fixes a stack overflow when trying to format absurdly huge numbers.\n\nWas a combination of bugs which eventually led to a stack overflow\nbecause abs(-2147483648) == -2147483648.\n\n(I mean, technically it doesn't equal that; it's undefined behaviour to\ntry to get the absolute value of the largest possible negative int value\nas it results in an integer wraparound, so technically the compiler\ncould legally do anything it wanted and you couldn't say it was\ndisobeying the specs, but most compilers will wrap around like this and\nresult in the same value you passed into 'abs'. And in this case, the\nfunction was calling itself with the abs'd value which resulted in an\ninfinite regression)","shortMessageHtmlLink":"Fixes a stack overflow when trying to format absurdly huge numbers."}},{"before":"bdd2049587fac14290879f1fb04419a567b1eff5","after":"16e3c54dffebb037cdeca84d49a8558a52660701","ref":"refs/heads/profile_directory","pushedAt":"2024-02-22T03:42:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Add __STDC_FORMAT_MACROS define.\n\nThis ensures that PRIu64 and similar are provided everywhere.","shortMessageHtmlLink":"Add __STDC_FORMAT_MACROS define."}},{"before":"158595f339c173a8007f0532b606362ceea9179e","after":"bdd2049587fac14290879f1fb04419a567b1eff5","ref":"refs/heads/profile_directory","pushedAt":"2024-02-22T03:37:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Update VS_File.cpp for OSX deployment target 10.15 minimum\n\nThis gives OSX access to std::filesystem.","shortMessageHtmlLink":"Update VS_File.cpp for OSX deployment target 10.15 minimum"}},{"before":"304ae05b37e28dd3a5efee425672adc12b21997d","after":"158595f339c173a8007f0532b606362ceea9179e","ref":"refs/heads/profile_directory","pushedAt":"2024-02-22T01:48:34.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Merge branch 'master' into profile_directory","shortMessageHtmlLink":"Merge branch 'master' into profile_directory"}},{"before":"208494d6e70d70a1f3c4b1d2ae34354907af0d74","after":"4b2bd8ad3bb1f5addff1e15c9300b01f8018d2c4","ref":"refs/heads/master","pushedAt":"2024-02-20T05:30:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Better setup for vsInput getting numeric localisations","shortMessageHtmlLink":"Better setup for vsInput getting numeric localisations"}},{"before":"3b0982c12ac545b624046e096d3b7c4121a2ad07","after":"304ae05b37e28dd3a5efee425672adc12b21997d","ref":"refs/heads/profile_directory","pushedAt":"2024-02-20T04:14:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"More logging of details during profile directory file migration","shortMessageHtmlLink":"More logging of details during profile directory file migration"}},{"before":"3a892973212e1d99319dfc08fe7dd2a1d0ef28f8","after":"3b0982c12ac545b624046e096d3b7c4121a2ad07","ref":"refs/heads/profile_directory","pushedAt":"2024-02-20T04:01:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Adds messaging when trying to migrate files to profile directories\n\nIn case of failure, we now log error messages and show popup messages to\nnote what's happened.","shortMessageHtmlLink":"Adds messaging when trying to migrate files to profile directories"}},{"before":"3c1e5ebf8d2896e5e1638f98d60526a37b525d34","after":"208494d6e70d70a1f3c4b1d2ae34354907af0d74","ref":"refs/heads/master","pushedAt":"2024-02-16T01:33:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"vsFile openFailureHandler can now return whether to keep running\n\nOn 'false', we assert as before. On 'true', we keep running but set the\nfile's \"m_ok\" member to false, so external code can cope with it.\n\nvsTextureInternal has been updated to obey that m_ok flag and abort file\nreading if the file read has failed.","shortMessageHtmlLink":"vsFile openFailureHandler can now return whether to keep running"}},{"before":"3a892973212e1d99319dfc08fe7dd2a1d0ef28f8","after":"3c1e5ebf8d2896e5e1638f98d60526a37b525d34","ref":"refs/heads/master","pushedAt":"2024-02-16T00:52:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"vsRenderQueue watches for people (i.e.: me) forgetting to call EndRender\n\nThere was a potential memory leak in that situation, so.. let's watch\nfor it!","shortMessageHtmlLink":"vsRenderQueue watches for people (i.e.: me) forgetting to call EndRender"}},{"before":null,"after":"3a892973212e1d99319dfc08fe7dd2a1d0ef28f8","ref":"refs/heads/profile_directory","pushedAt":"2024-02-16T00:51:26.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Wrap an SDL_Init around logging startup.\n\nTechnically we're supposed to have called SDL_Init() before calling\nSDL_GetPrefPath(), which is used inside vsLog_Start() long before we've\ninitialised anything else.\n\nTo get around that issue, we now start up SDL in bare-bones mode before\ncalling the function, and then shut it down again afterward. (we then\nstart it up again in a normal mode later on during startup, as normal)\n\nI've also moved the call to SDL_GetPrefPath() around a little later\nduring startup, so it happens slightly *after* initialising SDL, instead\nof slight before. It doesn't matter, since SDL initialisation doesn't\nuse any of our in-game file access functions.\n\nAdditionally, I've (finally!) noticed that SDL_GetPrefPath() wants the\ncaller to free the string buffer it returns, so we now do that.\n\nFinally, I've renamed a couple functions, improved comments, and culled\ndead code around directory renaming and moving. I'm feeling a *lot*\nhappier with this code now!","shortMessageHtmlLink":"Wrap an SDL_Init around logging startup."}},{"before":"95c3d25ea1d1ecd51550a21dd48a0f479ea25b8f","after":"3a892973212e1d99319dfc08fe7dd2a1d0ef28f8","ref":"refs/heads/master","pushedAt":"2024-02-15T14:10:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vectorstorm","name":null,"path":"/vectorstorm","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1581721?s=80&v=4"},"commit":{"message":"Wrap an SDL_Init around logging startup.\n\nTechnically we're supposed to have called SDL_Init() before calling\nSDL_GetPrefPath(), which is used inside vsLog_Start() long before we've\ninitialised anything else.\n\nTo get around that issue, we now start up SDL in bare-bones mode before\ncalling the function, and then shut it down again afterward. (we then\nstart it up again in a normal mode later on during startup, as normal)\n\nI've also moved the call to SDL_GetPrefPath() around a little later\nduring startup, so it happens slightly *after* initialising SDL, instead\nof slight before. It doesn't matter, since SDL initialisation doesn't\nuse any of our in-game file access functions.\n\nAdditionally, I've (finally!) noticed that SDL_GetPrefPath() wants the\ncaller to free the string buffer it returns, so we now do that.\n\nFinally, I've renamed a couple functions, improved comments, and culled\ndead code around directory renaming and moving. I'm feeling a *lot*\nhappier with this code now!","shortMessageHtmlLink":"Wrap an SDL_Init around logging startup."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEQbuuTwA","startCursor":null,"endCursor":null}},"title":"Activity · vectorstorm/vectorstorm"}