1
0
Fork 0
mirror of https://github.com/gwm17/glfw.git synced 2024-10-08 15:17:25 -04:00

wayland: Pre-multiply custom cursor image alpha

Since the Wayland SHM buffer format is implicitly premultiplied and the
GLFWimage pixels are defined to be non-premultiplied, we need to
convert the non-premultiplied pixels to premultiplied when filling the
buffer.

Related to #707.
This commit is contained in:
Jonas Ådahl 2016-02-17 13:51:08 +08:00 committed by Camilla Berglund
parent cb08dc574c
commit 71c72db1e3
2 changed files with 13 additions and 4 deletions

View File

@ -233,6 +233,13 @@ typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const c
y = t; \ y = t; \
} }
// Helper for non-premultiplied alpha to premultiplied alpha conversion
static inline unsigned char _glfwMultiplyAlpha(unsigned char alpha,
unsigned char value)
{
return (unsigned char) ((value * (unsigned int) alpha) / 255);
}
//======================================================================== //========================================================================
// Platform-independent structures // Platform-independent structures

View File

@ -588,10 +588,12 @@ int _glfwPlatformCreateCursor(_GLFWcursor* cursor,
unsigned char* target = data; unsigned char* target = data;
for (i = 0; i < image->width * image->height; i++, source += 4) for (i = 0; i < image->width * image->height; i++, source += 4)
{ {
*target++ = source[2]; unsigned char alpha = source[3];
*target++ = source[1];
*target++ = source[0]; *target++ = _glfwMultiplyAlpha(alpha, source[2]);
*target++ = source[3]; *target++ = _glfwMultiplyAlpha(alpha, source[1]);
*target++ = _glfwMultiplyAlpha(alpha, source[0]);
*target++ = alpha;
} }
cursor->wl.buffer = cursor->wl.buffer =