mirror of
				https://github.com/Ed94/HandmadeHero.git
				synced 2025-10-31 06:50:54 -07:00 
			
		
		
		
	Day 16 complete
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -21,3 +21,4 @@ vc140.pdb | |||||||
| build | build | ||||||
|  |  | ||||||
| **/*.dll | **/*.dll | ||||||
|  | data/test.out | ||||||
|   | |||||||
| @@ -8,8 +8,8 @@ | |||||||
| 		<ShowEmptyFolders>true</ShowEmptyFolders> | 		<ShowEmptyFolders>true</ShowEmptyFolders> | ||||||
| 		<IsVirtual>false</IsVirtual> | 		<IsVirtual>false</IsVirtual> | ||||||
| 		<IsFolder>false</IsFolder> | 		<IsFolder>false</IsFolder> | ||||||
| 		<BuildCommand>pwsh $(WorkspaceDirectory)/scripts/build.ps1 msvc</BuildCommand> | 		<BuildCommand>pwsh $(WorkspaceDirectory)/scripts/build.ps1 msvc dev debug</BuildCommand> | ||||||
| 		<RebuildCommand>pwsh $(WorkspaceDirectory)/scripts/clean; $(WorkspaceDirectory)scripts/build msvc</RebuildCommand> | 		<RebuildCommand>pwsh $(WorkspaceDirectory)/scripts/clean.ps1; $(WorkspaceDirectory)scripts/build.ps1 msvc dev debug</RebuildCommand> | ||||||
| 		<BuildFileCommand></BuildFileCommand> | 		<BuildFileCommand></BuildFileCommand> | ||||||
| 		<CleanCommand>pwsh $(WorkspaceDirectory)/scripts/clean.ps1</CleanCommand> | 		<CleanCommand>pwsh $(WorkspaceDirectory)/scripts/clean.ps1</CleanCommand> | ||||||
| 		<BuildWorkingDirectory></BuildWorkingDirectory> | 		<BuildWorkingDirectory></BuildWorkingDirectory> | ||||||
| @@ -21,8 +21,9 @@ | |||||||
| 		<DebugSln></DebugSln> | 		<DebugSln></DebugSln> | ||||||
| 		<UseVisualStudioEnvBat>false</UseVisualStudioEnvBat> | 		<UseVisualStudioEnvBat>false</UseVisualStudioEnvBat> | ||||||
| 		<Configurations> | 		<Configurations> | ||||||
| 			<Configuration>Debug</Configuration> | 			<Configuration>Dev Optimzied</Configuration> | ||||||
| 			<Configuration>Release</Configuration> | 			<Configuration>Dev </Configuration> | ||||||
|  | 			<Configuration>Optimized</Configuration> | ||||||
| 		</Configurations> | 		</Configurations> | ||||||
| 		<Platforms> | 		<Platforms> | ||||||
| 			<Platform>x64</Platform> | 			<Platform>x64</Platform> | ||||||
| @@ -41,6 +42,8 @@ | |||||||
| 			<Define>UNICODE</Define> | 			<Define>UNICODE</Define> | ||||||
| 			<Define>_UNICODE</Define> | 			<Define>_UNICODE</Define> | ||||||
| 			<Define>GEN_TIME</Define> | 			<Define>GEN_TIME</Define> | ||||||
|  | 			<Define>Build_Debug</Define> | ||||||
|  | 			<Define>Build_Development</Define> | ||||||
| 		</Defines> | 		</Defines> | ||||||
| 		<ConfigProperties> | 		<ConfigProperties> | ||||||
| 			<ConfigAndPlatform> | 			<ConfigAndPlatform> | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								docs/Day 016.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/Day 016.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | # Day 16 | ||||||
|  |  | ||||||
|  | Finding out about the linker's map file was nice. | ||||||
| @@ -17,10 +17,10 @@ using GetSoundSampleValueFn = s16( EngineState* state, SoundBuffer* sound_buffer | |||||||
| internal s16 | internal s16 | ||||||
| square_wave_sample_value( EngineState* state, SoundBuffer* sound_buffer ) | square_wave_sample_value( EngineState* state, SoundBuffer* sound_buffer ) | ||||||
| { | { | ||||||
| 	s16 sample_value = (sound_buffer->RunningSampleIndex /  (state->WavePeriod / 2) ) % 2 ? | 	s32 sample_value = (sound_buffer->RunningSampleIndex /  (state->WavePeriod / 2) ) % 2 ? | ||||||
| 		state->ToneVolume : - state->ToneVolume; | 		state->ToneVolume : - state->ToneVolume; | ||||||
|  |  | ||||||
| 	return sample_value; | 	return scast(s16, sample_value); | ||||||
| } | } | ||||||
|  |  | ||||||
| internal s16 | internal s16 | ||||||
| @@ -30,7 +30,7 @@ sine_wave_sample_value( EngineState* state, SoundBuffer* sound_buffer ) | |||||||
|  |  | ||||||
| 	// time =  TAU * (f32)sound_buffer->RunningSampleIndex / (f32)SoundTest_WavePeriod; | 	// time =  TAU * (f32)sound_buffer->RunningSampleIndex / (f32)SoundTest_WavePeriod; | ||||||
| 	f32 sine_value   = sinf( time ); | 	f32 sine_value   = sinf( time ); | ||||||
| 	s16 sample_value = scast(u16, sine_value * state->ToneVolume); | 	s16 sample_value = scast(s16, sine_value * scast(f32, state->ToneVolume)); | ||||||
|  |  | ||||||
| 	time += TAU * 1.0f / scast(f32, state->WavePeriod ); | 	time += TAU * 1.0f / scast(f32, state->WavePeriod ); | ||||||
| 	return sample_value; | 	return sample_value; | ||||||
| @@ -40,7 +40,7 @@ internal void | |||||||
| output_sound( EngineState* state, SoundBuffer* sound_buffer, GetSoundSampleValueFn* get_sample_value ) | output_sound( EngineState* state, SoundBuffer* sound_buffer, GetSoundSampleValueFn* get_sample_value ) | ||||||
| { | { | ||||||
| 	s16* sample_out = sound_buffer->Samples; | 	s16* sample_out = sound_buffer->Samples; | ||||||
| 	for ( u32 sample_index = 0; sample_index < sound_buffer->NumSamples; ++ sample_index ) | 	for ( s32 sample_index = 0; sample_index < sound_buffer->NumSamples; ++ sample_index ) | ||||||
| 	{ | 	{ | ||||||
| 		s16 sample_value = get_sample_value( state, sound_buffer ); | 		s16 sample_value = get_sample_value( state, sound_buffer ); | ||||||
| 		sound_buffer->RunningSampleIndex++; | 		sound_buffer->RunningSampleIndex++; | ||||||
| @@ -97,7 +97,7 @@ render_weird_graident(OffscreenBuffer* buffer, u32 x_offset, u32 y_offset ) | |||||||
| 		#endif | 		#endif | ||||||
|  |  | ||||||
|  |  | ||||||
| 			*pixel++ = (red << 16) | (green << 8) | blue; | 			*pixel++ = u32(red << 16) | u32(green << 8) | blue; | ||||||
| 		} | 		} | ||||||
| 		wildcard += 0.5375f; | 		wildcard += 0.5375f; | ||||||
| 		row += buffer->Pitch; | 		row += buffer->Pitch; | ||||||
| @@ -120,8 +120,7 @@ shutdown() | |||||||
| } | } | ||||||
|  |  | ||||||
| // TODO : I rather expose the back_buffer and sound_buffer using getters for access in any function. | // TODO : I rather expose the back_buffer and sound_buffer using getters for access in any function. | ||||||
| internal void | void update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* sound_buffer, Memory* memory ) | ||||||
| update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* sound_buffer, Memory* memory ) |  | ||||||
| { | { | ||||||
| 	// Graphics & Input Test | 	// Graphics & Input Test | ||||||
| 	local_persist u32 x_offset = 0; | 	local_persist u32 x_offset = 0; | ||||||
| @@ -178,8 +177,8 @@ update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* | |||||||
| 		y_offset += pad->DPad.Down.State; | 		y_offset += pad->DPad.Down.State; | ||||||
| 		y_offset -= pad->DPad.Up.State; | 		y_offset -= pad->DPad.Up.State; | ||||||
|  |  | ||||||
| 		x_offset += pad->Stick.Left.X.End; | 		x_offset += scast(u32, pad->Stick.Left.X.End); | ||||||
| 		y_offset += pad->Stick.Left.Y.End; | 		y_offset += scast(u32, pad->Stick.Left.Y.End); | ||||||
|  |  | ||||||
| 		if ( pad->Triangle.State ) | 		if ( pad->Triangle.State ) | ||||||
| 		{ | 		{ | ||||||
| @@ -211,17 +210,17 @@ update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* | |||||||
| 			// TODO(Ed) : Add rumble test | 			// TODO(Ed) : Add rumble test | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else if ( controller->XPad ) | 	if ( controller->XPad ) | ||||||
| 	{ | 	{ | ||||||
| 		XInputPadState* pad = controller->XPad; | 		XInputPadState* pad = controller->XPad; | ||||||
|  |  | ||||||
| 		x_offset += pad->DPad.Right.State; | 		x_offset += pad->DPad.Right.State; | ||||||
| 		x_offset -= pad->DPad.Left.State; | 		x_offset -= pad->DPad.Left.State; | ||||||
| 		y_offset += pad->DPad.Down.State; | 		y_offset -= pad->DPad.Down.State; | ||||||
| 		y_offset -= pad->DPad.Up.State; | 		y_offset += pad->DPad.Up.State; | ||||||
|  |  | ||||||
| 		x_offset += pad->Stick.Left.X.End; | 		x_offset += scast(u32, pad->Stick.Left.X.End); | ||||||
| 		y_offset += pad->Stick.Left.Y.End; | 		y_offset += scast(u32, pad->Stick.Left.Y.End); | ||||||
|  |  | ||||||
| 		if ( pad->Y.State ) | 		if ( pad->Y.State ) | ||||||
| 		{ | 		{ | ||||||
| @@ -253,6 +252,44 @@ update_and_render( InputState* input, OffscreenBuffer* back_buffer, SoundBuffer* | |||||||
| 			// TODO(Ed) : Add rumble test | 			// TODO(Ed) : Add rumble test | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if ( controller->Keyboard ) | ||||||
|  | 	{ | ||||||
|  | 		KeyboardState* keyboard = controller->Keyboard; | ||||||
|  |  | ||||||
|  | 		x_offset += keyboard->D.State; | ||||||
|  | 		x_offset -= keyboard->A.State; | ||||||
|  | 		y_offset += keyboard->W.State; | ||||||
|  | 		y_offset -= keyboard->S.State; | ||||||
|  |  | ||||||
|  | 		if ( keyboard->Esc.State ) | ||||||
|  | 		{ | ||||||
|  | 			// TODO : Add exit game | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if ( keyboard->Space.State ) | ||||||
|  | 		{ | ||||||
|  | 			wave_switch ^= true; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if ( keyboard->Up.State ) | ||||||
|  | 		{ | ||||||
|  | 			state->ToneVolume += 10; | ||||||
|  | 		} | ||||||
|  | 		if ( keyboard->Down.State ) | ||||||
|  | 		{ | ||||||
|  | 			state->ToneVolume -= 10; | ||||||
|  | 		} | ||||||
|  | 		if ( keyboard->Left.State ) | ||||||
|  | 		{ | ||||||
|  | 			state->WaveToneHz -= 1; | ||||||
|  | 			state->WavePeriod  = sound_buffer->SamplesPerSecond / state->WaveToneHz; | ||||||
|  | 		} | ||||||
|  | 		if ( keyboard->Right.State ) | ||||||
|  | 		{ | ||||||
|  | 			state->WaveToneHz += 1; | ||||||
|  | 			state->WavePeriod  = sound_buffer->SamplesPerSecond / state->WaveToneHz; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// TODO(Ed) : Allow sample offsets here for more robust platform options | 	// TODO(Ed) : Allow sample offsets here for more robust platform options | ||||||
| 	if ( ! wave_switch ) | 	if ( ! wave_switch ) | ||||||
|   | |||||||
| @@ -50,6 +50,7 @@ struct SoundBuffer | |||||||
| 	u32  RunningSampleIndex; | 	u32  RunningSampleIndex; | ||||||
| 	s32  SamplesPerSecond; | 	s32  SamplesPerSecond; | ||||||
| 	s32  NumSamples; | 	s32  NumSamples; | ||||||
|  | 	char _PAD_[4]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct DigitalBtn | struct DigitalBtn | ||||||
| @@ -76,10 +77,18 @@ struct AnalogStick | |||||||
|  |  | ||||||
| struct KeyboardState | struct KeyboardState | ||||||
| { | { | ||||||
|  | 	DigitalBtn Q; | ||||||
|  | 	DigitalBtn E; | ||||||
| 	DigitalBtn W; | 	DigitalBtn W; | ||||||
| 	DigitalBtn A; | 	DigitalBtn A; | ||||||
| 	DigitalBtn S; | 	DigitalBtn S; | ||||||
| 	DigitalBtn D; | 	DigitalBtn D; | ||||||
|  | 	DigitalBtn Esc; | ||||||
|  | 	DigitalBtn Up; | ||||||
|  | 	DigitalBtn Down; | ||||||
|  | 	DigitalBtn Left; | ||||||
|  | 	DigitalBtn Right; | ||||||
|  | 	DigitalBtn Space; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct MousesState | struct MousesState | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ | |||||||
| 	- GetKeyboardLayout (for French keyboards, international WASD support) | 	- GetKeyboardLayout (for French keyboards, international WASD support) | ||||||
| */ | */ | ||||||
|  |  | ||||||
| #if __clang__ | #ifdef __clang__ | ||||||
| #pragma clang diagnostic push | #pragma clang diagnostic push | ||||||
| #pragma clang diagnostic ignored "-Wunused-const-variable" | #pragma clang diagnostic ignored "-Wunused-const-variable" | ||||||
| #pragma clang diagnostic ignored "-Wswitch" | #pragma clang diagnostic ignored "-Wswitch" | ||||||
| @@ -77,11 +77,12 @@ global bool Running; | |||||||
| struct OffscreenBuffer | struct OffscreenBuffer | ||||||
| { | { | ||||||
| 	BITMAPINFO Info; | 	BITMAPINFO Info; | ||||||
|  | 	char       _PAD_[4]; | ||||||
| 	void*      Memory; // Lets use directly mess with the "pixel's memory buffer" | 	void*      Memory; // Lets use directly mess with the "pixel's memory buffer" | ||||||
| 	u32        Width; | 	s32        Width; | ||||||
| 	u32        Height; | 	s32        Height; | ||||||
| 	u32        Pitch; | 	s32        Pitch; | ||||||
| 	u32        BytesPerPixel; | 	s32        BytesPerPixel; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct WinDimensions | struct WinDimensions | ||||||
| @@ -115,7 +116,6 @@ global s16* SoundBufferSamples; | |||||||
|  |  | ||||||
|  |  | ||||||
| #if Build_Debug | #if Build_Debug | ||||||
| internal |  | ||||||
| void debug_file_free_content( Debug_FileContent* content ) | void debug_file_free_content( Debug_FileContent* content ) | ||||||
| { | { | ||||||
| 	if ( content->Data) | 	if ( content->Data) | ||||||
| @@ -125,7 +125,6 @@ void debug_file_free_content( Debug_FileContent* content ) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| internal |  | ||||||
| Debug_FileContent debug_file_read_content( char* file_path ) | Debug_FileContent debug_file_read_content( char* file_path ) | ||||||
| { | { | ||||||
| 	Debug_FileContent result {}; | 	Debug_FileContent result {}; | ||||||
| @@ -165,7 +164,6 @@ Debug_FileContent debug_file_read_content( char* file_path ) | |||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
|  |  | ||||||
| internal |  | ||||||
| b32 debug_file_write_content( char* file_path, u32 content_size, void* content_memory ) | b32 debug_file_write_content( char* file_path, u32 content_size, void* content_memory ) | ||||||
| { | { | ||||||
| 	HANDLE file_handle = CreateFileA( file_path | 	HANDLE file_handle = CreateFileA( file_path | ||||||
| @@ -202,12 +200,15 @@ init_sound(HWND window_handle, s32 samples_per_second, s32 buffer_size ) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Get direct sound object | 	// Get direct sound object | ||||||
|  | #pragma warning( push ) | ||||||
|  | #pragma warning( disable: 4191 ) | ||||||
| 	direct_sound_create = rcast( DirectSoundCreateFn*, GetProcAddress( sound_library, "DirectSoundCreate" )); | 	direct_sound_create = rcast( DirectSoundCreateFn*, GetProcAddress( sound_library, "DirectSoundCreate" )); | ||||||
| 	if ( ! ensure( direct_sound_create, "Failed to get direct_sound_create_procedure" ) ) | 	if ( ! ensure( direct_sound_create, "Failed to get direct_sound_create_procedure" ) ) | ||||||
| 	{ | 	{ | ||||||
| 		// TOOD : Diagnostic | 		// TOOD : Diagnostic | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  | #pragma warning( pop ) | ||||||
|  |  | ||||||
| 	LPDIRECTSOUND direct_sound; | 	LPDIRECTSOUND direct_sound; | ||||||
| 	if ( ! SUCCEEDED(direct_sound_create( 0, & direct_sound, 0 )) ) | 	if ( ! SUCCEEDED(direct_sound_create( 0, & direct_sound, 0 )) ) | ||||||
| @@ -223,7 +224,7 @@ init_sound(HWND window_handle, s32 samples_per_second, s32 buffer_size ) | |||||||
| 	wave_format {}; | 	wave_format {}; | ||||||
| 	wave_format.wFormatTag      = WAVE_FORMAT_PCM;  /* format type */ | 	wave_format.wFormatTag      = WAVE_FORMAT_PCM;  /* format type */ | ||||||
| 	wave_format.nChannels       = 2;  /* number of channels (i.e. mono, stereo...) */ | 	wave_format.nChannels       = 2;  /* number of channels (i.e. mono, stereo...) */ | ||||||
| 	wave_format.nSamplesPerSec  = samples_per_second;  /* sample rate */ | 	wave_format.nSamplesPerSec  = scast(u32, samples_per_second);  /* sample rate */ | ||||||
| 	wave_format.wBitsPerSample  = 16;  /* number of bits per sample of mono data */ | 	wave_format.wBitsPerSample  = 16;  /* number of bits per sample of mono data */ | ||||||
| 	wave_format.nBlockAlign     = wave_format.nChannels      * wave_format.wBitsPerSample / 8 ;  /* block size of data */ | 	wave_format.nBlockAlign     = wave_format.nChannels      * wave_format.wBitsPerSample / 8 ;  /* block size of data */ | ||||||
| 	wave_format.nAvgBytesPerSec = wave_format.nSamplesPerSec * wave_format.nBlockAlign;  /* for buffer estimation */ | 	wave_format.nAvgBytesPerSec = wave_format.nSamplesPerSec * wave_format.nBlockAlign;  /* for buffer estimation */ | ||||||
| @@ -453,88 +454,6 @@ main_window_callback( | |||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
| 		case WM_SYSKEYDOWN: |  | ||||||
| 		case WM_SYSKEYUP: |  | ||||||
| 		case WM_KEYDOWN: |  | ||||||
| 		case WM_KEYUP: |  | ||||||
| 		{ |  | ||||||
| 			u32  vk_code  = w_param; |  | ||||||
| 			b32 is_down  = (l_param >> 31) == 0; |  | ||||||
| 			b32 was_down = (l_param >> 30); |  | ||||||
| 			b32 alt_down = (l_param & (1 << 29)); |  | ||||||
|  |  | ||||||
| 			switch ( vk_code ) |  | ||||||
| 			{ |  | ||||||
| 				case 'Q': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Q\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case 'E': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "E\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case 'W': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "W\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case 'A': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "A\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case 'S': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "S\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case 'D': |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "D\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_ESCAPE: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Escape\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_UP: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Up\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_DOWN: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Down\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_LEFT: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Left\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_RIGHT: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Right\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_SPACE: |  | ||||||
| 				{ |  | ||||||
| 					OutputDebugStringA( "Space\n" ); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 				case VK_F4: |  | ||||||
| 				{ |  | ||||||
| 					if ( alt_down ) |  | ||||||
| 						Running = false; |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
|  |  | ||||||
| 		case WM_PAINT: | 		case WM_PAINT: | ||||||
| 		{ | 		{ | ||||||
| 			PAINTSTRUCT info; | 			PAINTSTRUCT info; | ||||||
| @@ -576,6 +495,13 @@ input_process_digital_btn( engine::DigitalBtn* old_state, engine::DigitalBtn* ne | |||||||
| #undef had_transition | #undef had_transition | ||||||
| } | } | ||||||
|  |  | ||||||
|  | internal void | ||||||
|  | input_process_keyboard_key( engine::DigitalBtn* key, b32 is_down ) | ||||||
|  | { | ||||||
|  | 	key->State            = is_down; | ||||||
|  | 	key->HalfTransitions += is_down; | ||||||
|  | } | ||||||
|  |  | ||||||
| NS_PLATFORM_END | NS_PLATFORM_END | ||||||
|  |  | ||||||
| int CALLBACK | int CALLBACK | ||||||
| @@ -672,7 +598,7 @@ WinMain( | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	WinDimensions dimensions = get_window_dimensions( window_handle ); | 	// WinDimensions dimensions = get_window_dimensions( window_handle ); | ||||||
| 	resize_dib_section( &BackBuffer, 1280, 720 ); | 	resize_dib_section( &BackBuffer, 1280, 720 ); | ||||||
|  |  | ||||||
| 	SoundOutput sound_output; | 	SoundOutput sound_output; | ||||||
| @@ -709,6 +635,10 @@ WinMain( | |||||||
|  |  | ||||||
| 	engine::InputState input {}; | 	engine::InputState input {}; | ||||||
|  |  | ||||||
|  | 	engine::KeyboardState keyboard; | ||||||
|  | 	input.Controllers[0].Keyboard = & keyboard; | ||||||
|  | 	// Important: Assuming keyboard always connected for now, and assigning to first controller. | ||||||
|  |  | ||||||
| 	using EngineXInputPadStates = engine::XInputPadState[ Max_Controllers ]; | 	using EngineXInputPadStates = engine::XInputPadState[ Max_Controllers ]; | ||||||
| 	EngineXInputPadStates xpad_states[2]; | 	EngineXInputPadStates xpad_states[2]; | ||||||
| 	EngineXInputPadStates* old_xpads = & xpad_states[0]; | 	EngineXInputPadStates* old_xpads = & xpad_states[0]; | ||||||
| @@ -754,9 +684,11 @@ WinMain( | |||||||
| 	Running = true; | 	Running = true; | ||||||
| 	while( Running ) | 	while( Running ) | ||||||
| 	{ | 	{ | ||||||
|  | 		keyboard = {}; | ||||||
|  |  | ||||||
| 		// Window Management | 		// Window Management | ||||||
| 		{ | 		{ | ||||||
| 			if ( PeekMessageW( & window_msg_info, 0, 0, 0, PM_Remove_Messages_From_Queue ) ) | 			while ( PeekMessageW( & window_msg_info, 0, 0, 0, PM_Remove_Messages_From_Queue ) ) | ||||||
| 			{ | 			{ | ||||||
| 				if ( window_msg_info.message == WM_QUIT  ) | 				if ( window_msg_info.message == WM_QUIT  ) | ||||||
| 				{ | 				{ | ||||||
| @@ -764,8 +696,96 @@ WinMain( | |||||||
| 					Running = false; | 					Running = false; | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				TranslateMessage( & window_msg_info ); |  | ||||||
| 				DispatchMessageW( & window_msg_info ); | 				// Keyboard input handling | ||||||
|  | 				switch (window_msg_info.message) | ||||||
|  | 				{ | ||||||
|  | 					case WM_SYSKEYDOWN: | ||||||
|  | 					case WM_SYSKEYUP: | ||||||
|  | 					case WM_KEYDOWN: | ||||||
|  | 					case WM_KEYUP: | ||||||
|  | 					{ | ||||||
|  | 						WPARAM vk_code  = window_msg_info.wParam; | ||||||
|  | 						b32    is_down  = scast(b32, (window_msg_info.lParam >> 31) == 0 ); | ||||||
|  | 						b32    was_down = scast(b32, (window_msg_info.lParam >> 30) ); | ||||||
|  | 						b32    alt_down = scast(b32, (window_msg_info.lParam & (1 << 29)) ); | ||||||
|  |  | ||||||
|  | 						switch ( vk_code ) | ||||||
|  | 						{ | ||||||
|  | 							case 'Q': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Q, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case 'E': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.E, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case 'W': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.W, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case 'A': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.A, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case 'S': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.S, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case 'D': | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.D, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_ESCAPE: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Esc, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_UP: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Up, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_DOWN: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Down, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_LEFT: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Left, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_RIGHT: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Right, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_SPACE: | ||||||
|  | 							{ | ||||||
|  | 								input_process_keyboard_key( & keyboard.Space, is_down ); | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 							case VK_F4: | ||||||
|  | 							{ | ||||||
|  | 								if ( alt_down ) | ||||||
|  | 									Running = false; | ||||||
|  | 							} | ||||||
|  | 							break; | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 					break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						TranslateMessage( & window_msg_info ); | ||||||
|  | 						DispatchMessageW( & window_msg_info ); | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -901,8 +921,8 @@ WinMain( | |||||||
| 		b32 sound_is_valid = false; | 		b32 sound_is_valid = false; | ||||||
| 		DWORD ds_play_cursor; | 		DWORD ds_play_cursor; | ||||||
| 		DWORD ds_write_cursor; | 		DWORD ds_write_cursor; | ||||||
| 		DWORD byte_to_lock; | 		DWORD byte_to_lock   = 0; | ||||||
| 		DWORD bytes_to_write; | 		DWORD bytes_to_write = 0; | ||||||
| 		if ( SUCCEEDED( DS_SecondaryBuffer->GetCurrentPosition( & ds_play_cursor, & ds_write_cursor ) )) | 		if ( SUCCEEDED( DS_SecondaryBuffer->GetCurrentPosition( & ds_play_cursor, & ds_write_cursor ) )) | ||||||
| 		{ | 		{ | ||||||
|  |  | ||||||
| @@ -971,10 +991,10 @@ WinMain( | |||||||
| 		#define MS_PER_SECOND 1000 | 		#define MS_PER_SECOND 1000 | ||||||
| 		#define MegaCycles_Per_Second (1000 * 1000) | 		#define MegaCycles_Per_Second (1000 * 1000) | ||||||
| 		u64 cycles_elapsed      = end_cycle_count - last_cycle_time; | 		u64 cycles_elapsed      = end_cycle_count - last_cycle_time; | ||||||
| 		s32 mega_cycles_elapsed = cycles_elapsed / MegaCycles_Per_Second; | 		u64 mega_cycles_elapsed = cycles_elapsed / MegaCycles_Per_Second; | ||||||
| 		u64 frame_time_elapsed  = frame_cycle_time_end - last_frame_time; | 		u64 frame_time_elapsed  = frame_cycle_time_end - last_frame_time; | ||||||
| 		u32 ms_per_frame        = MS_PER_SECOND * frame_time_elapsed / perf_counter_frequency; | 		u32 ms_per_frame        = scast(u32, MS_PER_SECOND * frame_time_elapsed / perf_counter_frequency); | ||||||
| 		u32 fps                 = perf_counter_frequency / frame_time_elapsed; | 		u32 fps                 = scast(u32, perf_counter_frequency / frame_time_elapsed); | ||||||
|  |  | ||||||
| 		// char ms_timing_debug[256] {}; | 		// char ms_timing_debug[256] {}; | ||||||
| 		// wsprintfA( ms_timing_debug, "%d ms\n" "FPS: %d\n" "mega cycles: %d\n", ms_per_frame, fps, mega_cycles_elapsed ); | 		// wsprintfA( ms_timing_debug, "%d ms\n" "FPS: %d\n" "mega cycles: %d\n", ms_per_frame, fps, mega_cycles_elapsed ); | ||||||
|   | |||||||
| @@ -1,12 +1,19 @@ | |||||||
| // Joyshock grime wrapper | // Joyshock grime wrapper | ||||||
|  |  | ||||||
| #if __clang__ | #include "grime.h" | ||||||
| #pragma clang diagnostic push |  | ||||||
| #pragma clang diagnostic ignored "-Wreturn-type-c-linkage" | #ifdef COMPILER_CLANG | ||||||
|  | #	pragma clang diagnostic push | ||||||
|  | #	pragma clang diagnostic ignored "-Wreturn-type-c-linkage" | ||||||
|  | #elif COMPILER_MSVC | ||||||
|  | #	pragma warning( push ) | ||||||
|  | #	pragma warning( disable: 4820 ) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include "JoyShockLibrary/JoyShockLibrary.h" | #include "JoyShockLibrary/JoyShockLibrary.h" | ||||||
|  |  | ||||||
| #if __clang__ | #ifdef COMPILER_CLANG | ||||||
| #pragma clang diagnostic pop | #	pragma clang diagnostic pop | ||||||
|  | #elif COMPILER_MSVC | ||||||
|  | #	pragma warning( pop ) | ||||||
| #endif | #endif | ||||||
| @@ -14,7 +14,7 @@ | |||||||
| #	define TAU_OVER_4 1.570796326794896619231321691639751442f | #	define TAU_OVER_4 1.570796326794896619231321691639751442f | ||||||
| #	define TAU_OVER_8 0.785398163397448309615660845819875721f | #	define TAU_OVER_8 0.785398163397448309615660845819875721f | ||||||
|  |  | ||||||
| #	define E          2.71828182845904523536f | #	define Euler      2.71828182845904523536f | ||||||
| #	define SQRT_TWO   1.41421356237309504880168872420969808f | #	define SQRT_TWO   1.41421356237309504880168872420969808f | ||||||
| #	define SQRT_THREE 1.73205080756887729352744634150587236f | #	define SQRT_THREE 1.73205080756887729352744634150587236f | ||||||
| #	define SQRT_FIVE  2.23606797749978969640917366873127623f | #	define SQRT_FIVE  2.23606797749978969640917366873127623f | ||||||
|   | |||||||
| @@ -4,6 +4,16 @@ | |||||||
| */ | */ | ||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #pragma warning( disable: 4201 ) // Support for non-standard nameless struct or union extesnion | ||||||
|  | #pragma warning( disable: 4100 ) // Support for unreferenced formal parameters | ||||||
|  | #pragma warning( disable: 4800 ) // Support implicit conversion to bools | ||||||
|  | #pragma warning( disable: 4365 ) // Support for signed/unsigned mismatch auto-conversion | ||||||
|  | #pragma warning( disable: 4189 ) // Support for unused variables | ||||||
|  | #pragma warning( disable: 4514 ) // Support for unused inline functions | ||||||
|  | #pragma warning( disable: 4505 ) // Support for unused static functions | ||||||
|  | #pragma warning( disable: 5045 )  // Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified | ||||||
|  |  | ||||||
| #include "grime.h" | #include "grime.h" | ||||||
| #include "macros.h" | #include "macros.h" | ||||||
| #include "generics.h" | #include "generics.h" | ||||||
| @@ -22,8 +32,9 @@ NS_PLATFORM_BEGIN | |||||||
|  |  | ||||||
| struct Debug_FileContent | struct Debug_FileContent | ||||||
| { | { | ||||||
| 	u32   Size; |  | ||||||
| 	void* Data; | 	void* Data; | ||||||
|  | 	u32   Size; | ||||||
|  | 	char  _PAD_[4]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| void              debug_file_free_content ( Debug_FileContent* file_content ); | void              debug_file_free_content ( Debug_FileContent* file_content ); | ||||||
|   | |||||||
| @@ -3,11 +3,15 @@ | |||||||
| */ | */ | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
|  | #pragma warning( push ) | ||||||
|  | #pragma warning( disable: 5105 ) | ||||||
|  | #pragma warning( disable: 4820 ) | ||||||
| #define WIN32_LEAN_AND_MEAN | #define WIN32_LEAN_AND_MEAN | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #include <xinput.h> | #include <xinput.h> | ||||||
| #include <mmeapi.h> | #include <mmeapi.h> | ||||||
| #include <dsound.h> | #include <dsound.h> | ||||||
|  | #pragma warning( pop ) | ||||||
|  |  | ||||||
| // #include "windows/windows_base.h" | // #include "windows/windows_base.h" | ||||||
| // #include "windows/window.h" | // #include "windows/window.h" | ||||||
| @@ -146,8 +150,11 @@ xinput_load_library_bindings() | |||||||
| { | { | ||||||
| 	HMODULE xinput_lib = LoadLibraryA( XINPUT_DLL_A ); | 	HMODULE xinput_lib = LoadLibraryA( XINPUT_DLL_A ); | ||||||
|  |  | ||||||
|  | #pragma warning( push ) | ||||||
|  | #pragma warning( disable: 4191 ) | ||||||
| 	xinput_get_state = rcast( XInputGetStateFn*, GetProcAddress( xinput_lib, "XInputGetState" )); | 	xinput_get_state = rcast( XInputGetStateFn*, GetProcAddress( xinput_lib, "XInputGetState" )); | ||||||
| 	xinput_set_state = rcast( XInputSetStateFn*, GetProcAddress( xinput_lib, "XInputSetState" )); | 	xinput_set_state = rcast( XInputSetStateFn*, GetProcAddress( xinput_lib, "XInputSetState" )); | ||||||
|  | #pragma warning( pop ) | ||||||
| } | } | ||||||
| #pragma endregion XInput | #pragma endregion XInput | ||||||
|  |  | ||||||
|   | |||||||
| @@ -131,6 +131,7 @@ if ( $vendor -match "clang" ) | |||||||
| 	$flag_library					 = '-l' | 	$flag_library					 = '-l' | ||||||
| 	$flag_library_path				 = '-L' | 	$flag_library_path				 = '-L' | ||||||
| 	$flag_linker                     = '-Wl,' | 	$flag_linker                     = '-Wl,' | ||||||
|  | 	$flag_link_mapfile 				 = '-Map' | ||||||
| 	$flag_link_win_subsystem_console = '/SUBSYSTEM:CONSOLE' | 	$flag_link_win_subsystem_console = '/SUBSYSTEM:CONSOLE' | ||||||
| 	$flag_link_win_subsystem_windows = '/SUBSYSTEM:WINDOWS' | 	$flag_link_win_subsystem_windows = '/SUBSYSTEM:WINDOWS' | ||||||
| 	$flag_link_win_machine_32        = '/MACHINE:X86' | 	$flag_link_win_machine_32        = '/MACHINE:X86' | ||||||
| @@ -141,6 +142,7 @@ if ( $vendor -match "clang" ) | |||||||
| 	$flag_no_optimization 		     = '-O0' | 	$flag_no_optimization 		     = '-O0' | ||||||
| 	$flag_optimize_fast 		     = '-O2' | 	$flag_optimize_fast 		     = '-O2' | ||||||
| 	$flag_optimize_size 		     = '-O1' | 	$flag_optimize_size 		     = '-O1' | ||||||
|  | 	$flag_optimize_intrinsics		 = '-Oi' | ||||||
| 	$flag_path_output                = '-o' | 	$flag_path_output                = '-o' | ||||||
| 	$flag_preprocess_non_intergrated = '-no-integrated-cpp' | 	$flag_preprocess_non_intergrated = '-no-integrated-cpp' | ||||||
| 	$flag_profiling_debug            = '-fdebug-info-for-profiling' | 	$flag_profiling_debug            = '-fdebug-info-for-profiling' | ||||||
| @@ -149,7 +151,7 @@ if ( $vendor -match "clang" ) | |||||||
| 	$flag_target_arch				 = '-target' | 	$flag_target_arch				 = '-target' | ||||||
| 	$flag_wall 					     = '-Wall' | 	$flag_wall 					     = '-Wall' | ||||||
| 	$flag_warning 					 = '-W' | 	$flag_warning 					 = '-W' | ||||||
| 	$flag_warning_as_error 		     = '-Werror' | 	$flag_warnings_as_errors         = '-Werror' | ||||||
| 	$flag_win_nologo 			     = '/nologo' | 	$flag_win_nologo 			     = '/nologo' | ||||||
|  |  | ||||||
| 	$ignore_warning_ms_include = 'no-microsoft-include' | 	$ignore_warning_ms_include = 'no-microsoft-include' | ||||||
| @@ -175,6 +177,7 @@ if ( $vendor -match "clang" ) | |||||||
|  |  | ||||||
| 		$object = $executable -replace '\.exe', '.obj' | 		$object = $executable -replace '\.exe', '.obj' | ||||||
| 		$pdb    = $executable -replace '\.exe', '.pdb' | 		$pdb    = $executable -replace '\.exe', '.pdb' | ||||||
|  | 		$map    = $executable -replace '\.exe', '.map' | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_no_color_diagnostics, | 			$flag_no_color_diagnostics, | ||||||
| @@ -213,6 +216,7 @@ if ( $vendor -match "clang" ) | |||||||
| 		if ( $debug ) { | 		if ( $debug ) { | ||||||
| 			$linker_args += $flag_link_win_debug | 			$linker_args += $flag_link_win_debug | ||||||
| 			$linker_args += $flag_link_win_pdb + $pdb | 			$linker_args += $flag_link_win_pdb + $pdb | ||||||
|  | 			$linker_args += $flag_link_mapfile + $map | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		$libraries | ForEach-Object { | 		$libraries | ForEach-Object { | ||||||
| @@ -241,7 +245,7 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_compile			         = '/c' | 	$flag_compile			         = '/c' | ||||||
| 	$flag_debug                      = '/Zi' | 	$flag_debug                      = '/Zi' | ||||||
| 	$flag_define		             = '/D' | 	$flag_define		             = '/D' | ||||||
| 	$flag_exceptions_disabled		 = '/EHs-c-' | 	$flag_exceptions_disabled		 = '/EHsc-' | ||||||
| 	$flag_RTTI_disabled				 = '/GR-' | 	$flag_RTTI_disabled				 = '/GR-' | ||||||
| 	$flag_include                    = '/I' | 	$flag_include                    = '/I' | ||||||
| 	$flag_full_src_path              = '/FC' | 	$flag_full_src_path              = '/FC' | ||||||
| @@ -249,6 +253,8 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_dll 				         = '/LD' | 	$flag_dll 				         = '/LD' | ||||||
| 	$flag_dll_debug 			     = '/LDd' | 	$flag_dll_debug 			     = '/LDd' | ||||||
| 	$flag_linker 		             = '/link' | 	$flag_linker 		             = '/link' | ||||||
|  | 	$flag_link_mapfile 				 = '/MAP:' | ||||||
|  | 	$flag_link_optimize_references   = '/OPT:REF' | ||||||
| 	$flag_link_win_debug 	         = '/DEBUG' | 	$flag_link_win_debug 	         = '/DEBUG' | ||||||
| 	$flag_link_win_pdb 		         = '/PDB:' | 	$flag_link_win_pdb 		         = '/PDB:' | ||||||
| 	$flag_link_win_machine_32        = '/MACHINE:X86' | 	$flag_link_win_machine_32        = '/MACHINE:X86' | ||||||
| @@ -263,6 +269,7 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_no_optimization		     = '/Od' | 	$flag_no_optimization		     = '/Od' | ||||||
| 	$flag_optimize_fast 		     = '/O2' | 	$flag_optimize_fast 		     = '/O2' | ||||||
| 	$flag_optimize_size 		     = '/O1' | 	$flag_optimize_size 		     = '/O1' | ||||||
|  | 	$flag_optimize_intrinsics		 = '/Oi' | ||||||
| 	$flag_optimized_debug			 = '/Zo' | 	$flag_optimized_debug			 = '/Zo' | ||||||
| 	$flag_out_name                   = '/OUT:' | 	$flag_out_name                   = '/OUT:' | ||||||
| 	$flag_path_interm                = '/Fo' | 	$flag_path_interm                = '/Fo' | ||||||
| @@ -271,6 +278,8 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_preprocess_conform         = '/Zc:preprocessor' | 	$flag_preprocess_conform         = '/Zc:preprocessor' | ||||||
| 	$flag_set_stack_size			 = '/F' | 	$flag_set_stack_size			 = '/F' | ||||||
| 	$flag_syntax_only				 = '/Zs' | 	$flag_syntax_only				 = '/Zs' | ||||||
|  | 	$flag_wall 					     = '/Wall' | ||||||
|  | 	$flag_warnings_as_errors 		 = '/WX' | ||||||
|  |  | ||||||
| 	# This works because this project uses a single unit to build | 	# This works because this project uses a single unit to build | ||||||
| 	function build-simple | 	function build-simple | ||||||
| @@ -280,13 +289,14 @@ if ( $vendor -match "msvc" ) | |||||||
|  |  | ||||||
| 		$object = $executable -replace '\.exe', '.obj' | 		$object = $executable -replace '\.exe', '.obj' | ||||||
| 		$pdb    = $executable -replace '\.exe', '.pdb' | 		$pdb    = $executable -replace '\.exe', '.pdb' | ||||||
|  | 		$map    = $executable -replace '\.exe', '.map' | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_nologo, | 			$flag_nologo, | ||||||
| 			# $flag_all_cpp, | 			# $flag_all_cpp, | ||||||
| 			# $flag_exceptions_disabled, | 			$flag_exceptions_disabled, | ||||||
| 			# ( $flag_define + '_HAS_EXCEPTIONS=0' ), | 			( $flag_define + '_HAS_EXCEPTIONS=0' ), | ||||||
| 			# $flag_RTTI_disabled, | 			$flag_RTTI_disabled, | ||||||
| 			$flag_preprocess_conform, | 			$flag_preprocess_conform, | ||||||
| 			$flag_full_src_path, | 			$flag_full_src_path, | ||||||
| 			( $flag_path_interm + $path_build + '\' ), | 			( $flag_path_interm + $path_build + '\' ), | ||||||
| @@ -328,6 +338,7 @@ if ( $vendor -match "msvc" ) | |||||||
| 		if ( $debug ) { | 		if ( $debug ) { | ||||||
| 			$linker_args += $flag_link_win_debug | 			$linker_args += $flag_link_win_debug | ||||||
| 			$linker_args += $flag_link_win_pdb + $pdb | 			$linker_args += $flag_link_win_pdb + $pdb | ||||||
|  | 			$linker_args += $flag_link_mapfile + $map | ||||||
| 		} | 		} | ||||||
| 		else { | 		else { | ||||||
| 		} | 		} | ||||||
| @@ -417,6 +428,11 @@ $compiler_args = @( | |||||||
| 	($flag_define + 'UNICODE'), | 	($flag_define + 'UNICODE'), | ||||||
| 	($flag_define + '_UNICODE') | 	($flag_define + '_UNICODE') | ||||||
| 	# ($flag_set_stack_size + $stack_size) | 	# ($flag_set_stack_size + $stack_size) | ||||||
|  | 	$flag_wall | ||||||
|  | 	$flag_warnings_as_errors | ||||||
|  | 	$flag_optimize_intrinsics | ||||||
|  |  | ||||||
|  | 	($flag_define + 'Build_DLL=0' ) | ||||||
| ) | ) | ||||||
|  |  | ||||||
| if ( $dev ) { | if ( $dev ) { | ||||||
| @@ -434,6 +450,7 @@ $linker_args = @( | |||||||
| 	$lib_jsl, | 	$lib_jsl, | ||||||
|  |  | ||||||
| 	$flag_link_win_subsystem_windows | 	$flag_link_win_subsystem_windows | ||||||
|  | 	$flag_link_optimize_references | ||||||
| ) | ) | ||||||
|  |  | ||||||
| build-simple $includes $compiler_args $linker_args $unit $executable | build-simple $includes $compiler_args $linker_args $unit $executable | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user