hero/code and chat013: Miscellaneous fixes

This commit is contained in:
Matt Mascarenhas 2021-05-27 15:26:58 +01:00
parent 6ea1be4b70
commit eb4548b401
20 changed files with 27 additions and 27 deletions

View File

@ -1,14 +1,14 @@
[video output=day038 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Basic Linear Bitmap Blending" vod_platform=youtube id=ydiHNs1YQoI annotator=schme annotator=effect0r annotator=theinternetftw] [video output=day038 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Basic Linear Bitmap Blending" vod_platform=youtube id=ydiHNs1YQoI annotator=schme annotator=effect0r annotator=theinternetftw]
[0:00:00][Prestream stuff] [0:00:00][Prestream stuff]
[0:09:18][Intro and welcome] [0:09:18][Intro and welcome]
[0:10:52][Where we left of from last time] [0:10:52][Where we left off from last time]
[0:11:17][Fixing the hero's color] [0:11:17][Fixing the hero's color]
[0:16:16][Figuring out what the shift values are] [0:16:16][Figuring out what the shift values are]
[0:18:48][Bitscanforward] [0:18:48][Bitscanforward]
[0:27:53][Renaming bitscanforward to FindLeastSignificantSetBit] [0:27:53][Renaming bitscanforward to FindLeastSignificantSetBit]
[0:29:36][The intrinsics thing] [0:29:36][The intrinsics thing]
[0:30:16][Finding out what compiler we're on] [0:30:16][Finding out what compiler we're on]
[0:31:27][Making a comprimise: Allowing the intrinsics file access to the platform layer] [0:31:27][Making a compromise: Allowing the intrinsics file access to the platform layer]
[0:33:20][Determining what compiler is being used] [0:33:20][Determining what compiler is being used]
[0:41:20][Simple version of using the alpha channel] [0:41:20][Simple version of using the alpha channel]
[0:45:20][Alpha as an opacity value] [0:45:20][Alpha as an opacity value]
@ -17,7 +17,7 @@
[0:50:04][Krita crashes..] [0:50:04][Krita crashes..]
[0:50:47][Blackboard session explaining alpha blending using the background value] [0:50:47][Blackboard session explaining alpha blending using the background value]
[0:51:01]['Deriving' the formula for a linear blend] [0:51:01]['Deriving' the formula for a linear blend]
[0:58:02][The cannonical form of a linear blend] [0:58:02][The canonical form of a linear blend]
[0:58:45][How the 't' works in the linear blend formula] [0:58:45][How the 't' works in the linear blend formula]
[1:00:35][Implementing the floating point version of linear blend] [1:00:35][Implementing the floating point version of linear blend]
[1:06:55][Drawing the herohead at the location of the player] [1:06:55][Drawing the herohead at the location of the player]
@ -38,5 +38,5 @@
[1:34:36][Is the large VirtualAlloc() at the beginning similar to Linux mmap()?] [1:34:36][Is the large VirtualAlloc() at the beginning similar to Linux mmap()?]
[1:35:51][What bitvalue is 50% brightness?] [1:35:51][What bitvalue is 50% brightness?]
[1:37:34][Does the display bitmap operation actually do anything with the alpha channel?] [1:37:34][Does the display bitmap operation actually do anything with the alpha channel?]
[1:37:58][The solid curve on Wikipedias gamma correction is the linear space intensity. Should be what you're looking for.] [1:37:58][The solid curve on Wikipedia's gamma correction is the linear space intensity. Should be what you're looking for.]
[/video] [/video]

View File

@ -9,7 +9,7 @@
[0:16:20][Tackeling SetCursor] [0:16:20][Tackeling SetCursor]
[0:17:45][Spy++] [0:17:45][Spy++]
[0:21:45][LoadCursor()] [0:21:45][LoadCursor()]
[0:25:50][Setting up dynamically controled cursor visability] [0:25:50][Setting up dynamically controlled cursor visibility]
[0:34:12][Trying to figure out how to stop the 'loading' cursor] [0:34:12][Trying to figure out how to stop the 'loading' cursor]
[0:37:53][Fullscreen support[ref [0:37:53][Fullscreen support[ref
site="The Old New Thing" site="The Old New Thing"
@ -17,7 +17,7 @@
url="http://blogs.msdn.com/b/oldnewthing/archive/2010/04/12/9994016.aspx"]] url="http://blogs.msdn.com/b/oldnewthing/archive/2010/04/12/9994016.aspx"]]
[0:51:09][Discussion on his method of going fullscreen in Windows] [0:51:09][Discussion on his method of going fullscreen in Windows]
[0:54:45][Going over the notes] [0:54:45][Going over the notes]
[0:55:30]['Hackey' way to fill the entire screen with the game] [0:55:30]['Hacky' way to fill the entire screen with the game]
[0:58:50][Q&A][:speech] [0:58:50][Q&A][:speech]
[0:59:57][You said you want your artist to leave an alpha apron around your bitmaps. Why is that?] [0:59:57][You said you want your artist to leave an alpha apron around your bitmaps. Why is that?]
[1:02:15][Sour trolli worms or Haribo gummy bears?] [1:02:15][Sour trolli worms or Haribo gummy bears?]

View File

@ -31,13 +31,13 @@
[1:11:27][Will there be a minimum distance to the wall?] [1:11:27][Will there be a minimum distance to the wall?]
[1:12:03][Will computing a vector where the player will stop just before the wall solve the sticking?] [1:12:03][Will computing a vector where the player will stop just before the wall solve the sticking?]
[1:13:13][Additional explanation to the bounce vector calculation] [1:13:13][Additional explanation to the bounce vector calculation]
[1:19:25][Is there a way to speed up the DrawBitmap -code?] [1:19:25][Is there a way to speed up the DrawBitmap code?]
[1:21:15][Suggestion to remove reblitting the background to improve performance] [1:21:15][Suggestion to remove reblitting the background to improve performance]
[1:22:08][Stream notes Casey drew the cos/sin triangle wrong] [1:22:08][Stream notes Casey drew the cos/sin triangle wrong]
[1:23:39][A wish to mention formal keywords to help people look things up] [1:23:39][A wish to mention formal keywords to help people look things up]
[1:24:53][Was the Witness collision trick to try maintain the distance traveled?] [1:24:53][Was the Witness collision trick to try maintain the distance traveled?]
[1:25:21][Why does wall bouncing not seem to cause sticking, but sliding does?] [1:25:21][Why does wall bouncing not seem to cause sticking, but sliding does?]
[1:27:06][Stream mentions KhanAchademy for learning math] [1:27:06][Stream mentions KhanAcademy for learning math]
[1:27:20][Will the rendering code be able to squash bitmaps?] [1:27:20][Will the rendering code be able to squash bitmaps?]
[1:28:01][Could you/would you benefit from unrolling the collision loop ... ?] [1:28:01][Could you/would you benefit from unrolling the collision loop ... ?]
[/video] [/video]

View File

@ -2,10 +2,10 @@
[0:00:00][Intro and welcome] [0:00:00][Intro and welcome]
[0:01:25][Where we were..] [0:01:25][Where we were..]
[0:01:50][Addressing a bug that was found by the forums] [0:01:50][Addressing a bug that was found by the forums]
[0:04:30][Thinking about how to handle imput] [0:04:30][Thinking about how to handle input]
[0:06:24][Which controller maps to which character?] [0:06:24][Which controller maps to which character?]
[0:09:04][How we're going to handle this problem] [0:09:04][How we're going to handle this problem]
[0:10:36][Maping a controller to a character] [0:10:36][Mapping a controller to a character]
[0:11:36][Pulling player info into the 'entity' structure to support multiple players] [0:11:36][Pulling player info into the 'entity' structure to support multiple players]
[0:12:50][Modifying game_input to allow for multiple players] [0:12:50][Modifying game_input to allow for multiple players]
[0:14:31][Changing his mind about how to handle this] [0:14:31][Changing his mind about how to handle this]

View File

@ -2,7 +2,7 @@
[0:00:25][Owl of Shame: Single producer/Multiple consumer issue] [0:00:25][Owl of Shame: Single producer/Multiple consumer issue]
[0:03:33][InterlockedCompareExchange] [0:03:33][InterlockedCompareExchange]
[0:04:20][Fixing our shame] [0:04:20][Fixing our shame]
[0:06:19][Siumplifying more with the API change] [0:06:19][Simplifying more with the API change]
[0:09:00][Implementing the multithreading API] [0:09:00][Implementing the multithreading API]
[0:12:42][Piping the work queue through] [0:12:42][Piping the work queue through]
[0:14:33][Global defines for AddEntry and CompleteAllWork] [0:14:33][Global defines for AddEntry and CompleteAllWork]
@ -35,7 +35,7 @@
[1:16:10][@pragmascrypt][Is the WeShouldSleep still right after you changed the if condition?] [1:16:10][@pragmascrypt][Is the WeShouldSleep still right after you changed the if condition?]
[1:17:55][@manicthenobody][Why do you use #if 0 instead of // or /*?] [1:17:55][@manicthenobody][Why do you use #if 0 instead of // or /*?]
[1:19:09][@nightbasilisk][Can you show 4k?] [1:19:09][@nightbasilisk][Can you show 4k?]
[1:19:47][gasto5 Q: Is multithreaded code less reliable than singlethreaded code?] [1:19:47][@gasto5][Q: Is multithreaded code less reliable than singlethreaded code?]
[1:20:37][@noxy_key][So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.] [1:20:37][@noxy_key][So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.]
[1:20:56][Power cord bumped, computer shut down] [1:20:56][Power cord bumped, computer shut down]
[1:24:20][@noxy_key][(once more) So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.] [1:24:20][@noxy_key][(once more) So is the circular buffer recycling threads after they're done processing a tile? I wasn't clear on why a circular buffer was chosen.]

View File

@ -22,7 +22,7 @@
[56:11]["We won't add up to 100%"][quote 469] [56:11]["We won't add up to 100%"][quote 469]
[58:00][Q&A][:speech] [58:00][Q&A][:speech]
[59:22][@gunngames][Can I avoid taxation by reinvesting into capital gains?] [59:22][@gunngames][Can I avoid taxation by reinvesting into capital gains?]
[59:44][@dudeinbasement1][Why won't we add to ~100%?] [59:44][@dudeinbasement1][Why won't we add to \~100%?]
[1:00:42][@sssmcgrath][How would you self-update an exe? Right now I have a second exe that copies a file that overwrites the current exe. So main exe calls updateme.exe, closes itself, updateme sleeps for 1/2 second, then copies... There's gotta be something smarter] [1:00:42][@sssmcgrath][How would you self-update an exe? Right now I have a second exe that copies a file that overwrites the current exe. So main exe calls updateme.exe, closes itself, updateme sleeps for 1/2 second, then copies... There's gotta be something smarter]
[1:01:27][@zamar037][Can the percentage support a decimal place?] [1:01:27][@zamar037][Can the percentage support a decimal place?]
[1:01:46][handmade_debug.cpp: Print the percentage as a float] [1:01:46][handmade_debug.cpp: Print the percentage as a float]

View File

@ -46,7 +46,7 @@
[1:52:02][Build and run in -Od and investigate what's happening] [1:52:02][Build and run in -Od and investigate what's happening]
[1:54:18][handmade_sim_region.cpp: Add an assert in AddEntityToHash() to validate the hash, run the game and do not hit that assertion] [1:54:18][handmade_sim_region.cpp: Add an assert in AddEntityToHash() to validate the hash, run the game and do not hit that assertion]
[1:55:07][Step through AddEntityToHash() and investigate what's happening] [1:55:07][Step through AddEntityToHash() and investigate what's happening]
[1:56:30][handmade_sim_region.cpp: Add an assert in GetOrAddBrain() to validate the brain, run the game and ] [1:56:30][handmade_sim_region.cpp: Walk through GetOrAddBrain()]
[1:57:38][handmade_sim_region.cpp: Make GetOrAddBrain() set the Hash->ID, run the game and crash in FreeFrame()] [1:57:38][handmade_sim_region.cpp: Make GetOrAddBrain() set the Hash->ID, run the game and crash in FreeFrame()]
[1:58:31][handmade_sim_region.h: Remove the ID from the entity_hash and brain_hash and instead use their Ptr to identify them] [1:58:31][handmade_sim_region.h: Remove the ID from the entity_hash and brain_hash and instead use their Ptr to identify them]
[1:59:36][Run the game and note that "our brains are still not working properly"][quote 535] [1:59:36][Run the game and note that "our brains are still not working properly"][quote 535]

View File

@ -72,7 +72,7 @@
page="glcorearb.h" page="glcorearb.h"
url="https://www.khronos.org/registry/OpenGL/api/GL/glcorearb.h"]] url="https://www.khronos.org/registry/OpenGL/api/GL/glcorearb.h"]]
[1:32:47][Compile and run to see our crazy w coordinate] [1:32:47][Compile and run to see our crazy w coordinate]
[1:33:56][Introduce handmade_opengl.h ] [1:33:56][Create handmade_opengl.h]
[1:36:18][handmade_opengl.cpp: Make OpenGLInit() call OpenGLCreateProgram(), and write here docs for Header, Vertex and Fragment code] [1:36:18][handmade_opengl.cpp: Make OpenGLInit() call OpenGLCreateProgram(), and write here docs for Header, Vertex and Fragment code]
[1:41:57][Run the game to find that we got through the compilation phase okay, and determine to enable OpenGLCreateProgram() to perform error handling] [1:41:57][Run the game to find that we got through the compilation phase okay, and determine to enable OpenGLCreateProgram() to perform error handling]
[1:44:21][handmade_opengl.cpp: Enable OpenGLCreateProgram() to log shader info and assert on validation failure[ref [1:44:21][handmade_opengl.cpp: Enable OpenGLCreateProgram() to log shader info and assert on validation failure[ref

View File

@ -67,7 +67,7 @@
[1:36:43][Run the game and watch the incorrect clipping behaviour] [1:36:43][Run the game and watch the incorrect clipping behaviour]
[1:37:42][handmade_math.h: Tweak the near and far clip plane in PerspectiveProjection()] [1:37:42][handmade_math.h: Tweak the near and far clip plane in PerspectiveProjection()]
[1:38:54][Try to find a source for the standard projection perspective matrix] [1:38:54][Try to find a source for the standard projection perspective matrix]
[1:43:48][Run the game and consider ] [1:43:48][Run the game to see some projection wonkiness]
[1:46:06][handmade_render_group.cpp: Try turning off the ZBias in PushBitmap()] [1:46:06][handmade_render_group.cpp: Try turning off the ZBias in PushBitmap()]
[1:46:25][Run the game to see that everything is sorting as expected] [1:46:25][Run the game to see that everything is sorting as expected]
[1:48:45][Consider that the ZBias is pre-transformed and appears to be being applied in clip space] [1:48:45][Consider that the ZBias is pre-transformed and appears to be being applied in clip space]

View File

@ -53,7 +53,7 @@
[1:07:12][Investigate which VK_ keys are available to us] [1:07:12][Investigate which VK_ keys are available to us]
[1:10:06][win32_handmade.cpp: Make Win32ProcessPendingMessage() use VK_OEM_PLUS and VK_OEM_MINUS] [1:10:06][win32_handmade.cpp: Make Win32ProcessPendingMessage() use VK_OEM_PLUS and VK_OEM_MINUS]
[1:10:46][Run the game to try out our key bindings, and investigate why we can't cycle between the textures] [1:10:46][Run the game to try out our key bindings, and investigate why we can't cycle between the textures]
[1:12:29][handmade_opengl.cpp: ] [1:12:29][handmade_opengl.cpp: Double-check CompileFinalStretch()]
[1:13:05][Consult the documentation on Framebuffer[ref [1:13:05][Consult the documentation on Framebuffer[ref
site="Khronos" site="Khronos"
page="Framebuffer" page="Framebuffer"

View File

@ -21,7 +21,7 @@
[54:30][Blackboard: All light must go somewhere] [54:30][Blackboard: All light must go somewhere]
[55:33][handmade_render_group.cpp: Enable LightingTest() to make RefC converge towards 0, and track the transference and accumulation of light] [55:33][handmade_render_group.cpp: Enable LightingTest() to make RefC converge towards 0, and track the transference and accumulation of light]
[1:03:25][handmade_render_group.cpp: Enable LightingTest() to correct for the wrongness of the transfer] [1:03:25][handmade_render_group.cpp: Enable LightingTest() to correct for the wrongness of the transfer]
[1:11:10][Step in to LightingTest() and ] [1:11:10][Step through LightingTest()]
[1:13:10][Consider how to handle emission] [1:13:10][Consider how to handle emission]
[1:13:46][handmade_render_group.cpp: Prevent LightingTest() from performing the correction and just letting the light bounce ad infinitum] [1:13:46][handmade_render_group.cpp: Prevent LightingTest() from performing the correction and just letting the light bounce ad infinitum]
[1:14:27][Run the game to see the flickery results] [1:14:27][Run the game to see the flickery results]

View File

@ -34,7 +34,7 @@
[1:12:47][Make RayCast() account for the Source Position in the Position computation][:lighting :rendering] [1:12:47][Make RayCast() account for the Source Position in the Position computation][:lighting :rendering]
[1:13:55][:Run the game to see that it looks much more correct][:lighting :rendering] [1:13:55][:Run the game to see that it looks much more correct][:lighting :rendering]
[1:15:47][Temporarily increase the RayCount in ComputeLightPropagation()][:lighting :rendering] [1:15:47][Temporarily increase the RayCount in ComputeLightPropagation()][:lighting :rendering]
[1:16:01][:Run the game to see the :lighting solution with more rays[:rendering]] [1:16:01][:Run the game to see the :lighting solution with more rays][:rendering]
[1:17:05][Determine to make the light sampling more unbiased][:lighting :rendering :speech] [1:17:05][Determine to make the light sampling more unbiased][:lighting :rendering :speech]
[1:18:58][:Run the game and determine to enable :lighting recomputation while showing the :"debug visualisation"][:"debug system" :rendering] [1:18:58][:Run the game and determine to enable :lighting recomputation while showing the :"debug visualisation"][:"debug system" :rendering]
[1:19:34][Enable UpdateAndRenderWorld() to recompute the :lighting while showing the :"debug visualisation"][:"debug system" :rendering] [1:19:34][Enable UpdateAndRenderWorld() to recompute the :lighting while showing the :"debug visualisation"][:"debug system" :rendering]

View File

@ -4,7 +4,7 @@
page="HandmadeHero / cpp" page="HandmadeHero / cpp"
url=https://github.com/HandmadeHero/cpp/issues]][:speech] url=https://github.com/HandmadeHero/cpp/issues]][:speech]
[1:35][Show item_hat_03.png with a view to investigating why we are extracting six tiles from this four-tile asset][:admin :art :"asset system"] [1:35][Show item_hat_03.png with a view to investigating why we are extracting six tiles from this four-tile asset][:admin :art :"asset system"]
[5:14][Determine to enable test_png to output ] [5:14][Determine to enable test_png to output alpha pixels full white]
[6:54][Enable WriteImageTopDownRGBA() to output any alpha pixels full white, introducing ThreshAlpha()][:rendering] [6:54][Enable WriteImageTopDownRGBA() to output any alpha pixels full white, introducing ThreshAlpha()][:rendering]
[9:52][Run test_png on item_hat_03.png and see some spurious data in the output][:admin :rendering] [9:52][Run test_png on item_hat_03.png and see some spurious data in the output][:admin :rendering]
[11:40][Reacquaint ourselves with ProcessMultiTileImport() to see that it only processes tiles containing alpha pixels][:"asset system" :research :rendering] [11:40][Reacquaint ourselves with ProcessMultiTileImport() to see that it only processes tiles containing alpha pixels][:"asset system" :research :rendering]

View File

@ -64,7 +64,7 @@
[1:55:52][Get a new dotahero][:admin] [1:55:52][Get a new dotahero][:admin]
[1:56:43][Ponder ~RemedyBG's breakpoint confusion][:"hot reloading" :library :speech] [1:56:43][Ponder ~RemedyBG's breakpoint confusion][:"hot reloading" :library :speech]
[1:57:46][Wonder why we're jumping to an unknown function][:"hot reloading" :library :speech] [1:57:46][Wonder why we're jumping to an unknown function][:"hot reloading" :library :speech]
[1:58:17][:Run, rebuild, step in to OpenGLEndFrame() and ][:"hot reloading" :library] [1:58:17][:Run, rebuild, step in to OpenGLEndFrame() and inspect the OpenGL struct][:"hot reloading" :library]
[1:59:51][Remember that our OpenGL functions reside in a dll-local table, and must be reinitialised][:"hot reloading" :library :speech] [1:59:51][Remember that our OpenGL functions reside in a dll-local table, and must be reinitialised][:"hot reloading" :library :speech]
[2:01:32][Augment open_gl with our OpenGL functions, renaming OpenGLGlobalFunction() to OpenGLFunction()][:library :rendering] [2:01:32][Augment open_gl with our OpenGL functions, renaming OpenGLGlobalFunction() to OpenGLFunction()][:library :rendering]
[2:08:23][Make our OpenGL context available to all OpenGL-calling functions, and Win32InitOpenGL() initialise our OpenGL functions][:library :rendering] [2:08:23][Make our OpenGL context available to all OpenGL-calling functions, and Win32InitOpenGL() initialise our OpenGL functions][:library :rendering]