Projects
Multimedia
obs-vkcapture
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 2
View file
obs-vkcapture.changes
Changed
@@ -1,9 +1,16 @@ ------------------------------------------------------------------- -Mon Jan 20 14:46:56 UTC 2025 - Sqx. Flann <fl4nn@posteo.de> +Mon May 19 13:59:43 UTC 2025 - Sqx. Flann <fl4nn@opensuse.org> + +- Update to version 1.5.2 + * Fixed washed out colors when using 10bit video format + * GL: Fixed capture for osu! and Minecraft Bedrock + +------------------------------------------------------------------- +Mon Jan 20 14:46:56 UTC 2025 - Sqx. Flann <fl4nn@opensuse.org> - Use ExclusiveArch analogous to OBS Studio ------------------------------------------------------------------- -Mon Jan 20 11:05:59 UTC 2025 - Sqx. Flann <fl4nn@posteo.de> +Mon Jan 20 11:05:59 UTC 2025 - Sqx. Flann <fl4nn@opensuse.org> - initial package
View file
obs-vkcapture.spec
Changed
@@ -1,5 +1,5 @@ Name: obs-vkcapture -Version: 1.5.1 +Version: 1.5.2 Release: 0 Summary: OBS plugin for Vulkan/OpenGL game capture on Linux License: GPL-2.0-only
View file
obs-vkcapture-1.5.1.tar.gz/CMakeLists.txt -> obs-vkcapture-1.5.2.tar.gz/CMakeLists.txt
Changed
@@ -2,7 +2,7 @@ project(obs-vkcapture LANGUAGES C - VERSION 1.5.1) + VERSION 1.5.2) include(GNUInstallDirs) find_package(Vulkan REQUIRED)
View file
obs-vkcapture-1.5.1.tar.gz/src/glinject.c -> obs-vkcapture-1.5.2.tar.gz/src/glinject.c
Changed
@@ -140,6 +140,7 @@ GETGLXADDR(GetProcAddress); GETGLXADDR(GetProcAddressARB); GETGLXPROCADDR(DestroyContext); + GETGLXPROCADDR(CreateWindow); GETGLXPROCADDR(SwapBuffers); GETGLXPROCADDR(SwapBuffersMscOML); GETGLXPROCADDR(CreatePixmap); @@ -788,6 +789,10 @@ static void gl_shtex_capture() { + bool scissorEnabled = gl_f.IsEnabled(GL_SCISSOR_TEST); + if (scissorEnabled) { + gl_f.Disable(GL_SCISSOR_TEST); + } GLboolean last_srgb; GLint last_read_fbo; GLint last_draw_fbo; @@ -808,6 +813,9 @@ } else { gl_f.Disable(GL_FRAMEBUFFER_SRGB); } + if (scissorEnabled) { + gl_f.Enable(GL_SCISSOR_TEST); + } } static bool gl_shtex_init() @@ -893,11 +901,13 @@ hlog("Failed to create EGL image"); goto fail; } - const int queried = egl_f.ExportDMABUFImageQueryMESA(data.display, data.image, &data.buf_fourcc, &data.nfd, &data.buf_modifier); + uint64_t modifiers4; + const int queried = egl_f.ExportDMABUFImageQueryMESA(data.display, data.image, &data.buf_fourcc, &data.nfd, modifiers); if (!queried) { hlog("Failed to query dmabuf export"); goto fail; } + data.buf_modifier = modifiers0; const int exported = egl_f.ExportDMABUFImageMESA(data.display, data.image, data.buf_fds, data.buf_strides, data.buf_offsets); if (!exported) { hlog("Failed dmabuf export"); @@ -1072,6 +1082,7 @@ void *glXGetProcAddress(const char *procName); void *glXGetProcAddressARB(const char *procName); void glXDestroyContext(void *display, void *context); +bool glXCreateWindow(void *display, void *config, unsigned long win, const int *attribList); void glXSwapBuffers(void *display, void *surface); int64_t glXSwapBuffersMscOML(void *display, void *drawable, int64_t target_msc, int64_t divisor, int64_t remainder); @@ -1084,7 +1095,8 @@ ADD_HOOK(glXGetProcAddressARB), ADD_HOOK(glXSwapBuffers), ADD_HOOK(glXSwapBuffersMscOML), - ADD_HOOK(glXDestroyContext) + ADD_HOOK(glXDestroyContext), + ADD_HOOK(glXCreateWindow) #undef ADD_HOOK }; @@ -1127,6 +1139,17 @@ glx_f.DestroyContext(display, context); } +bool glXCreateWindow(void *display, void *config, unsigned long win, const int *attribList) +{ + if (!gl_init_funcs(/*glx*/true)) { + return false; + } + + gl_free(); + + return glx_f.CreateWindow(display, config, win, attribList); +} + void glXSwapBuffers(void *display, void *drawable) { if (!gl_init_funcs(/*glx*/true)) {
View file
obs-vkcapture-1.5.1.tar.gz/src/glinject.h -> obs-vkcapture-1.5.2.tar.gz/src/glinject.h
Changed
@@ -94,6 +94,7 @@ void *(*GetProcAddress)(const char*); void *(*GetProcAddressARB)(const char*); void (*DestroyContext)(void *display, void *context); + bool (*CreateWindow)(void *display, void *config, unsigned long win, const int *attribList); void (*SwapBuffers)(void *display, void *drawable); int64_t (*SwapBuffersMscOML)(void *display, void *drawable, int64_t target_msc, int64_t divisor, int64_t remainder); void *(*CreatePixmap)(void *display, void *config, unsigned long pixmap, const int *attribList);
View file
obs-vkcapture-1.5.1.tar.gz/src/vkcapture.c -> obs-vkcapture-1.5.2.tar.gz/src/vkcapture.c
Changed
@@ -563,7 +563,7 @@ } const enum gs_color_space color_space = gs_get_color_space(); - const char *tech_name = "Draw"; + const char *tech_name = "DrawSrgbDecompress"; float multiplier = 1.f; if (color_space == GS_CS_709_EXTENDED) { @@ -573,8 +573,15 @@ effect = obs_get_base_effect(ctx->allow_transparency ? OBS_EFFECT_DEFAULT : OBS_EFFECT_OPAQUE); + const bool linear_srgb = gs_get_linear_srgb(); + const bool previous = gs_framebuffer_srgb_enabled(); + gs_enable_framebuffer_srgb(linear_srgb); + gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image"); - gs_effect_set_texture(image, ctx->texture); + if (linear_srgb) + gs_effect_set_texture_srgb(image, ctx->texture); + else + gs_effect_set_texture(image, ctx->texture); while (gs_effect_loop(effect, tech_name)) { gs_effect_set_float(gs_effect_get_param_by_name(effect, "multiplier"), multiplier); @@ -597,6 +604,8 @@ cursor_render(ctx); } } + + gs_enable_framebuffer_srgb(previous); } static const char *vkcapture_source_get_name(void *data) @@ -690,7 +699,7 @@ .id = "vkcapture-source", .type = OBS_SOURCE_TYPE_INPUT, .get_name = vkcapture_source_get_name, - .output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_DO_NOT_DUPLICATE, + .output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_DO_NOT_DUPLICATE | OBS_SOURCE_SRGB, .create = vkcapture_source_create, .destroy = vkcapture_source_destroy, .update = vkcapture_source_update,
View file
obs-vkcapture-1.5.1.tar.gz/src/xcursor-xcb.c -> obs-vkcapture-1.5.2.tar.gz/src/xcursor-xcb.c
Changed
@@ -93,14 +93,9 @@ if (!data->tex) return; - const bool linear_srgb = gs_get_linear_srgb(); - - const bool previous = gs_framebuffer_srgb_enabled(); - gs_enable_framebuffer_srgb(linear_srgb); - gs_effect_t *effect = gs_get_effect(); gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image"); - if (linear_srgb) + if (gs_get_linear_srgb()) gs_effect_set_texture_srgb(image, data->tex); else gs_effect_set_texture(image, data->tex); @@ -116,8 +111,6 @@ gs_enable_color(true, true, true, true); gs_blend_state_pop(); - - gs_enable_framebuffer_srgb(previous); } void xcb_xcursor_offset(xcb_xcursor_t *data, const int x_org, const int y_org)
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.