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; \
}
// 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

View File

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