mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-23 14:21:57 +00:00
ffa72c7992
NvFBC is unable to capture certain applications that bypasses the DWM compositor, for example, Firefox playing video in full screen. This has been a known issue for a long time with Nvidia's ShadowPlay, see: * https://www.nvidia.com/en-us/geforce/forums/geforce-experience/14/233709/ * https://crbug.com/609857 Nvidia won't fix this, but there are workarounds. For example, we create a transparent 1x1 layered window, which forces desktop composition to be enabled. Note that SetLayeredWindowAttributes also supports alpha-based transparency, but setting transparency to 0 will cause DWM to skip composition. We could use a transparency of 1, but this ruins the image by the slightest bit, which is unacceptable. Therefore, we must use chroma key-based transparency, which tricks DWM into compositing despite being fully transparent.
45 lines
1.2 KiB
CMake
45 lines
1.2 KiB
CMake
cmake_minimum_required(VERSION 3.0)
|
|
project(platform_Windows LANGUAGES C)
|
|
|
|
include_directories(
|
|
${PROJECT_SOURCE_DIR}/include
|
|
)
|
|
|
|
add_library(platform_Windows STATIC
|
|
src/platform.c
|
|
src/service.c
|
|
src/mousehook.c
|
|
src/force_compose.c
|
|
)
|
|
|
|
# allow use of functions for Windows Vista or later
|
|
add_definitions(-D _WIN32_WINNT=0x6000)
|
|
|
|
add_subdirectory("capture")
|
|
|
|
FIND_PROGRAM(WINDRES_EXECUTABLE NAMES "x86_64-w64-mingw32-windres" "windres.exe" DOC "windres executable")
|
|
ADD_CUSTOM_COMMAND(TARGET platform_Windows POST_BUILD
|
|
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
|
COMMAND ${WINDRES_EXECUTABLE} -i resource.rc -o "${PROJECT_BINARY_DIR}/resource.o"
|
|
VERBATIM
|
|
)
|
|
|
|
target_link_libraries(platform_Windows
|
|
"${PROJECT_BINARY_DIR}/resource.o"
|
|
lg_common
|
|
capture
|
|
|
|
userenv
|
|
wtsapi32
|
|
psapi
|
|
)
|
|
|
|
target_include_directories(platform_Windows
|
|
PRIVATE
|
|
src
|
|
)
|
|
|
|
# these are for the nsis installer generator
|
|
configure_file("${PROJECT_SOURCE_DIR}/installer.nsi" "${PROJECT_BINARY_DIR}/installer.nsi" COPYONLY)
|
|
configure_file("${PROJECT_TOP}/resources/icon.ico" "${PROJECT_BINARY_DIR}/icon.ico" COPYONLY)
|
|
configure_file("${PROJECT_TOP}/LICENSE" "${PROJECT_BINARY_DIR}/LICENSE.txt" COPYONLY)
|