Handmade Hero»Episode Guide
Fixing the "Lighting" Bug
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:00Welcome to the stream
🗩
0:21Look into our incorrect usage of _mm_blendv_ps() in the f32 version of SignOf()1
📖
0:21Look into our incorrect usage of _mm_blendv_ps() in the f32 version of SignOf()1
📖
0:21Look into our incorrect usage of _mm_blendv_ps() in the f32 version of SignOf()1
📖
6:59Fix the f32 SignOf() in SIMD2
6:59Fix the f32 SignOf() in SIMD2
6:59Fix the f32 SignOf() in SIMD2
11:23Hunt in vain for SignOrZero()
📖
11:23Hunt in vain for SignOrZero()
📖
11:23Hunt in vain for SignOrZero()
📖
14:18Determine to look at octahedral code to see if we're using SignOf() as SignOrZero()
14:18Determine to look at octahedral code to see if we're using SignOf() as SignOrZero()
14:18Determine to look at octahedral code to see if we're using SignOf() as SignOrZero()
14:57Fix compile errors in SignOf()
14:57Fix compile errors in SignOf()
14:57Fix compile errors in SignOf()
15:16Double-check our SignOf()
📖
15:16Double-check our SignOf()
📖
15:16Double-check our SignOf()
📖
16:35Update the f32_4x SignOf()
16:35Update the f32_4x SignOf()
16:35Update the f32_4x SignOf()
19:53Traverse the orphanage, and successfully provoke our lighting bug
🏃
19:53Traverse the orphanage, and successfully provoke our lighting bug
🏃
19:53Traverse the orphanage, and successfully provoke our lighting bug
🏃
23:32Exhibit our lighting bug localised
🏃
23:32Exhibit our lighting bug localised
🏃
23:32Exhibit our lighting bug localised
🏃
23:47Consider a possible lighting quality improvement
🏃
23:47Consider a possible lighting quality improvement
🏃
23:47Consider a possible lighting quality improvement
🏃
25:16Determine to investigate our lighting bug
🏃
25:16Determine to investigate our lighting bug
🏃
25:16Determine to investigate our lighting bug
🏃
25:53Try to provoke our lighting bug in -Od
🏃
25:53Try to provoke our lighting bug in -Od
🏃
25:53Try to provoke our lighting bug in -Od
🏃
27:43In -O2 our SpecValid and DiffuseValid values start at 0
🏃
27:43In -O2 our SpecValid and DiffuseValid values start at 0
🏃
27:43In -O2 our SpecValid and DiffuseValid values start at 0
🏃
28:11Introduce ValidateTexel() and make BlockCopyAtlas() assert with ValidateAtlas()
28:11Introduce ValidateTexel() and make BlockCopyAtlas() assert with ValidateAtlas()
28:11Introduce ValidateTexel() and make BlockCopyAtlas() assert with ValidateAtlas()
31:17Hit our top ValidateAtlas() assertion in BlockCopyAtlas()
🏃
31:17Hit our top ValidateAtlas() assertion in BlockCopyAtlas()
🏃
31:17Hit our top ValidateAtlas() assertion in BlockCopyAtlas()
🏃
32:46Make SetLightAtlasTexels() assert with ValidateAtlas()
32:46Make SetLightAtlasTexels() assert with ValidateAtlas()
32:46Make SetLightAtlasTexels() assert with ValidateAtlas()
33:04Never hit our assertion in SetLightAtlasTexels()
🏃
33:04Never hit our assertion in SetLightAtlasTexels()
🏃
33:04Never hit our assertion in SetLightAtlasTexels()
🏃
33:31Use LIGHT_ATLAS_ASSERT() for our assertions
33:31Use LIGHT_ATLAS_ASSERT() for our assertions
33:31Use LIGHT_ATLAS_ASSERT() for our assertions
34:01Hit none of our assertions
🏃
34:01Hit none of our assertions
🏃
34:01Hit none of our assertions
🏃
34:15Try replacing LIGHT_ATLAS_ASSERT() with Assert() in BlockCopyAtlas()
34:15Try replacing LIGHT_ATLAS_ASSERT() with Assert() in BlockCopyAtlas()
34:15Try replacing LIGHT_ATLAS_ASSERT() with Assert() in BlockCopyAtlas()
34:49Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
34:49Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
34:49Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
34:55Replace Assert() with LIGHT_ATLAS_ASSERT() in BlockCopyAtlas()
34:55Replace Assert() with LIGHT_ATLAS_ASSERT() in BlockCopyAtlas()
34:55Replace Assert() with LIGHT_ATLAS_ASSERT() in BlockCopyAtlas()
35:06Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
35:06Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
35:06Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
35:30Describe our method for zeroing in on a bug, lacking a theory as to its source
🗩
35:30Describe our method for zeroing in on a bug, lacking a theory as to its source
🗩
35:30Describe our method for zeroing in on a bug, lacking a theory as to its source
🗩
37:40Plan our lighting map validation
📖
37:40Plan our lighting map validation
📖
37:40Plan our lighting map validation
📖
40:08Make ComputeLightPropagationWork() assert with ValidateAtlas()
40:08Make ComputeLightPropagationWork() assert with ValidateAtlas()
40:08Make ComputeLightPropagationWork() assert with ValidateAtlas()
41:20Hit our DiffuseAtlas assertion in ComputeLightPropagationWork() after FullCast()
🏃
41:20Hit our DiffuseAtlas assertion in ComputeLightPropagationWork() after FullCast()
🏃
41:20Hit our DiffuseAtlas assertion in ComputeLightPropagationWork() after FullCast()
🏃
42:07Remove our ValidateAtlas() calls
42:07Remove our ValidateAtlas() calls
42:07Remove our ValidateAtlas() calls
42:34Focus our lighting map validation on FullCast()
📖
42:34Focus our lighting map validation on FullCast()
📖
42:34Focus our lighting map validation on FullCast()
📖
44:53Consult the chat for Japanese speakers
🗩
44:53Consult the chat for Japanese speakers
🗩
44:53Consult the chat for Japanese speakers
🗩
45:12mas_ketta Bikkuri shita!
🗪
45:12mas_ketta Bikkuri shita!
🗪
45:12mas_ketta Bikkuri shita!
🗪
45:31drspectra I mean it's 5:30 am in Japan
🗪
45:31drspectra I mean it's 5:30 am in Japan
🗪
45:31drspectra I mean it's 5:30 am in Japan
🗪
45:55infinum handmade_hero How good is your Japanese?
🗪
45:55infinum handmade_hero How good is your Japanese?
🗪
45:55infinum handmade_hero How good is your Japanese?
🗪
46:07Request a link to Mr Yabatan making a hotpot, with his Dad on the phone3
46:07Request a link to Mr Yabatan making a hotpot, with his Dad on the phone3
46:07Request a link to Mr Yabatan making a hotpot, with his Dad on the phone3
47:06thesandvichmaker Foreigner meets Ramen 🍜 ラーメンで興奮する外国人!4
🗪
47:06thesandvichmaker Foreigner meets Ramen 🍜 ラーメンで興奮する外国人!4
🗪
47:06thesandvichmaker Foreigner meets Ramen 🍜 ラーメンで興奮する外国人!4
🗪
48:11nestedmadness handmade_hero Talking about this?5
🗪
48:11nestedmadness handmade_hero Talking about this?5
🗪
48:11nestedmadness handmade_hero Talking about this?5
🗪
48:42Add ValidateAtlas() assertions in FullCast()
48:42Add ValidateAtlas() assertions in FullCast()
48:42Add ValidateAtlas() assertions in FullCast()
49:53Hit our bottom SpecAtlas ValidateAtlas() assertion in FullCast()
🏃
49:53Hit our bottom SpecAtlas ValidateAtlas() assertion in FullCast()
🏃
49:53Hit our bottom SpecAtlas ValidateAtlas() assertion in FullCast()
🏃
50:16Disable multithreading
50:16Disable multithreading
50:16Disable multithreading
51:54Try and hit our assertion in FullCast()
🏃
51:54Try and hit our assertion in FullCast()
🏃
51:54Try and hit our assertion in FullCast()
🏃
52:11mindmark42 I just checked the octrahedral paper.6 It uses signNotZero()
🗪
52:11mindmark42 I just checked the octrahedral paper.6 It uses signNotZero()
🗪
52:11mindmark42 I just checked the octrahedral paper.6 It uses signNotZero()
🗪
52:42We hit our assertion in FullCast() single-threaded
🏃
52:42We hit our assertion in FullCast() single-threaded
🏃
52:42We hit our assertion in FullCast() single-threaded
🏃
52:49Focus our lighting map validation on GridRayCast()
📖
52:49Focus our lighting map validation on GridRayCast()
📖
52:49Focus our lighting map validation on GridRayCast()
📖
55:59Request a reminder from chat to rerun the sphere generator
🗩
55:59Request a reminder from chat to rerun the sphere generator
🗩
55:59Request a reminder from chat to rerun the sphere generator
🗩
56:22Make GridRayCast() assert with ValidateTexel()
56:22Make GridRayCast() assert with ValidateTexel()
56:22Make GridRayCast() assert with ValidateTexel()
57:16Hit our bottom 6th SpecAtlas ValidateTexel() assertion in GridRayCast()()
🏃
57:16Hit our bottom 6th SpecAtlas ValidateTexel() assertion in GridRayCast()()
🏃
57:16Hit our bottom 6th SpecAtlas ValidateTexel() assertion in GridRayCast()()
🏃
58:04Fail to hit our assertion in -Od
🏃
58:04Fail to hit our assertion in -Od
🏃
58:04Fail to hit our assertion in -Od
🏃
58:44Fail to hit our assertion in -O2, until hitting it on the bottom 7th SpecAtlas texel
🏃
58:44Fail to hit our assertion in -O2, until hitting it on the bottom 7th SpecAtlas texel
🏃
58:44Fail to hit our assertion in -O2, until hitting it on the bottom 7th SpecAtlas texel
🏃
59:46Wonder if TransferPPS never gets initialised, causing our negative lighting values
📖
59:46Wonder if TransferPPS never gets initialised, causing our negative lighting values
📖
59:46Wonder if TransferPPS never gets initialised, causing our negative lighting values
📖
1:01:55Make GridRayCast() initialise TransferPPS
1:01:55Make GridRayCast() initialise TransferPPS
1:01:55Make GridRayCast() initialise TransferPPS
1:02:13Hit our bottom 7th SpecAtlas ValidateTexel() assertion in GridRayCast()
🏃
1:02:13Hit our bottom 7th SpecAtlas ValidateTexel() assertion in GridRayCast()
🏃
1:02:13Hit our bottom 7th SpecAtlas ValidateTexel() assertion in GridRayCast()
🏃
1:02:27Scrutinise the TransferPPS values in GridRayCast()
📖
1:02:27Scrutinise the TransferPPS values in GridRayCast()
📖
1:02:27Scrutinise the TransferPPS values in GridRayCast()
📖
1:04:48Make GridRayCast() assert TransferPPS with ValidateTexel()
1:04:48Make GridRayCast() assert TransferPPS with ValidateTexel()
1:04:48Make GridRayCast() assert TransferPPS with ValidateTexel()
1:05:22Hit our 1st TransferPPS ValidateTexel() assertion in GridRayCast()
🏃
1:05:22Hit our 1st TransferPPS ValidateTexel() assertion in GridRayCast()
🏃
1:05:22Hit our 1st TransferPPS ValidateTexel() assertion in GridRayCast()
🏃
1:05:55Make GridRayCast() assert TransferPPS with ValidateTexel() upon setting it
1:05:55Make GridRayCast() assert TransferPPS with ValidateTexel() upon setting it
1:05:55Make GridRayCast() assert TransferPPS with ValidateTexel() upon setting it
1:06:35Exhibit our lighting bug without hitting an assertion, before hitting the TransferPPS one
🏃
1:06:35Exhibit our lighting bug without hitting an assertion, before hitting the TransferPPS one
🏃
1:06:35Exhibit our lighting bug without hitting an assertion, before hitting the TransferPPS one
🏃
1:07:42Scrutinise our TransferPPS computation in GridRayCast()
📖
1:07:42Scrutinise our TransferPPS computation in GridRayCast()
📖
1:07:42Scrutinise our TransferPPS computation in GridRayCast()
📖
1:10:01Try to make GridRayCast() assert TransmissionLevel and HitRefColor with ValidateTexel()
1:10:01Try to make GridRayCast() assert TransmissionLevel and HitRefColor with ValidateTexel()
1:10:01Try to make GridRayCast() assert TransmissionLevel and HitRefColor with ValidateTexel()
1:10:50Scrutinise our TransmissionLevel and HitRefColor computations in GridRayCast()
📖
1:10:50Scrutinise our TransmissionLevel and HitRefColor computations in GridRayCast()
📖
1:10:50Scrutinise our TransmissionLevel and HitRefColor computations in GridRayCast()
📖
1:12:01Introduce an f32_4x version of ValidateTexel()
1:12:01Introduce an f32_4x version of ValidateTexel()
1:12:01Introduce an f32_4x version of ValidateTexel()
1:14:04Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:14:04Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:14:04Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:14:34Scrutinise our HitRefColor computations in GridRayCast()
📖
1:14:34Scrutinise our HitRefColor computations in GridRayCast()
📖
1:14:34Scrutinise our HitRefColor computations in GridRayCast()
📖
1:16:21Make GridRayCast() assert HitRefColor with ValidateTexel() upon initialisation
1:16:21Make GridRayCast() assert HitRefColor with ValidateTexel() upon initialisation
1:16:21Make GridRayCast() assert HitRefColor with ValidateTexel() upon initialisation
1:16:32Hit our TransferPPS ValidateTexel() assertion in GridRayCast() upon setting it
🏃
1:16:32Hit our TransferPPS ValidateTexel() assertion in GridRayCast() upon setting it
🏃
1:16:32Hit our TransferPPS ValidateTexel() assertion in GridRayCast() upon setting it
🏃
1:16:59Make GridRayCast() assert HitRefColor with ValidateTexel() upon setting TransferPPS
1:16:59Make GridRayCast() assert HitRefColor with ValidateTexel() upon setting TransferPPS
1:16:59Make GridRayCast() assert HitRefColor with ValidateTexel() upon setting TransferPPS
1:17:10Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:17:10Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:17:10Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()
🏃
1:17:24Scrutinise our HitRefColor usage in GridRayCast()
📖
1:17:24Scrutinise our HitRefColor usage in GridRayCast()
📖
1:17:24Scrutinise our HitRefColor usage in GridRayCast()
📖
1:18:15Make GridRayCast() assert Leaf.RefColor with ValidateTexel()
1:18:15Make GridRayCast() assert Leaf.RefColor with ValidateTexel()
1:18:15Make GridRayCast() assert Leaf.RefColor with ValidateTexel()
1:18:41Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridRayCast()
🏃
1:18:41Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridRayCast()
🏃
1:18:41Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridRayCast()
🏃
1:21:28Focus our lighting map validation on GridBuildSpatialPartition()
📖
1:21:28Focus our lighting map validation on GridBuildSpatialPartition()
📖
1:21:28Focus our lighting map validation on GridBuildSpatialPartition()
📖
1:23:51Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel()
1:23:51Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel()
1:23:51Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel()
1:25:20Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:25:20Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:25:20Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:25:23Make GridBuildSpatialPartition() clear the SpatialGridLeaves
1:25:23Make GridBuildSpatialPartition() clear the SpatialGridLeaves
1:25:23Make GridBuildSpatialPartition() clear the SpatialGridLeaves
1:25:59Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:25:59Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:25:59Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:26:06Fix parentheses of ZeroArray()
1:26:06Fix parentheses of ZeroArray()
1:26:06Fix parentheses of ZeroArray()
1:26:37Assert in GridBuildSpatialPartition() that we are in bounds
1:26:37Assert in GridBuildSpatialPartition() that we are in bounds
1:26:37Assert in GridBuildSpatialPartition() that we are in bounds
1:27:38Do not hit our bounds-checking assertion in GridBuildSpatialPartition()
🏃
1:27:38Do not hit our bounds-checking assertion in GridBuildSpatialPartition()
🏃
1:27:38Do not hit our bounds-checking assertion in GridBuildSpatialPartition()
🏃
1:27:41Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() upon initialisation
1:27:41Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() upon initialisation
1:27:41Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() upon initialisation
1:28:28Do not hit our Leaf.RefColor initialisation assertion in GridBuildSpatialPartition()
🏃
1:28:28Do not hit our Leaf.RefColor initialisation assertion in GridBuildSpatialPartition()
🏃
1:28:28Do not hit our Leaf.RefColor initialisation assertion in GridBuildSpatialPartition()
🏃
1:28:32Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() after fill-in
1:28:32Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() after fill-in
1:28:32Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() after fill-in
1:28:44Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after fill-in
🏃
1:28:44Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after fill-in
🏃
1:28:44Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after fill-in
🏃
1:28:48Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() around their setting
1:28:48Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() around their setting
1:28:48Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() around their setting
1:30:06Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after setting
🏃
1:30:06Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after setting
🏃
1:30:06Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after setting
🏃
1:30:51Make GridBuildSpatialPartition() assert Box->RefC with ValidateTexel()
1:30:51Make GridBuildSpatialPartition() assert Box->RefC with ValidateTexel()
1:30:51Make GridBuildSpatialPartition() assert Box->RefC with ValidateTexel()
1:31:28Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:31:28Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:31:28Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition()
🏃
1:32:20Focus our validation on PushCube(), PushOccluder() and PushLight()
1:32:20Focus our validation on PushCube(), PushOccluder() and PushLight()
1:32:20Focus our validation on PushCube(), PushOccluder() and PushLight()
1:35:57Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition(), but none of the ones upstream
🏃
1:35:57Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition(), but none of the ones upstream
🏃
1:35:57Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition(), but none of the ones upstream
🏃
1:38:15Scrutinise our upstream Box->RefC code
📖
1:38:15Scrutinise our upstream Box->RefC code
📖
1:38:15Scrutinise our upstream Box->RefC code
📖
1:41:42codeslasher handmade_hero You are missing an assert in PushOccluder()
🗪
1:41:42codeslasher handmade_hero You are missing an assert in PushOccluder()
🗪
1:41:42codeslasher handmade_hero You are missing an assert in PushOccluder()
🗪
1:41:47Make PushCube(), PushOccluder() and PushLight() assert Box->RefC with ValidateTexel()
1:41:47Make PushCube(), PushOccluder() and PushLight() assert Box->RefC with ValidateTexel()
1:41:47Make PushCube(), PushOccluder() and PushLight() assert Box->RefC with ValidateTexel()
1:42:20Hit our Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
1:42:20Hit our Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
1:42:20Hit our Hit our ValidateAtlas() assertion in BlockCopyAtlas()
🏃
1:42:32Hit our Box->RefC ValidateTexel() assertion in PushOccluder()
🏃
1:42:32Hit our Box->RefC ValidateTexel() assertion in PushOccluder()
🏃
1:42:32Hit our Box->RefC ValidateTexel() assertion in PushOccluder()
🏃
1:46:09#if 0 out the Tag_Ghost indexing into MatchVector.E in UpdateAndRenderEntities()
1:46:09#if 0 out the Tag_Ghost indexing into MatchVector.E in UpdateAndRenderEntities()
1:46:09#if 0 out the Tag_Ghost indexing into MatchVector.E in UpdateAndRenderEntities()
1:48:10Try to provoke our "lighting" bug
🏃
1:48:10Try to provoke our "lighting" bug
🏃
1:48:10Try to provoke our "lighting" bug
🏃
1:49:56#define ValidateTexel() as VALIDATE_TEXEL()
1:49:56#define ValidateTexel() as VALIDATE_TEXEL()
1:49:56#define ValidateTexel() as VALIDATE_TEXEL()
1:53:17Run successfully
🏃
1:53:17Run successfully
🏃
1:53:17Run successfully
🏃
1:53:29Re-enable multithreading
1:53:29Re-enable multithreading
1:53:29Re-enable multithreading
1:53:44Run successfully
🏃
1:53:44Run successfully
🏃
1:53:44Run successfully
🏃
1:56:17Reflect on our indexing bug, and our pincering method for debugging
🗩
1:56:17Reflect on our indexing bug, and our pincering method for debugging
🗩
1:56:17Reflect on our indexing bug, and our pincering method for debugging
🗩
1:57:25Make VALIDATE_TEXEL() self-assert, and #define ValidateAtlas() as VALIDATE_TEXEL_ATLAS()
1:57:25Make VALIDATE_TEXEL() self-assert, and #define ValidateAtlas() as VALIDATE_TEXEL_ATLAS()
1:57:25Make VALIDATE_TEXEL() self-assert, and #define ValidateAtlas() as VALIDATE_TEXEL_ATLAS()
1:59:33Run successfully
🏃
1:59:33Run successfully
🏃
1:59:33Run successfully
🏃
1:59:48#define out LIGHT_ATLAS_ASSERT()
1:59:48#define out LIGHT_ATLAS_ASSERT()
1:59:48#define out LIGHT_ATLAS_ASSERT()
1:59:53Run successfully
🏃
1:59:53Run successfully
🏃
1:59:53Run successfully
🏃
2:00:18Determine to improve the lighting filtering
🏃
2:00:18Determine to improve the lighting filtering
🏃
2:00:18Determine to improve the lighting filtering
🏃
2:00:48Compile and invoke hhsphere
🗹
2:00:48Compile and invoke hhsphere
🗹
2:00:48Compile and invoke hhsphere
🗹
2:03:05Rebuild and run the game
🏃
2:03:05Rebuild and run the game
🏃
2:03:05Rebuild and run the game
🏃
2:04:05Make UpdateLighting() decrease tUpdateBlend from 8/60 to 1/60
2:04:05Make UpdateLighting() decrease tUpdateBlend from 8/60 to 1/60
2:04:05Make UpdateLighting() decrease tUpdateBlend from 8/60 to 1/60
2:04:48Our lighting is smoother but slower to update
🏃
2:04:48Our lighting is smoother but slower to update
🏃
2:04:48Our lighting is smoother but slower to update
🏃
2:05:23Make UpdateLighting() increase tUpdateBlend from 1/60 to 4/60
2:05:23Make UpdateLighting() increase tUpdateBlend from 1/60 to 4/60
2:05:23Make UpdateLighting() increase tUpdateBlend from 1/60 to 4/60
2:05:37Our lighting is quicker to update, but doesn't propagate evenly
🏃
2:05:37Our lighting is quicker to update, but doesn't propagate evenly
🏃
2:05:37Our lighting is quicker to update, but doesn't propagate evenly
🏃
2:06:22Q&A
🗩
2:06:22Q&A
🗩
2:06:22Q&A
🗩
2:06:37mindmark42 Q: Is it only me or does the lighting seem brighter with the blendv_ps fix?
🗪
2:06:37mindmark42 Q: Is it only me or does the lighting seem brighter with the blendv_ps fix?
🗪
2:06:37mindmark42 Q: Is it only me or does the lighting seem brighter with the blendv_ps fix?
🗪
2:07:34piggybankstudios Q: Is there a way to test my GLSL shader compilation success / failure on other GPUs without actually having to buy a bunch of GPUs myself?
🗪
2:07:34piggybankstudios Q: Is there a way to test my GLSL shader compilation success / failure on other GPUs without actually having to buy a bunch of GPUs myself?
🗪
2:07:34piggybankstudios Q: Is there a way to test my GLSL shader compilation success / failure on other GPUs without actually having to buy a bunch of GPUs myself?
🗪
2:08:25x13pixels Whoa. Godbolt for shaders
🗪
2:08:25x13pixels Whoa. Godbolt for shaders
🗪
2:08:25x13pixels Whoa. Godbolt for shaders
🗪
2:09:41mmozeiko There is Shader Playground7 but that's only for shader libraries (parser / validation / some codegen), not using actual drivers to compile
🗪
2:09:41mmozeiko There is Shader Playground7 but that's only for shader libraries (parser / validation / some codegen), not using actual drivers to compile
🗪
2:09:41mmozeiko There is Shader Playground7 but that's only for shader libraries (parser / validation / some codegen), not using actual drivers to compile
🗪
2:10:09lederr (Viewbot #420) MrDestructoid Hello Mr. Teapot, I am here to "view" your channel as was previously discussed
🗪
2:10:09lederr (Viewbot #420) MrDestructoid Hello Mr. Teapot, I am here to "view" your channel as was previously discussed
🗪
2:10:09lederr (Viewbot #420) MrDestructoid Hello Mr. Teapot, I am here to "view" your channel as was previously discussed
🗪
2:10:26Consider lighting improvements
🗩
2:10:26Consider lighting improvements
🗩
2:10:26Consider lighting improvements
🗩
2:11:46chepubelie Q: Are you planning to release Star Code Galaxy8 this year? Will this project be like a Handmade Hero where you make usage code first and everything from scratch?
🗪
2:11:46chepubelie Q: Are you planning to release Star Code Galaxy8 this year? Will this project be like a Handmade Hero where you make usage code first and everything from scratch?
🗪
2:11:46chepubelie Q: Are you planning to release Star Code Galaxy8 this year? Will this project be like a Handmade Hero where you make usage code first and everything from scratch?
🗪
2:12:251diogosantana Are you in a tent?
🗪
2:12:251diogosantana Are you in a tent?
🗪
2:12:251diogosantana Are you in a tent?
🗪
2:12:38tarriest_python Q: Anyone know what browser Casey is using? I don't recognise it
🗪
2:12:38tarriest_python Q: Anyone know what browser Casey is using? I don't recognise it
🗪
2:12:38tarriest_python Q: Anyone know what browser Casey is using? I don't recognise it
🗪
2:12:54Thank you for joining
🗩
2:12:54Thank you for joining
🗩
2:12:54Thank you for joining
🗩