From ff8fa9f0f7c0903ca4a327737e7839b4f221d6d5 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 22 Mar 2022 13:33:02 +0100 Subject: [PATCH] Record black screen instead of crash when compositor + window is not supported at the moment --- record-selected.sh | 8 -------- src/main.cpp | 14 ++++++++++---- toggle-recording-selected.sh | 9 +++++++++ 3 files changed, 19 insertions(+), 12 deletions(-) delete mode 100755 record-selected.sh create mode 100755 toggle-recording-selected.sh diff --git a/record-selected.sh b/record-selected.sh deleted file mode 100755 index 5782ac3..0000000 --- a/record-selected.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -e - -window=$(xdotool selectwindow) -active_sink="$(pactl get-default-sink).monitor" -mkdir -p "$HOME/Videos" -video="$HOME/Videos/$(date +"Video_%Y-%m-%d_%H-%M-%S.mp4")" -gpu-screen-recorder -w "$window" -c mp4 -f 60 -a "${active_sink}.monitor" -o "$video" -notify-send "GPU Screen Recorder" "Saved video to $video" diff --git a/src/main.cpp b/src/main.cpp index ecc178a..689eeb6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -242,16 +242,22 @@ static bool recreate_window_pixmap(Display *dpy, Window window_id, // glEnable(GL_BLEND); // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + pixmap.texture_width = attr.width; + pixmap.texture_height = attr.height; + glXBindTexImageEXT(dpy, pixmap.glx_pixmap, GLX_FRONT_EXT, NULL); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, - &pixmap.texture_width); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, - &pixmap.texture_height); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // GL_LINEAR ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // GL_LINEAR);//GL_LINEAR_MIPMAP_LINEAR ); //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + GLint gl_texture_width = 0; + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &gl_texture_width); + if(gl_texture_width == 0) { + fprintf(stderr, "Warning: failed to get texture size. You are probably running an unsupported compositor and recording the selected window doesn't work at the moment. A black window will be displayed instead\n"); + } + fprintf(stderr, "texture width: %d, height: %d\n", pixmap.texture_width, pixmap.texture_height); diff --git a/toggle-recording-selected.sh b/toggle-recording-selected.sh new file mode 100755 index 0000000..663f360 --- /dev/null +++ b/toggle-recording-selected.sh @@ -0,0 +1,9 @@ +#!/bin/sh -e + +killall -INT gpu-screen-recorder && notify-send -u low 'GPU Screen Recorder' 'Stopped recording' && exit 0; +window=$(xdotool selectwindow) +active_sink="$(pactl get-default-sink).monitor" +mkdir -p "$HOME/Videos" +video="$HOME/Videos/$(date +"Video_%Y-%m-%d_%H-%M-%S.mp4")" +notify-send -u low 'GPU Screen Recorder' "Started recording video to $video" +gpu-screen-recorder -w "$window" -c mp4 -f 60 -a "$active_sink" -o "$video"