cinera_handmade.network/cmuratori/hero/code/code666.hmml

99 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[video output=day666 member=cmuratori stream_platform=twitch stream_username=molly_rocket project=code title="Entity Packing and Unpacking" vod_platform=youtube id=u0N9y5wVxpk annotator=Miblo]
[0:00][Recap and set the stage for the day continuing our :"entity system" simplification][:speech]
[1:53][Recap our sim_region and entity ID removal considerations][:"data structure" :"entity system" :research]
[5:19][Consider simplifying the UpdatableBounds and BrainHash out of the sim_region struct][:"data structure" :"entity system" :research]
[6:56][Remove sim_region, entity_hash and brain_hash, and GetHashFromID()][:"data structure" :"entity system"]
[7:39][Reacquaint ourselves with our IterateAllEntities() call sites][:"entity system" :research]
[9:06][Clear out handmade_sim_region.h][:"entity system"]
[9:24][Remove AddBrain(), AllocateEntityID() and MarkOccupied()][:"entity system"]
[10:05][Move MarkBit() and IsEmpty() from handmade_sim_region.cpp to handmade.cpp][:"entity system"]
[10:43][Remove GetHashFromID() and GetEntityByID_()][:"entity system"]
[11:00][Move EntityOverlapsRectangle() and EntityOverlapsEntity() from handmade_sim_region.cpp to handmade_entity.cpp][:collision :"entity system"]
[11:44][Remove GetOrAddBrain(), AddEntityToHash(), MapIntoSimSpace() and RegisterEntity()][:"entity system"]
[11:59][Move BeginWorldChange(), CreateEntity() and DeleteEntity() from handmade_sim_region.cpp to handmade_world.cpp][:"entity system"]
[13:54][Move IsRoom() from handmade_sim_region.cpp to handmade_entity.cpp][:"entity system"]
[14:14][Remove RegisterEntity()][:"entity system"]
[14:35][Move TileIsOpen(), TileIsOccupied(), TransactionalOccupy(), OverlappingEntitiesExist(), closest_entity, GetClosestEntityWithBrain(), GetClosestEmptyTileTo(), FindRandomOpenTile() and FindAdjacentOpenTile() from handmade_sim_region.cpp to handmade_world.cpp][:"entity system"]
[15:14][Move the entity iterator FindNextEntity(), IterateAllEntities() and Advance() from handmade_sim_region.cpp to handmade_world.cpp][:"entity system"]
[15:33][Move UpdateCameraForEntityMovement() from handmade_sim_region.cpp to handmade_world_mode.cpp][:camera :"entity system"]
[15:45][Reflect on our sim_region removal][:"entity system" :speech]
[16:00][Delete handmade_sim_region.{cpp,h}][:admin :"entity system"]
[16:38][Remove the late sim_region from the entity code, moving DeleteEntity() from handmade_world.cpp to handmade_entity.cpp][:"entity system"]
[18:56][Perform the easy removals of sim_region from UpdateAndRenderEntities()][:"entity system"]
[19:43][Note our need to replace the final use of sim_region in UpdateAndRenderEntities() with a pre-pass gathering all local entities][:"entity system" :research]
[20:20][Note our new need to move entities between spatial partition nodes][:"entity system" :research]
[21:46][Remove the forward-declaration of FillUnpackedEntity() from handmade_entity.h][:"entity system"]
[22:03][Reacquaint ourselves with AdvanceEntityStats()][:"entity system" :research]
[22:16][Lament our lack of sleep and need for caffeinated coffee and / or sugar][:health :speech]
[23:03][Consider the discontinuity arising from distant, active entities wanting to interact with inactive entities][:"entity system" :research]
[26:26][Enable UpdateAndRenderEntities() to gather all local entities, making it take the world and a rectangle3, not a sim_region][:"data structure" :"entity system"]
[27:09][Turn off phone][:admin]
[27:23][Introduce our regional entity iterator: IterateEntityInBounds()][:"entity system"]
[29:28][Consider fixed- vs floating-point precision for our entity iteration][:"entity system" :research]
[30:39][Change UpdateAndRenderEntities() to take a world_position and v2 Radius, not a rectangle3][:"data structure" :"entity system"]
[31:19][Introduce world_region for UpdateAndRenderEntities() to take][:"data structure" :"entity system"]
[31:52][Rename IterateEntitiesInBounds() to IterateEntitiesIn(), taking a world_region][:"entity system"]
[32:48][Reacquaint ourselves with world_sim][:"data structure" :"entity system" :research]
[36:17][Remove world_sim, and the sim_region * from world_generator][:"data structure" :"entity system"]
[36:44][Unify AddEntity() as an overload of CreateEntity(), both taking a world and world_position, not a sim_region][:"entity system"]
[40:04][Move the CreateEntity() functions from handmade_entity.cpp to handmade_world.cpp][:"entity system"]
[40:17][Make CreateEntity() pass the world and world_position, not the late sim region's World, to AcquireUnpackedEntitySlot(), removing AddEntity()][:"entity system" :memory]
[40:51][Embark on setting up the world storage][:"entity system" :memory :research]
[41:37][Switch entity_block_storage to be a union][:"data structure" :"entity system"]
[41:46][Describe packed_entity_block and unpacked_entity_block][:"entity system" :research]
[43:51][Structure ChunkX and ChunkY as a v2s Chunk in world_position][:"data structure" :"entity system"]
[44:18][Consider relieving entities of storing their containing chunk information][:"data structure" :"entity system" :research]
[45:29][Remove NullPosition() and the world_position overload of IsValid()][:"entity system"]
[46:17][Fix up accesses of our structured Chunk in world_position][:"data structure" :"entity system"]
[47:17][Reacquaint ourselves with the TILE_CHUNK_SAFE_MARGIN][:"entity system" :research]
[49:25][Remove TILES_PER_CHUNK and reposition TILE_CHUNK_SAFE_MARGIN][:"entity system"]
[50:02][@pfizzyenator][I believe it was arbitrary][:"entity system"]
[50:38][Consider the TILE_CHUNK_SAFE_MARGIN][:"entity system" :research]
[51:19][Reduce TILE_CHUNK_SAFE_MARGIN from INT32_MAX / 64 to INT32_MAX - 1024][:"entity system"]
[53:21][Reacquaint ourselves with the bulk allocation of world chunks][:"entity system" :memory]
[56:04][Enable GetWorldChunk() to allocate :memory for the chunks, structuring the ChunkX and ChunkY as a Chunk in world_chunk][:"data structure" :"entity system" :memory]
[59:31][Remove RemoveWorldChunk()][:"entity system"]
[1:00:50][Remove stale code from CreateWorld()][:"entity system"]
[1:02:21][Update accesses of the world_position Chunk in MapIntoChunkSpace()][:"entity system"]
[1:02:35][Change the world_position overload of Subtract() to operate in fixed-point][:"entity system" :mathematics]
[1:04:30][Consider our world-level multithreading ticketing scheme][:"entity system" :research :threading]
[1:06:36][Remove the ticket_mutex from the world][:"entity system" :research :threading]
[1:07:30][Thoughts on humidifiers][:health :speech]
[1:08:29][Note the existence of MoveEntityToNewPosition()][:"entity system" :research]
[1:09:03][Consider the relative difficulty of determining which chunks to pack][:"entity system" :research]
[1:10:29][Consider maintaining rectangles bounding all unpacked entities, resizing as we pack distant entities][:"entity system" :research]
[1:14:24][Augment world with a rectangle2i UnpackedRegions array][:"data structure" :"entity system"]
[1:16:05][Mentally sketch out the least recently used chunk packing scheme][:"entity system" :research]
[1:17:45][Reacquaint ourselves with UseChunkSpace()][:"entity system" :memory :research]
[1:19:25][Inline ClearWorldEntityBlock() in UseChunkSpace()][:"entity system" :memory]
[1:20:45][Introduce EnsureFreeBlockExists() for UseChunkSpace() to call, renaming the latter to UsePackedSpace()][:"entity system" :memory]
[1:22:08][Unify the sizes of packed_entity_block and unpacked_entity_block][:"data structure" :"entity system"]
[1:25:57][Yearn to programmatically size struct members][:"data structure" :language :rant]
[1:26:43][Update accesses via packed_entity_block_header, and make UsePackedSpace() use Chunk->FirstPacked][:"data structure" :"entity system" :memory]
[1:27:54][Image Jai to support relative sizing of struct members][:"data structure" :language :speech]
[1:29:00][@infinite_entropy_][Isn't [@j_blow he] shooting guns today?]
[1:29:19][Update accesses via packed_entity_block_header][:"data structure" :"entity system" :memory]
[1:29:37][Unify packed_entity_block and unpacked_entity_block as a generic entity_block, splitting HasRoomFor() out as HasRoomForPackedBytes() and HasRoomForUnpackedEntityCount()][:"data structure" :"entity system" :memory]
[1:32:50][Update EnsureFreeBlockExists() and UsePackedSpace() to use our new entity_block][:"entity system" :memory]
[1:34:21][Respecify UseChunkSpace() as a world_position overload of UsePackedSpace()][:"entity system" :memory]
[1:35:15][Simplify world_chunk *Old out of AddToFreeList()][:"entity system" :memory]
[1:37:02][Consider doing UsePackedSpace() inline in EnsureChunkIsPacked()][:"entity system" :memory :research]
[1:40:18][Remove both overloads of UsePackedSpace(), and inline the world_chunk one in EnsureChunkIsPacked()][:"entity system" :memory]
[1:41:28][Determine to make EnsureChunkIsPacked() loop over each unpacked chunk][:"entity system" :research]
[1:42:59][Make EnsureChunkIsPacked() loop over each unpacked chunk, packing the entities and discarding their blocks][:"entity system"]
[1:46:18][Implement EnsureChunkIsUnpacked() based on EnsureChunkIsPacked(), introducing ChunkIsValid()][:"entity system"]
[1:51:48][Consider distinguishing between the creation of an entity in an unpacked chunk, and in one in the process of being unpacked][:"entity system" :research]
[1:53:31][@staythirsty90][Hey, I'm thinking it through!]
[1:53:37][Finish implementing EnsureChunkIsUnpacked()][:"entity system"]
[1:55:10][Introduce UseBlockSpace(), respecifying entity_block in terms of a UsedByteCount][:"data structure" :"entity system"]
[2:02:51][Simplify EnsureChunkIsPacked() to use UseBlockSpace()][:"entity system"]
[2:04:23][Update CreateEntity() to use GetWorldChunk(), EnsureChunkIsUnpacked() and UseBlockSpace()][:"entity system"]
[2:06:44][Glimpse into the future working on entity iteration][:"entity system" :speech]
[2:07:04][Reorganise CreateEntity() above the entity iteration code][:"entity system"]
[2:07:36][Call it there with thoughts on deleting and tightening code, and a plug of Molly Rocket's 25% Off Everything sale[ref
author="Molly Rocket"
title="Holiday Sale: 25% Off Everything We Make!"
publisher=YouTube
url=https://www.youtube.com/watch?v=HI0IALE2g-M]][:speech]
[/video]