Handmade Hero»Episode Guide
Gamma-correct Premultiplied Alpha
?
?

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)
1:20Recap yesterday's work
1:20Recap yesterday's work
1:20Recap yesterday's work
2:40When do you premultiply the alpha?
2:40When do you premultiply the alpha?
2:40When do you premultiply the alpha?
4:58This bilinear blend might want to be in premultiplied alpha
4:58This bilinear blend might want to be in premultiplied alpha
4:58This bilinear blend might want to be in premultiplied alpha
6:45Inspect the change in appearance of the tree
6:45Inspect the change in appearance of the tree
6:45Inspect the change in appearance of the tree
8:44See if we're storing the Texels premultiplied (we are)
8:44See if we're storing the Texels premultiplied (we are)
8:44See if we're storing the Texels premultiplied (we are)
9:24We are not doing the most correct thing
9:24We are not doing the most correct thing
9:24We are not doing the most correct thing
10:07Do not premultiply the alpha at all
10:07Do not premultiply the alpha at all
10:07Do not premultiply the alpha at all
10:51Multiply the alpha just before the blend
10:51Multiply the alpha just before the blend
10:51Multiply the alpha just before the blend
11:40On the output our Color values want to be not premultiplied
11:40On the output our Color values want to be not premultiplied
11:40On the output our Color values want to be not premultiplied
12:32What happens on repeated blends?
12:32What happens on repeated blends?
12:32What happens on repeated blends?
14:15Blackboard: When our values aren't stored premultipled
14:15Blackboard: When our values aren't stored premultipled
14:15Blackboard: When our values aren't stored premultipled
16:44Blackboard: Projecting back to sRGB
16:44Blackboard: Projecting back to sRGB
16:44Blackboard: Projecting back to sRGB
18:07Project the Color values back to sRGB space before storing them
18:07Project the Color values back to sRGB space before storing them
18:07Project the Color values back to sRGB space before storing them
19:58Add struct containing rgb and a
19:58Add struct containing rgb and a
19:58Add struct containing rgb and a
21:00Check it out in-game and consider making all our routines gamma-aware
21:00Check it out in-game and consider making all our routines gamma-aware
21:00Check it out in-game and consider making all our routines gamma-aware
22:43Convert DrawRectangle to handle gamma correctly
22:43Convert DrawRectangle to handle gamma correctly
22:43Convert DrawRectangle to handle gamma correctly
28:50Try and check it out in-game
28:50Try and check it out in-game
28:50Try and check it out in-game
29:52Think about making our software renderer run relatively quickly
29:52Think about making our software renderer run relatively quickly
29:52Think about making our software renderer run relatively quickly
33:27Take another look at DrawRectangleSlowly and premultiply the Color upfront
33:27Take another look at DrawRectangleSlowly and premultiply the Color upfront
33:27Take another look at DrawRectangleSlowly and premultiply the Color upfront
36:59Do a little bit of cleanup
36:59Do a little bit of cleanup
36:59Do a little bit of cleanup
38:38Blackboard: How the Header worked
38:38Blackboard: How the Header worked
38:38Blackboard: How the Header worked
39:25Do two sequential pushes of the Header and Data
39:25Do two sequential pushes of the Header and Data
39:25Do two sequential pushes of the Header and Data
41:26Step through that and make sure it works
41:26Step through that and make sure it works
41:26Step through that and make sure it works
42:52Increment the BaseAddress properly and check it out in-game
42:52Increment the BaseAddress properly and check it out in-game
42:52Increment the BaseAddress properly and check it out in-game
44:58Consider pulling out the Draw functions into a seperate file
44:58Consider pulling out the Draw functions into a seperate file
44:58Consider pulling out the Draw functions into a seperate file
46:36Internet: MSDN: 'optimize'1
46:36Internet: MSDN: 'optimize'1
46:36Internet: MSDN: 'optimize'1
47:53Try using #pragma optimize
47:53Try using #pragma optimize
47:53Try using #pragma optimize
49:57Internet: MSDN: 'Optimization Best Practices'2
49:57Internet: MSDN: 'Optimization Best Practices'2
49:57Internet: MSDN: 'Optimization Best Practices'2
50:52Try wrapping everything else in a #pragma optimize off
50:52Try wrapping everything else in a #pragma optimize off
50:52Try wrapping everything else in a #pragma optimize off
54:25Q&A
🗩
54:25Q&A
🗩
54:25Q&A
🗩
55:39arbesfeld Why can't you compile OpenGL code to C to make a software renderer?
🗪
55:39arbesfeld Why can't you compile OpenGL code to C to make a software renderer?
🗪
55:39arbesfeld Why can't you compile OpenGL code to C to make a software renderer?
🗪
56:00mr4thdimention Is it useful to be able to debug with optimizations on? Do you think you might be able to show how to do that at some point?
🗪
56:00mr4thdimention Is it useful to be able to debug with optimizations on? Do you think you might be able to show how to do that at some point?
🗪
56:00mr4thdimention Is it useful to be able to debug with optimizations on? Do you think you might be able to show how to do that at some point?
🗪
56:40Demonstrate /Zo compiler flag3
56:40Demonstrate /Zo compiler flag3
56:40Demonstrate /Zo compiler flag3
1:01:38arbesfeld GLSL
🗪
1:01:38arbesfeld GLSL
🗪
1:01:38arbesfeld GLSL
🗪
1:05:48flaturated Should the Load Bitmap function also be optimized after making changes today to do premultiply?
🗪
1:05:48flaturated Should the Load Bitmap function also be optimized after making changes today to do premultiply?
🗪
1:05:48flaturated Should the Load Bitmap function also be optimized after making changes today to do premultiply?
🗪
1:06:23guit4rfreak How would something like a dynamic array in this memory system work? Something that is persistent across frames, but able to change size. Holes are not possible in the memory arenas right now?
🗪
1:06:23guit4rfreak How would something like a dynamic array in this memory system work? Something that is persistent across frames, but able to change size. Holes are not possible in the memory arenas right now?
🗪
1:06:23guit4rfreak How would something like a dynamic array in this memory system work? Something that is persistent across frames, but able to change size. Holes are not possible in the memory arenas right now?
🗪
1:08:04arbesfeld Couldn't a compiler translate the OpenGL commands to C commands and wrap them in a loop which iterates over the pixels?
🗪
1:08:04arbesfeld Couldn't a compiler translate the OpenGL commands to C commands and wrap them in a loop which iterates over the pixels?
🗪
1:08:04arbesfeld Couldn't a compiler translate the OpenGL commands to C commands and wrap them in a loop which iterates over the pixels?
🗪
1:10:34lucaspperin Could you explain us how you free all the memory stack when closing the game?
🗪
1:10:34lucaspperin Could you explain us how you free all the memory stack when closing the game?
🗪
1:10:34lucaspperin Could you explain us how you free all the memory stack when closing the game?
🗪
1:10:56starchypancakes I have a hard time understanding why sRGB conversions are required for the alpha channel at all, and why your intitial code wasn't correct. The alpha channel is being used to just represent a proportion of photons from one source and a proportion of photons from another source(s). Wouldn't that be outside of the purview of color curves because it doesn't technically have anything to do with brightness?
🗪
1:10:56starchypancakes I have a hard time understanding why sRGB conversions are required for the alpha channel at all, and why your intitial code wasn't correct. The alpha channel is being used to just represent a proportion of photons from one source and a proportion of photons from another source(s). Wouldn't that be outside of the purview of color curves because it doesn't technically have anything to do with brightness?
🗪
1:10:56starchypancakes I have a hard time understanding why sRGB conversions are required for the alpha channel at all, and why your intitial code wasn't correct. The alpha channel is being used to just represent a proportion of photons from one source and a proportion of photons from another source(s). Wouldn't that be outside of the purview of color curves because it doesn't technically have anything to do with brightness?
🗪
1:11:39gdmonkey You seem to be manipulating colors on a low level. How are you pushing pixels? Sorry, I am kinda new
🗪
1:11:39gdmonkey You seem to be manipulating colors on a low level. How are you pushing pixels? Sorry, I am kinda new
🗪
1:11:39gdmonkey You seem to be manipulating colors on a low level. How are you pushing pixels? Sorry, I am kinda new
🗪
1:12:27grumpygiant256 Any reason why you write 'Texel.a + Dest.a - Texel.a*Dest.a' instead of just 'InvRSA*Dest.a + Texel.a', which would match the RGB channels?
🗪
1:12:27grumpygiant256 Any reason why you write 'Texel.a + Dest.a - Texel.a*Dest.a' instead of just 'InvRSA*Dest.a + Texel.a', which would match the RGB channels?
🗪
1:12:27grumpygiant256 Any reason why you write 'Texel.a + Dest.a - Texel.a*Dest.a' instead of just 'InvRSA*Dest.a + Texel.a', which would match the RGB channels?
🗪
1:12:54Rearrange these calculations and keep on keeping on condensing
1:12:54Rearrange these calculations and keep on keeping on condensing
1:12:54Rearrange these calculations and keep on keeping on condensing
1:15:54andsz_ Wasn't the alpha channel authored with nonlinear colors?
🗪
1:15:54andsz_ Wasn't the alpha channel authored with nonlinear colors?
🗪
1:15:54andsz_ Wasn't the alpha channel authored with nonlinear colors?
🗪
1:16:32Call it a day
🗩
1:16:32Call it a day
🗩
1:16:32Call it a day
🗩