mirror of
https://github.com/glfw/glfw.git
synced 2024-11-11 13:03:52 +00: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:
parent
cb08dc574c
commit
71c72db1e3
@ -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
|
||||||
|
@ -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 =
|
||||||
|
Loading…
Reference in New Issue
Block a user