Prechádzať zdrojové kódy

libobs: Fix rendering of transitions with fixed sizes

If a transition had a fixed size, it would not render itself or its
sub-sources according to that fixed size.  The fixed size value was
essentially being ignored.
jp9000 9 rokov pred
rodič
commit
ddc7484a6e
1 zmenil súbory, kde vykonal 17 pridanie a 6 odobranie
  1. 17 6
      libobs/obs-source-transition.c

+ 17 - 6
libobs/obs-source-transition.c

@@ -99,14 +99,26 @@ void obs_transition_clear(obs_source_t *transition)
 
 void add_alignment(struct vec2 *v, uint32_t align, int cx, int cy);
 
+static inline uint32_t get_cx(obs_source_t *tr)
+{
+	return tr->transition_cx ?
+		tr->transition_cx : tr->transition_actual_cx;
+}
+
+static inline uint32_t get_cy(obs_source_t *tr)
+{
+	return tr->transition_cy ?
+		tr->transition_cy : tr->transition_actual_cy;
+}
+
 static void recalculate_transition_matrix(obs_source_t *tr, size_t idx)
 {
 	obs_source_t *child;
 	struct matrix4 mat;
 	struct vec2 pos;
 	struct vec2 scale;
-	float tr_cx = (float)tr->transition_actual_cx;
-	float tr_cy = (float)tr->transition_actual_cy;
+	float tr_cx = (float)get_cx(tr);
+	float tr_cy = (float)get_cy(tr);
 	float source_cx;
 	float source_cy;
 	float tr_aspect = tr_cx / tr_cy;
@@ -596,8 +608,8 @@ void obs_transition_enum_sources(obs_source_t *transition,
 static inline void render_child(obs_source_t *transition,
 		obs_source_t *child, size_t idx)
 {
-	uint32_t cx = transition->transition_actual_cx;
-	uint32_t cy = transition->transition_actual_cy;
+	uint32_t cx = get_cx(transition);
+	uint32_t cy = get_cy(transition);
 	struct vec4 blank;
 	if (!child)
 		return;
@@ -680,8 +692,7 @@ void obs_transition_video_render(obs_source_t *transition,
 		}
 
 		callback(transition->context.data, tex[0], tex[1], t,
-				transition->transition_actual_cx,
-				transition->transition_actual_cy);
+				get_cx(transition), get_cy(transition));
 
 	} else if (state.transitioning_audio) {
 		if (state.s[1]) {