mirror of
https://github.com/glfw/glfw.git
synced 2025-10-05 06:06:36 +00:00
Merge 59fdba8057
into 3b5d58cc46
This commit is contained in:
commit
230e699996
@ -289,7 +289,9 @@ constraint. Possible values are `GLFW_TRUE` and `GLFW_FALSE`.
|
||||
|
||||
@anchor GLFW_TRANSPARENT
|
||||
__GLFW_TRANSPARENT__ specifies whether the framebuffer will support transparency
|
||||
in the background. Possible values are `GLFW_TRUE` and `GLFW_FALSE`.
|
||||
in the background. If transparency is not provided by your driver, GLFW will
|
||||
gracefully fallback to opaque. It is possible to check for this outcome
|
||||
with `glfwGetWindowAttrib()`. Possible values are `GLFW_TRUE` and `GLFW_FALSE`.
|
||||
|
||||
|
||||
@subsubsection window_hints_mtr Monitor related hints
|
||||
|
@ -322,6 +322,11 @@ int main(int argc, char *argv[])
|
||||
exit( EXIT_FAILURE );
|
||||
}
|
||||
|
||||
if (!glfwGetWindowAttrib(window, GLFW_TRANSPARENT))
|
||||
{
|
||||
fprintf( stderr, "Failed to set GLFW_TRANSPARENT flag\n" );
|
||||
}
|
||||
|
||||
// Set callback functions
|
||||
glfwSetFramebufferSizeCallback(window, reshape);
|
||||
glfwSetKeyCallback(window, key);
|
||||
|
@ -188,6 +188,9 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
|
||||
if (closest)
|
||||
*result = (EGLConfig) closest->handle;
|
||||
|
||||
if (desired->transparent && closest->transparent != GLFW_TRUE)
|
||||
_glfw.hints.framebuffer.transparent = GLFW_FALSE;
|
||||
|
||||
free(nativeConfigs);
|
||||
free(usableConfigs);
|
||||
|
||||
|
@ -141,6 +141,9 @@ static GLFWbool chooseGLXFBConfig(const _GLFWfbconfig* desired,
|
||||
if (closest)
|
||||
*result = (GLXFBConfig) closest->handle;
|
||||
|
||||
if (desired->transparent && closest->transparent != GLFW_TRUE)
|
||||
_glfw.hints.framebuffer.transparent = GLFW_FALSE;
|
||||
|
||||
XFree(nativeConfigs);
|
||||
free(usableConfigs);
|
||||
|
||||
|
@ -988,6 +988,7 @@ static int createNativeWindow(_GLFWwindow* window,
|
||||
WCHAR* wideTitle;
|
||||
DWORD style = getWindowStyle(window);
|
||||
DWORD exStyle = getWindowExStyle(window);
|
||||
GLFWbool transparent = GLFW_FALSE;
|
||||
|
||||
if (window->monitor)
|
||||
{
|
||||
@ -1061,6 +1062,7 @@ static int createNativeWindow(_GLFWwindow* window,
|
||||
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
|
||||
bb.hRgnBlur = region;
|
||||
bb.fEnable = TRUE;
|
||||
transparent = GLFW_TRUE;
|
||||
|
||||
if (SUCCEEDED(DwmEnableBlurBehindWindow(window->win32.handle, &bb)))
|
||||
{
|
||||
@ -1090,6 +1092,9 @@ static int createNativeWindow(_GLFWwindow* window,
|
||||
DeleteObject(region);
|
||||
}
|
||||
|
||||
// Need to let the framebuffer hint aware of the composition results.
|
||||
_glfw.hints.framebuffer.transparent = transparent;
|
||||
|
||||
return GLFW_TRUE;
|
||||
}
|
||||
|
||||
|
@ -732,6 +732,8 @@ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* handle, int attrib)
|
||||
return window->resizable;
|
||||
case GLFW_DECORATED:
|
||||
return window->decorated;
|
||||
case GLFW_TRANSPARENT:
|
||||
return _glfw.hints.framebuffer.transparent;
|
||||
case GLFW_FLOATING:
|
||||
return window->floating;
|
||||
case GLFW_AUTO_ICONIFY:
|
||||
|
Loading…
Reference in New Issue
Block a user