[video output=day519 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Brainstorming about Z Bias" vod_platform=youtube id=3vUzT7JFMVc annotator=Miblo]
[0:02][Recap and set the stage for the day][:speech]
[1:35][Fix typos in EditableBoolean(), EditableSize() and Error() as per @KimJorgensen's bug report[ref
    site=GitHub
    page="HandmadeHero / cpp / FormatString bugs"
    url=https://github.com/HandmadeHero/cpp/issues/90]][:"error handling" :"string manipulation"]
[10:41][Close issue 90[ref
    site=GitHub
    page="HandmadeHero / cpp / FormatString bugs"
    url=https://github.com/HandmadeHero/cpp/issues/90]][:admin :"error handling" :"string manipulation"]
[11:42][Investigate @gingerBill's bug report 'Bug in `PushSize_` that could cause buffer overflow'[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:memory :research]
[19:34][Insert assertions in PushSize_()][:memory]
[23:19][Introduce IsPow2()][:mathematics]
[29:14][Test Power of 2][:blackboard :mathematics]
[35:58][Carefully scrutinise PushSize_() as per @gingerBill's bug report[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:memory :research]
[37:12][Explicitly parenthesise the (Used + Size > Size) comparison in PushSize_()][:memory]
[37:56][Conclude that the bug report is wrong[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:memory :research]
[41:22][Check out C's operator precedence rules[ref
    title="C Operator Precedence Table"
    url=http://web.cse.ohio-state.edu/~babic.1/COperatorPrecedenceTable.pdf]][:language :mathematics :research]
[42:34][Continue to investigate @gingerBill's bug report[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:memory :research]
[45:29][Construct PushSize_() failure cases to address @gingerBill's bug report[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:memory]
[52:16][Step through our PushSize_() test to see that it behaves well][:memory :run]
[54:04][Construct a PushSize_() test in which our request is right on the boundary][:memory]
[55:47][Step through our PushSize_() test to see that it behaves well][:memory :run]
[58:01][Try allocating 4 MiB as the second, expansion-triggering allocation][:memory]
[58:58][Step through our PushSize_() test to see that it behaves well][:memory :run]
[59:39][Try allocating 4 MiB as the first allocation][:memory]
[1:00:05][Step through our PushSize_() test to see that it behaves well][:memory :run]
[1:01:30][Close issue 88 with a few words on the helpfulness of concrete repro-cases in bug reports[ref
    site=GitHub
    page="HandmadeHero / cpp / Bug in `PushSize_` that could cause buffer overflow"
    url=https://github.com/HandmadeHero/cpp/issues/88]][:admin]
[1:04:17][A few words on judicious unit testing][:speech]
[1:12:47][A final glance at the open issues[ref
    site=GitHub
    page="HandmadeHero / cpp / Issues"
    url=https://github.com/HandmadeHero/cpp/issues]][:research]
[1:13:35][Consider hiding the assets of disabled alignment points][:"asset system" :run :ui]
[1:16:26][Consider solving our 2D billboard asset Z-bias problem][:rendering :run]
[1:20:43][Set up to express our Z-bias in CompileZBiasProgram()][:hardware :rendering :research]
[1:23:39][Sprite Z-bias encoding][:blackboard :rendering]
[1:28:24][How CompileZBiasProgram() is currently working][:hardware :rendering :research]
[1:30:17][Adjusting sprite position in Y][:blackboard :rendering]
[1:33:32][Imaginary encodings of sprite position and orientation][:blackboard :mathematics :rendering]
[1:43:54][Don the tennis headband][:admin :hat]
[1:44:55][Understanding ZBias in the case that sprites are drawn exactly upright][:blackboard :hat :mathematics :rendering]
[1:50:11][Understanding ZBias in the case that sprites are drawn lying down a little][:blackboard :hat :mathematics :rendering]
[1:53:24][Projecting in the vertex shader the sprite's Z positions to the passed in Z heights of the world plane][:blackboard :hat :mathematics :rendering]
[1:58:23][Q&A][:hat :speech]
[1:59:07][@vapenir][Q: What kind of testing (unit, replays, etc.) do you use on 1935 / have you used over the years? Is automated testing even really a thing at game studios?][:hat]
[2:02:40][@uplinkcoder][Q: Any news on 1935?]
[2:02:43][@gunngames][Q: For people who don't want to fuss with platform specific code, would you say SDL is a good solution?][:library :"platform layer"]
[2:04:15][We're all done][:speech]
[/video]
