From ad0526d97d695167e14618142e99eb092fe404b8 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Tue, 9 Apr 2024 21:18:11 -0300 Subject: [PATCH] Fix videos not setting their textures in the first frame, on some backends. --- src/modules/graphics/Video.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/graphics/Video.cpp b/src/modules/graphics/Video.cpp index 710942ea0..b686f5d03 100644 --- a/src/modules/graphics/Video.cpp +++ b/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(); }