Skip to content

Commit 30eb6a4

Browse files
committed
support convert return .rgb
1 parent 2d247a7 commit 30eb6a4

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

obs-shaderfilter.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,22 +1631,41 @@ static void convert_return(struct dstr *effect_text, struct dstr *var_name, size
16311631

16321632
size_t diff = pos - effect_text->array;
16331633
char *ch = pos + var_name->len;
1634+
bool contains_alpha = true;
16341635
if (*ch == '.') {
1636+
contains_alpha = false;
16351637
ch++;
1636-
while (is_var_char(*ch))
1638+
while (is_var_char(*ch)) {
1639+
if (*ch == 'a' || *ch == 'A' || *ch == 'w' || *ch == 'W')
1640+
contains_alpha = true;
16371641
ch++;
1642+
}
16381643
}
16391644

16401645
while (*ch == ' ' || *ch == '\t')
16411646
ch++;
16421647

16431648
if (*ch == '=') {
16441649
dstr_remove(effect_text, diff, ch - pos + 1);
1645-
dstr_insert(effect_text, diff, "return ");
1650+
if (!contains_alpha) {
1651+
dstr_insert(effect_text, diff, "return float4(");
1652+
while (diff < effect_text->len && effect_text->array[diff] != ';')
1653+
diff++;
1654+
dstr_insert(effect_text, diff, ",1.0)");
1655+
} else {
1656+
dstr_insert(effect_text, diff, "return ");
1657+
}
16461658
return;
16471659
} else if (*(ch + 1) == '=' && (*ch == '*' || *ch == '/' || *ch == '+' || *ch == '-')) {
16481660
dstr_remove(effect_text, diff, ch - pos + 2);
1649-
dstr_insert(effect_text, diff, "return ");
1661+
if (!contains_alpha) {
1662+
dstr_insert(effect_text, diff, "return float4(");
1663+
while (diff < effect_text->len && effect_text->array[diff] != ';')
1664+
diff++;
1665+
dstr_insert(effect_text, diff, ",1.0)");
1666+
} else {
1667+
dstr_insert(effect_text, diff, "return ");
1668+
}
16501669
return;
16511670
}
16521671

@@ -2487,7 +2506,8 @@ static void shader_filter_update(void *data, obs_data_t *settings)
24872506
if (filter->param_audio_magnitude || filter->param_audio_peak) {
24882507
const char *audio_source_name = obs_data_get_string(settings, "audio_source");
24892508
if (!filter->audio_source_name || strcmp(filter->audio_source_name, audio_source_name) != 0) {
2490-
obs_source_t *audio_source = strlen(audio_source_name) > 0 ? obs_get_source_by_name(audio_source_name) : NULL;
2509+
obs_source_t *audio_source = strlen(audio_source_name) > 0 ? obs_get_source_by_name(audio_source_name)
2510+
: NULL;
24912511
if (audio_source && ((obs_source_get_output_flags(audio_source) & OBS_SOURCE_AUDIO) == 0)) {
24922512
obs_source_release(audio_source);
24932513
audio_source = NULL;

0 commit comments

Comments
 (0)