Handmade Hero»Episode Guide
Basic Linear Bitmap Blending
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00:00Prestream stuff
0:00:00Prestream stuff
0:00:00Prestream stuff
0:09:18Intro and welcome
0:09:18Intro and welcome
0:09:18Intro and welcome
0:10:52Where we left off from last time
0:10:52Where we left off from last time
0:10:52Where we left off from last time
0:11:17Fixing the hero's color
0:11:17Fixing the hero's color
0:11:17Fixing the hero's color
0:16:16Figuring out what the shift values are
0:16:16Figuring out what the shift values are
0:16:16Figuring out what the shift values are
0:18:48Bitscanforward
0:18:48Bitscanforward
0:18:48Bitscanforward
0:27:53Renaming bitscanforward to FindLeastSignificantSetBit
0:27:53Renaming bitscanforward to FindLeastSignificantSetBit
0:27:53Renaming bitscanforward to FindLeastSignificantSetBit
0:29:36The intrinsics thing
0:29:36The intrinsics thing
0:29:36The intrinsics thing
0:30:16Finding out what compiler we're on
0:30:16Finding out what compiler we're on
0:30:16Finding out what compiler we're on
0:31:27Making a compromise: Allowing the intrinsics file access to the platform layer
0:31:27Making a compromise: Allowing the intrinsics file access to the platform layer
0:31:27Making a compromise: Allowing the intrinsics file access to the platform layer
0:33:20Determining what compiler is being used
0:33:20Determining what compiler is being used
0:33:20Determining what compiler is being used
0:41:20Simple version of using the alpha channel
0:41:20Simple version of using the alpha channel
0:41:20Simple version of using the alpha channel
0:45:20Alpha as an opacity value
0:45:20Alpha as an opacity value
0:45:20Alpha as an opacity value
0:46:36Implementing 0-128 off, 129 onwards on for alpha
0:46:36Implementing 0-128 off, 129 onwards on for alpha
0:46:36Implementing 0-128 off, 129 onwards on for alpha
0:49:20The dumb, slow way to do alpha blending.
0:49:20The dumb, slow way to do alpha blending.
0:49:20The dumb, slow way to do alpha blending.
0:50:04Krita crashes..
0:50:04Krita crashes..
0:50:04Krita crashes..
0:50:47Blackboard session explaining alpha blending using the background value
0:50:47Blackboard session explaining alpha blending using the background value
0:50:47Blackboard session explaining alpha blending using the background value
0:51:01'Deriving' the formula for a linear blend
0:51:01'Deriving' the formula for a linear blend
0:51:01'Deriving' the formula for a linear blend
0:58:02The canonical form of a linear blend
0:58:02The canonical form of a linear blend
0:58:02The canonical form of a linear blend
0:58:45How the 't' works in the linear blend formula
0:58:45How the 't' works in the linear blend formula
0:58:45How the 't' works in the linear blend formula
1:00:35Implementing the floating point version of linear blend
1:00:35Implementing the floating point version of linear blend
1:00:35Implementing the floating point version of linear blend
1:06:55Drawing the herohead at the location of the player
1:06:55Drawing the herohead at the location of the player
1:06:55Drawing the herohead at the location of the player
1:07:23Q&A
🗩
1:07:23Q&A
🗩
1:07:23Q&A
🗩
1:08:06Stream spots a typo!
1:08:06Stream spots a typo!
1:08:06Stream spots a typo!
1:08:37Stream suggests to assert the bitmap assertion mode!
1:08:37Stream suggests to assert the bitmap assertion mode!
1:08:37Stream suggests to assert the bitmap assertion mode!
1:09:12You do not need #pragma intrinsic if you include <intrin.h>
1:09:12You do not need #pragma intrinsic if you include <intrin.h>
1:09:12You do not need #pragma intrinsic if you include <intrin.h>
1:10:53Would it be worthwhile to avoid converting to float while doing the alpha blend?
1:10:53Would it be worthwhile to avoid converting to float while doing the alpha blend?
1:10:53Would it be worthwhile to avoid converting to float while doing the alpha blend?
1:12:46Why is the Windows-logo still visible at the top?
1:12:46Why is the Windows-logo still visible at the top?
1:12:46Why is the Windows-logo still visible at the top?
1:14:11Are there other ways to alpha blend and should you be taking into account which colors are easier to see?
1:14:11Are there other ways to alpha blend and should you be taking into account which colors are easier to see?
1:14:11Are there other ways to alpha blend and should you be taking into account which colors are easier to see?
1:21:06Are we at all concerned with the destinations alpha?
1:21:06Are we at all concerned with the destinations alpha?
1:21:06Are we at all concerned with the destinations alpha?
1:25:28Will the final blend favor the source over the destination, or is linear good enough?
1:25:28Will the final blend favor the source over the destination, or is linear good enough?
1:25:28Will the final blend favor the source over the destination, or is linear good enough?
1:25:59How would you deal with other picture formats such as png, jpeg, etc.
1:25:59How would you deal with other picture formats such as png, jpeg, etc.
1:25:59How would you deal with other picture formats such as png, jpeg, etc.
1:26:53Why is the mask so complicated to use?
1:26:53Why is the mask so complicated to use?
1:26:53Why is the mask so complicated to use?
1:27:51Did you mean the other compiler LLVM or Clang?
1:27:51Did you mean the other compiler LLVM or Clang?
1:27:51Did you mean the other compiler LLVM or Clang?
1:28:37In the bitscan function what about returning index negative one if not found?
1:28:37In the bitscan function what about returning index negative one if not found?
1:28:37In the bitscan function what about returning index negative one if not found?
1:29:04Can you go over the linear alpha blend diagram again?
1:29:04Can you go over the linear alpha blend diagram again?
1:29:04Can you go over the linear alpha blend diagram again?
1:34:36Is the large VirtualAlloc() at the beginning similar to Linux mmap()?
1:34:36Is the large VirtualAlloc() at the beginning similar to Linux mmap()?
1:34:36Is the large VirtualAlloc() at the beginning similar to Linux mmap()?
1:35:51What bitvalue is 50% brightness?
1:35:51What bitvalue is 50% brightness?
1:35:51What bitvalue is 50% brightness?
1:37:34Does the display bitmap operation actually do anything with the alpha channel?
1:37:34Does the display bitmap operation actually do anything with the alpha channel?
1:37:34Does the display bitmap operation actually do anything with the alpha channel?
1:37:58The solid curve on Wikipedia's gamma correction is the linear space intensity. Should be what you're looking for.
1:37:58The solid curve on Wikipedia's gamma correction is the linear space intensity. Should be what you're looking for.
1:37:58The solid curve on Wikipedia's gamma correction is the linear space intensity. Should be what you're looking for.