From 10ecc72e2f2673b3c8afa88735ffad4ecb24779e Mon Sep 17 00:00:00 2001 From: igor Date: Wed, 22 Apr 2026 13:39:48 -0700 Subject: [PATCH] Day 38 complete. --- handmade.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/handmade.c b/handmade.c index eaf9401..f45e985 100644 --- a/handmade.c +++ b/handmade.c @@ -110,8 +110,21 @@ static void DrawBitmap(game_offscreen_buffer *Buffer, loaded_bitmap *Bitmap, F32 U32 *Dest = (U32 *)DestRow; U32 *Source = SourceRow; for(S32 X = MinX; X < MaxX; X++) { - if((*Source >> 24) > 128) - *Dest = *Source; + F32 A = (F32)((*Source >> 24) & 0xFF) / 255.0f; + F32 SR = (F32)((*Source >> 16) & 0xFF); + F32 SG = (F32)((*Source >> 8) & 0xFF); + F32 SB = (F32)((*Source >> 0) & 0xFF); + + F32 DR = (F32)((*Dest >> 16) & 0xFF); + F32 DG = (F32)((*Dest >> 8) & 0xFF); + F32 DB = (F32)((*Dest >> 0) & 0xFF); + + // TODO: This should be replaced by premultiplied alpha. + F32 R = (1.0f-A)*DR + A*SR; + F32 G = (1.0f-A)*DG + A*SG; + F32 B = (1.0f-A)*DB + A*SB; + + *Dest = (((U32)RoundF32toS32(R) << 16) | ((U32)RoundF32toS32(G) << 8) | ((U32)RoundF32toS32(B) << 0)); Dest++; Source++; @@ -160,6 +173,8 @@ static loaded_bitmap DEBUGLoadBMP(thread_context *Thread, debug_read_file_result Result.Width = Header->Width; Result.Height = Header->Height; + ASSERT(Header->Compression == 3); + // NOTE: The byte order in memory is determined by the Header. U32 RedMask = Header->RedMask; @@ -456,7 +471,7 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In F32 PlayerB = 0.0f; F32 PlayerLeft = ScreenCenterX - 0.5f * MetersToPixels*PlayerWidth; F32 PlayerTop = ScreenCenterY - MetersToPixels*PlayerHeight; - //DrawRectangle(Buffer, PlayerLeft, PlayerTop, PlayerLeft + MetersToPixels*PlayerWidth, PlayerTop + MetersToPixels*PlayerHeight, PlayerR, PlayerG, PlayerB); + DrawRectangle(Buffer, PlayerLeft, PlayerTop, PlayerLeft + MetersToPixels*PlayerWidth, PlayerTop + MetersToPixels*PlayerHeight, PlayerR, PlayerG, PlayerB); DrawBitmap(Buffer, &GameState->HeroHead, PlayerLeft, PlayerTop); GameOutputSound(GameState, SoundBuffer, 400);