[video output=day470 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Separating the Renderer Completely (Part 1)" vod_platform=youtube id=q6VHxmGoAuc annotator=Miblo]
[0:00][][:speech][quote 624]
[0:12][Set up for the special two-stream day separating out and finalising the renderer for use in a new project][:api :speech]
[4:44][Determine to perform Snuffleupagus-Oriented Programming, creating our dream sample program to drive :API development][:speech]
[6:26][Add a renderer test bed compilation line to build.bat][:admin]
[8:34][Create win32_renderer_test.cpp as a trimmed down version of [~hero Handmade Hero]'s Windows :"platform layer"[ref
    site=MSDN
    page="WinMain entry point"
    url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559.aspx]]
[19:43][Create handmade_types.h, replacing global_variable with global][:language]
[24:10][:Run the game just as normal]
[24:18][Set up new win32_renderer_test project][:admin]
[27:51][:Run Handmade Hero Renderer Test to see nothing happen, as expected]
[28:04][Incorporate a trimmed down Win32ProcessPendingMessages() in to win32_renderer_test.cpp][:"platform layer"]
[29:22][:Run the Renderer Test and successfully resize and close the window][:"platform layer"]
[29:36][Create win32_handmade_opengl.cpp to consolidate all our OpenGL code][:hardware :rendering :"platform layer"]
[39:11][Temporarily make win32_renderer_test.cpp use stdio.h string functions in place of the game's custom ones[ref
    site=MSDN
    page="sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l"
    url=https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx]][:"string manipulation"]
[43:16][Continue to consolidate our types and OpenGL code][:hardware :language :rendering :"platform layer"]
[48:18][Include handmade_math.h and handmade_intrinsics.h in win32_renderer_test.cpp][:admin]
[53:05][Create handmade_software_renderer.cpp to contain all the software renderer code][:admin]
[56:33][Rename our render files in a more organised fashion][:admin]
[58:36][Merge handmade_render.{cpp,h} and handmade_render_group.{cpp,h} into handmade_renderer.{cpp,h}][:admin]
[1:05:09][:Run the game okay]
[1:05:26][Pull out the parts of the renderer that are wedded to the :"platform layer"]
[1:11:51][Temporarily make win32_renderer_test.cpp use further stdio.h string functions in place of the game's custom ones[ref
    site=MSDN
    page="isspace, iswspace, _isspace_l, _iswspace_l"
    url=https://msdn.microsoft.com/en-us/library/y13z34da.aspx]][:"string manipulation"]
[1:16:39][Consider cleaning up the lighting box data][:"platform layer"]
[1:21:52][Return from OBS crash][:admin :speech]
[1:22:09][Move the LightBoxes from game_render_commands to render_group and relieve the operating system of allocating them for us][:memory :"platform layer"]
[1:31:43][Prevent PushLighting() from being called twice, also moving handmade_render.{cpp,h} and handmade_render_group.{cpp,h} into the "retired" directory][:admin :memory]
[1:35:12][:Run the game to see the :lighting working just fine][:rendering]
[1:35:48][Determine to generalise texture management][:api :rendering :speech]
[1:37:29][Change win32_renderer_test.cpp to be OpenGL only][:hardware :rendering]
[1:41:04][Set up to test the OpenGL :memory allocation][:speech]
[1:42:32][Enable win32_renderer_test.cpp to allocate OpenGL buffers][:memory]
[1:46:16][Step through win32_renderer_test.cpp to see that all is okay][:hardware :rendering :run]
[1:49:45][Make win32_renderer_test.cpp call PushFullClear() and hit the situation where we need to talk to the renderer][:hardware :rendering]
[1:52:42][Q&A][:speech]
[1:53:24][@jim0_o][Q: Are you going to check the recording that ended in an app crash?]
[1:54:17][@genos3][Q: Is Vulkan worthwhile for the performance gain over OpenGL?][:api]
[1:55:32][@sratke][Q: Will you take this opportunity to implement the d3d backend?][:api]
[1:56:06][@frostyninja][How long is lunch break?]
[1:56:23][@genos3][Q: Are there practical solutions to reducing the fill rate in the software renderer?][:rendering]
[1:56:59][@uplinkcoder][Q: Isn't every graphics :API just a middleman?]
[1:59:04][@joesweeney][Q: How do you recommend a beginner get better at writing platform layers? Is the only way to just write a bunch of them to figure out the common patterns?][:"platform layer"]
[1:59:24][@Rounin][Q: I'm one of the Linux people. Please don't give us Vulkan][:api]
[2:00:53][Close it down for a timezone-appropriate meal][:speech]
[/video]
