Browse Source

Fix videos not setting their textures in the first frame, on some backends.

Sasha Szpakowski 1 year ago
parent
commit
ad0526d97d
1 changed files with 9 additions and 3 deletions
  1. 9 3
      src/modules/graphics/Video.cpp

+ 9 - 3
src/modules/graphics/Video.cpp

@@ -115,6 +115,15 @@ void Video::draw(Graphics *gfx, const Matrix4 &m)
 {
 	update();
 
+	// setVideoTextures may call flushBatchedDraws before setting the textures, so
+	// we can't call it after requestBatchedDraw.
+	auto shader = Shader::current;
+	if (Shader::isDefaultActive())
+		shader = Shader::standardShaders[Shader::STANDARD_VIDEO];
+
+	if (shader != nullptr)
+		shader->setVideoTextures(textures[0], textures[1], textures[2]);
+
 	const Matrix4 &tm = gfx->getTransform();
 	bool is2D = tm.isAffine2DTransform();
 
@@ -145,9 +154,6 @@ void Video::draw(Graphics *gfx, const Matrix4 &m)
 		verts[i].color = c;
 	}
 
-	if (Shader::current != nullptr)
-		Shader::current->setVideoTextures(textures[0], textures[1], textures[2]);
-
 	gfx->flushBatchedDraws();
 }