65 lines
6.7 KiB
Plaintext
65 lines
6.7 KiB
Plaintext
[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Making the Debug System CLANG Compatible" vod_platform=youtube id=q_FIMxta6zo annotator=Miblo]
|
|
[0:31][Set the stage for the day with a few words on compiling for multiple platforms]
|
|
[3:20][Determine to make the debug system compatible with CLANG]
|
|
[5:48][handmade_debug_interface.h: Explain the RecordDebugEvent() and DEBUG_NAME macros]
|
|
[8:59][Describe our problem and demo string concatenation]
|
|
[14:06][Consult the GCC documentation (see Resouces, GCC Manual)]
|
|
[14:52][handmade.cpp: Demo the difference between GCC's and Visual Studio's implementations of string concatenation]
|
|
[17:28][Consider how to workaround the problem]
|
|
[26:07][Consider adding support for constant string concatenation to CLANG]
|
|
[27:04][handmade_debug.cpp: Reacquaint ourselves with the code]
|
|
[28:33][4coder feature request: A standard way to send a platform message to 4coder in order to jump to a file at a given line]
|
|
[31:16][handmade_debug.interface.h: Consider having two versions of UniqueFileCounterString__()]
|
|
[34:25][handmade_debug_interface.h: Add Name to the debug_event struct and make BEGIN_BLOCK and END_BLOCK take it]
|
|
[41:46][handmade_debug.cpp: Change DebugParseName() to take a ProperName]
|
|
[45:34][handmade_debug_interface.h: Make the TIMED_BLOCK macros take a Name]
|
|
[46:52][Run the game to see what that produces]
|
|
[48:47][Step through DebugParseName() and inspect what it does]
|
|
[50:31][handmade_debug.cpp: Make GetElementFromEvent() set a Name rather than NameStartsAt]
|
|
[52:48][handmade_debug.cpp: Make DEBUGInit() set the Name]
|
|
[54:04][Run the game and see what we're recording]
|
|
[54:54][handmade_debug_interface.h: Ensure that everyone is passing the correct information down]
|
|
[57:30][Inspect the assembly for the debug system during the cutscene rendering]
|
|
[1:02:47][Step through GetElementFromEvent() and StoreEvent() to see what they do]
|
|
[1:05:47][handmade_debug.cpp: Make DEBUGEventToText() use our newly passed Name and run the game to see what it produces]
|
|
[1:07:41][Determine that we've solved our problem and close the issue]
|
|
[1:11:22][Run the game and assess our situation]
|
|
[1:12:48][Determine to fix the camera tracking]
|
|
[1:15:03][Step into UpdateCameraForEntityMovement() and investigate why the player is never being found by EntityOverlapsRectangle()]
|
|
[1:23:47][handmade_sim_region.cpp: Make UpdateCameraForEntityMovement() test on IsInRectangle() rather than EntityOverlapsRectangle()]
|
|
[1:28:12][Step into UpdateCameraForEntityMovement() and receive a positive result]
|
|
[1:29:46][handmade_sim_region.cpp: Make UpdateCameraForEntityMovement() record the RoomDelta differently]
|
|
[1:32:50][Run the game and find that the camera is incorrectly positioned]
|
|
[1:33:35][handmade_sim_region.cpp: Make UpdateCameraForEntityMovement() correctly set the RoomRelP, run the game and find that it's having trouble snapping back]
|
|
[1:34:48][handmade_sim_region.cpp: Change UpdateCameraForEntityMovement() to snap to the room centers]
|
|
[1:37:02][Run the game and find that the camera snaps correctly]
|
|
[1:37:33][handmade_sim_region.cpp: Enable UpdateCameraForEntityMovement() to interpolate between camera positions]
|
|
[1:38:29][Run the game to see that it correctly interpolates between camera positions]
|
|
[1:38:54][Consider supporting differently sized rooms]
|
|
[1:39:50][handmade_world_mode.cpp: Make AddStandardRoom() take RadiusX and RadiusY in order to create variably sized rooms]
|
|
[1:48:13][Run the game to see that we're creating rooms as we were doing]
|
|
[1:48:38][handmade_world_mode.cpp: Enable AddStandardRoom() to align the rooms and support different radii]
|
|
[1:53:07][Run the game to see what that does]
|
|
[1:53:36][handmade_world_mode.cpp: Try changing the sizes of the rooms]
|
|
[1:55:08][Run the game to find that we have different sized rooms]
|
|
[1:56:11][handmade_world_mode.cpp: Enable AddStandardRoom() to know the sizes of abutting rooms]
|
|
[1:58:32][Run the game to see our variably sized rooms and consider making the camera zoom to correctly frame the rooms]
|
|
[1:59:26][Q&A]
|
|
[2:00:29][@zilarrezko][Hey Casey, is anyone planning on doing a more boiled down version of Handmade Hero, to take apart the game and give a breakdown of the aspect of each system in the project?]
|
|
[2:01:13][@Miblo][Or make the camera pan within the room?]
|
|
[2:01:33][@highergravity][Long time archive viewer, but first time live streamer! I have two pre-stream questions but I can never make the pre-stream time. 1) Do you have a strong opinion about why int *p is "superior style" than int* p, or are you impartial to whatever the developer prefers?]
|
|
[2:02:12][Demo: Pointer declaration style]
|
|
[2:04:40][@highergravity][2) Do compiler optimisations (-O2) guarantee that the same output is generated for time-independent code? That is, does the out-of-order processing ever introduce some nasty logic / contol flow bugs that -Od wouldn't?]
|
|
[2:08:01][@mtsmox][You said you didn't want to use PRETTY_FUNCTION because that wouldn't work because of duplicate GUIDs. But the only place where PRETTY_FUNCTION would have been used is in TIMED_FUNCTION, which should never be used more then once in any function anyway. So not using DEBUG_NAME in TIMED_FUNCTION would solve the problem. All the other calls to TIMED_BLOCK_ would still work with DEBUG_NAME and thus use the COUNTER to be unique. So I think the extra field for the Name is really not necessary.]
|
|
[2:08:55][@zennmystic][You talked about GCC / CLANG at the start. To be clear, you will be dropping visual studio at some point?]
|
|
[2:09:43][@linike860][What is your opinion on Minkowski Portal Refinement for collision detection and response? I feel it is much nicer as it gives you much of the collision information (normal, depth, etc.) without having to implement an entire separate algorithm like GJK does]
|
|
[2:10:26][@zilarrezko][Have you tried -Ox for optimizations? I believe it gives even faster code (it's a fast hand for multiple optimization flags, I believe)]
|
|
[2:12:36][@garryjohanson][I would like to cast my vote that we should do the slides some day]
|
|
[2:12:57][@tukimitzu][How long do you think it will take for JAI to take over the C++ space in the game industry? It's not even out yet and I can already say that language is the best thing ever designed]
|
|
[2:14:54][@ray_caster][Are you using SDL? If not and, assuming the answer isn't just "everything needs to be hand-made", is there another reason? What are your thoughts in general on SDL?]
|
|
[2:17:50][@zennmystic][I guess what I was really asking was will you be dropping it?]
|
|
[2:19:02][@azmreece][Do you have any thoughts on when to use multiple threads? Is the answer any more in depth than "when single-threaded isn't fast enough"?]
|
|
[2:21:26][@tuxiak][Do you still have a TODO list like you used to? Could you show it? I'm still on Day ~110 with the videos]
|
|
[2:21:51][Wrap it up]
|
|
[/video]
|