Handmade Hero»Episode Guide
Providing Platform File Information to the Game
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
1:18Determine to enable the PNG loader to use memory from an arena
🗩
1:18Determine to enable the PNG loader to use memory from an arena
🗩
1:18Determine to enable the PNG loader to use memory from an arena
🗩
5:16Switch the PNG loader over to use a memory_arena
5:16Switch the PNG loader over to use a memory_arena
5:16Switch the PNG loader over to use a memory_arena
17:00Note the need to emulate a platform layer in test_png.cpp
🗩
17:00Note the need to emulate a platform layer in test_png.cpp
🗩
17:00Note the need to emulate a platform layer in test_png.cpp
🗩
18:46Initialise a platform_api and introduce CRTAllocateMemory and CRTDeallocateMemory callbacks in test_png.cpp
18:46Initialise a platform_api and introduce CRTAllocateMemory and CRTDeallocateMemory callbacks in test_png.cpp
18:46Initialise a platform_api and introduce CRTAllocateMemory and CRTDeallocateMemory callbacks in test_png.cpp
23:36Run it to see that it still works
🏃
23:36Run it to see that it still works
🏃
23:36Run it to see that it still works
🏃
24:08Begin to implement Outf_() based on our existing FormatString()
24:08Begin to implement Outf_() based on our existing FormatString()
24:08Begin to implement Outf_() based on our existing FormatString()
27:11A few thoughts on null-terminated strings
🗩
27:11A few thoughts on null-terminated strings
🗩
27:11A few thoughts on null-terminated strings
🗩
29:21Proceed with Outf_() pushing non null-terminated strings into the error stream
29:21Proceed with Outf_() pushing non null-terminated strings into the error stream
29:21Proceed with Outf_() pushing non null-terminated strings into the error stream
32:41Run it to see no errors, but busted info printout
🏃
32:41Run it to see no errors, but busted info printout
🏃
32:41Run it to see no errors, but busted info printout
🏃
33:24Change AppendChunk() to return a stream_chunk for Outf_() to print the File and LineNumber
33:24Change AppendChunk() to return a stream_chunk for Outf_() to print the File and LineNumber
33:24Change AppendChunk() to return a stream_chunk for Outf_() to print the File and LineNumber
34:29Run it to see our complete info printout
🏃
34:29Run it to see our complete info printout
🏃
34:29Run it to see our complete info printout
🏃
36:06#include "handmade_png.h" and "handmade_stream.h" in the game
36:06#include "handmade_png.h" and "handmade_stream.h" in the game
36:06#include "handmade_png.h" and "handmade_stream.h" in the game
37:58Determine to augment the asset storage format with the concept of on-demand asset addition
🗩
37:58Determine to augment the asset storage format with the concept of on-demand asset addition
🗩
37:58Determine to augment the asset storage format with the concept of on-demand asset addition
🗩
41:42Check out the current asset system with a view to enabling it to load PNG spritesheets into permanent storage, and expanding the platform_api with information on when that PNG loading needs to happen
📖
41:42Check out the current asset system with a view to enabling it to load PNG spritesheets into permanent storage, and expanding the platform_api with information on when that PNG loading needs to happen
📖
41:42Check out the current asset system with a view to enabling it to load PNG spritesheets into permanent storage, and expanding the platform_api with information on when that PNG loading needs to happen
📖
44:41Determine to watch a directory for changes to PNG files
🗩
44:41Determine to watch a directory for changes to PNG files
🗩
44:41Determine to watch a directory for changes to PNG files
🗩
47:49Add a PlatformFileType_PNG and PlatformFileType_WAV for Win32GetAllFilesOfTypeBegin to understand
47:49Add a PlatformFileType_PNG and PlatformFileType_WAV for Win32GetAllFilesOfTypeBegin to understand
47:49Add a PlatformFileType_PNG and PlatformFileType_WAV for Win32GetAllFilesOfTypeBegin to understand
48:45Check out what file information the asset loading system currently contains
📖
48:45Check out what file information the asset loading system currently contains
📖
48:45Check out what file information the asset loading system currently contains
📖
51:10Introduce platform_file_info struct containing the FileDate and BaseName
51:10Introduce platform_file_info struct containing the FileDate and BaseName
51:10Introduce platform_file_info struct containing the FileDate and BaseName
54:10Consider the need for additional information not included in the PNG files
🗩
54:10Consider the need for additional information not included in the PNG files
🗩
54:10Consider the need for additional information not included in the PNG files
🗩
57:22Augment platform_file_group with an array of platform_file_info, and make PLATFORM_OPEN_FILE take an Index to open a particular file
57:22Augment platform_file_group with an array of platform_file_info, and make PLATFORM_OPEN_FILE take an Index to open a particular file
57:22Augment platform_file_group with an array of platform_file_info, and make PLATFORM_OPEN_FILE take an Index to open a particular file
59:43Consider how the file info will be gathered and used in the asset loading system, and the directory structure of our assets
🗩
59:43Consider how the file info will be gathered and used in the asset loading system, and the directory structure of our assets
🗩
59:43Consider how the file info will be gathered and used in the asset loading system, and the directory structure of our assets
🗩
1:02:51Establish the directory structure from where Win32GetAllFilesOfTypeBegin gets files
1:02:51Establish the directory structure from where Win32GetAllFilesOfTypeBegin gets files
1:02:51Establish the directory structure from where Win32GetAllFilesOfTypeBegin gets files
1:06:20Remove win32_platform_file_handle and change win32_platform_file_group to only contain a memory_arena for Win32GetAllFilesOfTypeBegin to store a linked list of platform_file_info1
1:06:20Remove win32_platform_file_handle and change win32_platform_file_group to only contain a memory_arena for Win32GetAllFilesOfTypeBegin to store a linked list of platform_file_info1
1:06:20Remove win32_platform_file_handle and change win32_platform_file_group to only contain a memory_arena for Win32GetAllFilesOfTypeBegin to store a linked list of platform_file_info1
1:16:47Consult MSDN for a filename parsing function
📖
1:16:47Consult MSDN for a filename parsing function
📖
1:16:47Consult MSDN for a filename parsing function
📖
1:21:55Enable Win32GetAllFilesOfTypeBegin to pull out the BaseName from the file path2 and Win32GetAllFilesOfTypeEnd to Clear the memory
1:21:55Enable Win32GetAllFilesOfTypeBegin to pull out the BaseName from the file path2 and Win32GetAllFilesOfTypeEnd to Clear the memory
1:21:55Enable Win32GetAllFilesOfTypeBegin to pull out the BaseName from the file path2 and Win32GetAllFilesOfTypeEnd to Clear the memory
1:26:39Trim down Win32OpenFile, preventing it from allocating memory for the Win32Handle
1:26:39Trim down Win32OpenFile, preventing it from allocating memory for the Win32Handle
1:26:39Trim down Win32OpenFile, preventing it from allocating memory for the Win32Handle
1:31:12Change Win32GetAllFilesOfTypeEnd and Win32GetAllFilesOfTypeBegin to use wchar_t characters
1:31:12Change Win32GetAllFilesOfTypeEnd and Win32GetAllFilesOfTypeBegin to use wchar_t characters
1:31:12Change Win32GetAllFilesOfTypeEnd and Win32GetAllFilesOfTypeBegin to use wchar_t characters
1:34:43Search MSDN for a UTF-16 to ASCII converter
📖
1:34:43Search MSDN for a UTF-16 to ASCII converter
📖
1:34:43Search MSDN for a UTF-16 to ASCII converter
📖
1:36:13Read MSDN on the WideCharToMultiByte function3
📖
1:36:13Read MSDN on the WideCharToMultiByte function3
📖
1:36:13Read MSDN on the WideCharToMultiByte function3
📖
1:36:41Enable Win32GetAllFilesOfTypeBegin to pass ASCII base filenames to the game using WideCharToMultiByte()
1:36:41Enable Win32GetAllFilesOfTypeBegin to pass ASCII base filenames to the game using WideCharToMultiByte()
1:36:41Enable Win32GetAllFilesOfTypeBegin to pass ASCII base filenames to the game using WideCharToMultiByte()
1:41:17Enable Win32OpenFile to open our file handle, and implement Win32CloseFile
1:41:17Enable Win32OpenFile to open our file handle, and implement Win32CloseFile
1:41:17Enable Win32OpenFile to open our file handle, and implement Win32CloseFile
1:45:09Enable Win32GetAllFilesOfTypeBegin to fill out all the platform_file_info4 and fix up compile errors
1:45:09Enable Win32GetAllFilesOfTypeBegin to fill out all the platform_file_info4 and fix up compile errors
1:45:09Enable Win32GetAllFilesOfTypeBegin to fill out all the platform_file_info4 and fix up compile errors
1:49:07Step through Win32GetAllFilesOfTypeBegin to watch it fill out the Info
🏃
1:49:07Step through Win32GetAllFilesOfTypeBegin to watch it fill out the Info
🏃
1:49:07Step through Win32GetAllFilesOfTypeBegin to watch it fill out the Info
🏃
1:53:18Begin to enable Win32GetAllFilesOfTypeBegin to include the file path stem and extension in the info
1:53:18Begin to enable Win32GetAllFilesOfTypeBegin to include the file path stem and extension in the info
1:53:18Begin to enable Win32GetAllFilesOfTypeBegin to include the file path stem and extension in the info
1:56:49“If wishes were horses... we'd all be at the airport”α
🗩
1:56:49“If wishes were horses... we'd all be at the airport”α
🗩
1:56:49“If wishes were horses... we'd all be at the airport”α
🗩
1:56:57Continue enabling Win32GetAllFilesOfTypeBegin to fill out the file path stem and extension, introducing CopyArray()
1:56:57Continue enabling Win32GetAllFilesOfTypeBegin to fill out the file path stem and extension, introducing CopyArray()
1:56:57Continue enabling Win32GetAllFilesOfTypeBegin to fill out the file path stem and extension, introducing CopyArray()
2:01:17Jump into Win32GetAllFilesOfTypeBegin and through Win32OpenFile until hitting the InvalidCodePath in BeginWorldChange()
🏃
2:01:17Jump into Win32GetAllFilesOfTypeBegin and through Win32OpenFile until hitting the InvalidCodePath in BeginWorldChange()
🏃
2:01:17Jump into Win32GetAllFilesOfTypeBegin and through Win32OpenFile until hitting the InvalidCodePath in BeginWorldChange()
🏃
2:04:58Run the game in -O2 to determine that that part of the system is ready to do dynamic loading
🏃
2:04:58Run the game in -O2 to determine that that part of the system is ready to do dynamic loading
🏃
2:04:58Run the game in -O2 to determine that that part of the system is ready to do dynamic loading
🏃
2:05:37Q&A
🗩
2:05:37Q&A
🗩
2:05:37Q&A
🗩
2:06:10Rounin Q: Where will the assets be stored when they're not reloaded from the PNGs, WAVs etc?
🗪
2:06:10Rounin Q: Where will the assets be stored when they're not reloaded from the PNGs, WAVs etc?
🗪
2:06:10Rounin Q: Where will the assets be stored when they're not reloaded from the PNGs, WAVs etc?
🗪
2:07:28sopvop Q: I thought asset system allocates based on headers read from asset files. That means you can replace resources with dynamic reload but not add new ones. And you can't add tags. Or am I missing something?
🗪
2:07:28sopvop Q: I thought asset system allocates based on headers read from asset files. That means you can replace resources with dynamic reload but not add new ones. And you can't add tags. Or am I missing something?
🗪
2:07:28sopvop Q: I thought asset system allocates based on headers read from asset files. That means you can replace resources with dynamic reload but not add new ones. And you can't add tags. Or am I missing something?
🗪
2:08:01uniquealphanumerics Q: How will we handle the switch between .hha and loose asset files?
🗪
2:08:01uniquealphanumerics Q: How will we handle the switch between .hha and loose asset files?
🗪
2:08:01uniquealphanumerics Q: How will we handle the switch between .hha and loose asset files?
🗪
2:08:27frostyninja Q: For future reference, since you might be looking at it in the next few episodes - GetFileAttributesEx() with a GetFileExInfoStandard flag comes out the fastest out of all the ways to get the file size from the win32 API; vs GetFileSize and FindFirstFile etc.
🗪
2:08:27frostyninja Q: For future reference, since you might be looking at it in the next few episodes - GetFileAttributesEx() with a GetFileExInfoStandard flag comes out the fastest out of all the ways to get the file size from the win32 API; vs GetFileSize and FindFirstFile etc.
🗪
2:08:27frostyninja Q: For future reference, since you might be looking at it in the next few episodes - GetFileAttributesEx() with a GetFileExInfoStandard flag comes out the fastest out of all the ways to get the file size from the win32 API; vs GetFileSize and FindFirstFile etc.
🗪
2:08:59tavqua Q: Will you do my comp sci homework for me?
🗪
2:08:59tavqua Q: Will you do my comp sci homework for me?
🗪
2:08:59tavqua Q: Will you do my comp sci homework for me?
🗪
2:09:05frostyninja Q: Sorry, meant file mod time
🗪
2:09:05frostyninja Q: Sorry, meant file mod time
🗪
2:09:05frostyninja Q: Sorry, meant file mod time
🗪
2:09:54puremouron Q: Do you intend to allow hot reload of things like metadata (hotspots, etc.). You sort of mentioned it but I didn't follow what you were thinking
🗪
2:09:54puremouron Q: Do you intend to allow hot reload of things like metadata (hotspots, etc.). You sort of mentioned it but I didn't follow what you were thinking
🗪
2:09:54puremouron Q: Do you intend to allow hot reload of things like metadata (hotspots, etc.). You sort of mentioned it but I didn't follow what you were thinking
🗪
2:10:20dantemort Q: Which language is better in game industry? C, C++, or even C#? So much way to programming, it's confusing
🗪
2:10:20dantemort Q: Which language is better in game industry? C, C++, or even C#? So much way to programming, it's confusing
🗪
2:10:20dantemort Q: Which language is better in game industry? C, C++, or even C#? So much way to programming, it's confusing
🗪
2:11:35vaualbus Q: In my system I have a thing that you can register a file name and when it changes a callback function is invoked, then for every file I have to load I add an entry in that table. What do you think of add callbacks?
🗪
2:11:35vaualbus Q: In my system I have a thing that you can register a file name and when it changes a callback function is invoked, then for every file I have to load I add an entry in that table. What do you think of add callbacks?
🗪
2:11:35vaualbus Q: In my system I have a thing that you can register a file name and when it changes a callback function is invoked, then for every file I have to load I add an entry in that table. What do you think of add callbacks?
🗪
2:12:28puremouron Q: If the artist changes the art, then the hotspot might change, so it could be tricky
🗪
2:12:28puremouron Q: If the artist changes the art, then the hotspot might change, so it could be tricky
🗪
2:12:28puremouron Q: If the artist changes the art, then the hotspot might change, so it could be tricky
🗪
2:12:48sopvop Q: How often people in chat suggest you to Rewrite In Rust?
🗪
2:12:48sopvop Q: How often people in chat suggest you to Rewrite In Rust?
🗪
2:12:48sopvop Q: How often people in chat suggest you to Rewrite In Rust?
🗪
2:14:49uniquealphanumerics Q: IO completion ports vs asset loading thread?
🗪
2:14:49uniquealphanumerics Q: IO completion ports vs asset loading thread?
🗪
2:14:49uniquealphanumerics Q: IO completion ports vs asset loading thread?
🗪
2:16:45mrjalapenobomber Q: A little off-topic: There's been a lot of talk about the deprecation of OpenGL and using a lower level API to talk to the GPU. My question is, does Nvidia's CUDA satisfy this lower level API requirements for games, in your opinion?
🗪
2:16:45mrjalapenobomber Q: A little off-topic: There's been a lot of talk about the deprecation of OpenGL and using a lower level API to talk to the GPU. My question is, does Nvidia's CUDA satisfy this lower level API requirements for games, in your opinion?
🗪
2:16:45mrjalapenobomber Q: A little off-topic: There's been a lot of talk about the deprecation of OpenGL and using a lower level API to talk to the GPU. My question is, does Nvidia's CUDA satisfy this lower level API requirements for games, in your opinion?
🗪
2:18:28Ask Miblo how you ban people from HexChat
🗩
2:18:28Ask Miblo how you ban people from HexChat
🗩
2:18:28Ask Miblo how you ban people from HexChat
🗩
2:19:12kurufu Use .b <name>
🗪
2:19:12kurufu Use .b <name>
🗪
2:19:12kurufu Use .b <name>
🗪
2:19:54Brian Q: Forgive me for I did not watch the entire episode, but instead of iterating over the entire directory, could you not use functions like ReadDirectoryChangesW and FindFirstChangeNotificationW? Or will the number of files be so small and this is for debug only that not worth it?5
🗪
2:19:54Brian Q: Forgive me for I did not watch the entire episode, but instead of iterating over the entire directory, could you not use functions like ReadDirectoryChangesW and FindFirstChangeNotificationW? Or will the number of files be so small and this is for debug only that not worth it?5
🗪
2:19:54Brian Q: Forgive me for I did not watch the entire episode, but instead of iterating over the entire directory, could you not use functions like ReadDirectoryChangesW and FindFirstChangeNotificationW? Or will the number of files be so small and this is for debug only that not worth it?5
🗪
2:25:43sopvop Q: Would it be good idea to abstract render push buffer? That way you can use Vulkan command buffers or whatever Metal has with less memory copying
🗪
2:25:43sopvop Q: Would it be good idea to abstract render push buffer? That way you can use Vulkan command buffers or whatever Metal has with less memory copying
🗪
2:25:43sopvop Q: Would it be good idea to abstract render push buffer? That way you can use Vulkan command buffers or whatever Metal has with less memory copying
🗪
2:26:26master_potato_ Q: More hardware related: Will your code have to be different when coding for different video cards (i.e. AMD vs Nvidia)?
🗪
2:26:26master_potato_ Q: More hardware related: Will your code have to be different when coding for different video cards (i.e. AMD vs Nvidia)?
🗪
2:26:26master_potato_ Q: More hardware related: Will your code have to be different when coding for different video cards (i.e. AMD vs Nvidia)?
🗪
2:27:54vaualbus Q: Why sometimes do the MSDN functions require buffers to be aligned?
🗪
2:27:54vaualbus Q: Why sometimes do the MSDN functions require buffers to be aligned?
🗪
2:27:54vaualbus Q: Why sometimes do the MSDN functions require buffers to be aligned?
🗪
2:29:54That's it, with a mention of the Watch page6 and a glimpse into the future moving PNG files through a runtime pipeline into the .hha files
🗩
2:29:54That's it, with a mention of the Watch page6 and a glimpse into the future moving PNG files through a runtime pipeline into the .hha files
🗩
2:29:54That's it, with a mention of the Watch page6 and a glimpse into the future moving PNG files through a runtime pipeline into the .hha files
🗩