[video 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]