Open panxinmiao opened 5 months ago
Interesting. I just tried with this:
import glfw
import wgpu
from wgpu.gui.glfw import WgpuCanvas
glfw.init()
glfw.window_hint(glfw.TRANSPARENT_FRAMEBUFFER, True)
canvas = WgpuCanvas()
c = canvas.get_context()
c.configure(
device=wgpu.utils.get_default_device(),
format=wgpu.TextureFormat.bgra8unorm_srgb,
alpha_mode=wgpu.CanvasAlphaMode.premultiplied,
)
I get this error:
ValueError: Given format 'premultiplied' is not in supported formats ['opaque', 'unpremultiplied']
Interestingly, it does support unpremultiplied
? which is not in the CanvasAlphaMode
enum.
I found https://github.com/gfx-rs/wgpu/issues/3486 which relates to this issue. Following some links to referred issues suggests that others have similar issue. E.g. Appears to be an issue with wgpu not correctly detecting surface capabilities. SurfaceCapabilities::alpha_modes only contains Opaque on my machine, Windows 10, nvidia gpu.
Ah, it seems that many people are encountering the same issue. This looks like it might be a problem with wgpu or something upstream
I want to render some scenes to the desktop using a transparent window. This requires setting the
alpha_mode
topremultiplied
in theCanvasContext.config()
method.I have added a flag in the wgpu glfw backend code with a line like this:
glfw.window_hint(glfw.TRANSPARENT_FRAMEBUFFER, True)
.However, the
alpha_mode="premultiplied"
setting in theCanvasContext.config()
method still seems to be unavailable.The
capable_alpha_modes
here are always['opaque']
. https://github.com/pygfx/wgpu-py/blob/0cdef1deb7033a15adb646d4b151d6d97cef954c/wgpu/backends/wgpu_native/_api.py#L449-L454Am I missing something? How can we get a canvas that supports
alpha_mode="premultiplied"
?