DRW: Add DRW_STATE_BLEND_PREMUL blend mode.
This commit is contained in:
@@ -268,6 +268,7 @@ typedef enum {
|
||||
DRW_STATE_TRANSMISSION = (1 << 17),
|
||||
DRW_STATE_CLIP_PLANES = (1 << 18),
|
||||
DRW_STATE_ADDITIVE_FULL = (1 << 19), /* Same as DRW_STATE_ADDITIVE but let alpha accumulate without premult. */
|
||||
DRW_STATE_BLEND_PREMUL = (1 << 20), /* Use that if color is already premult by alpha. */
|
||||
|
||||
DRW_STATE_WRITE_STENCIL = (1 << 27),
|
||||
DRW_STATE_STENCIL_EQUAL = (1 << 28),
|
||||
|
||||
@@ -190,8 +190,8 @@ void drw_state_set(DRWState state)
|
||||
{
|
||||
int test;
|
||||
if (CHANGED_ANY_STORE_VAR(
|
||||
DRW_STATE_BLEND | DRW_STATE_ADDITIVE | DRW_STATE_MULTIPLY | DRW_STATE_TRANSMISSION |
|
||||
DRW_STATE_ADDITIVE_FULL,
|
||||
DRW_STATE_BLEND | DRW_STATE_BLEND_PREMUL | DRW_STATE_ADDITIVE |
|
||||
DRW_STATE_MULTIPLY | DRW_STATE_TRANSMISSION | DRW_STATE_ADDITIVE_FULL,
|
||||
test))
|
||||
{
|
||||
if (test) {
|
||||
@@ -201,6 +201,9 @@ void drw_state_set(DRWState state)
|
||||
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, /* RGB */
|
||||
GL_ONE, GL_ONE_MINUS_SRC_ALPHA); /* Alpha */
|
||||
}
|
||||
else if ((state & DRW_STATE_BLEND_PREMUL) != 0) {
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
else if ((state & DRW_STATE_MULTIPLY) != 0) {
|
||||
glBlendFunc(GL_DST_COLOR, GL_ZERO);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user