@@ -309,6 +309,10 @@ void RenderPassGLES::ResetGLState(const ProcTableGLES& gl) {
309309 }
310310 }
311311
312+ CullMode current_cull_mode = CullMode::kNone ;
313+ WindingOrder current_winding_order = WindingOrder::kClockwise ;
314+ gl.FrontFace (GL_CW);
315+
312316 for (const auto & command : commands) {
313317#ifdef IMPELLER_DEBUG
314318 fml::ScopedCleanupClosure pop_cmd_debug_marker (
@@ -391,29 +395,39 @@ void RenderPassGLES::ResetGLState(const ProcTableGLES& gl) {
391395 // --------------------------------------------------------------------------
392396 // / Setup culling.
393397 // /
394- switch (pipeline.GetDescriptor ().GetCullMode ()) {
395- case CullMode::kNone :
396- gl.Disable (GL_CULL_FACE);
397- break ;
398- case CullMode::kFrontFace :
399- gl.Enable (GL_CULL_FACE);
400- gl.CullFace (GL_FRONT);
401- break ;
402- case CullMode::kBackFace :
403- gl.Enable (GL_CULL_FACE);
404- gl.CullFace (GL_BACK);
405- break ;
398+ CullMode pipeline_cull_mode = pipeline.GetDescriptor ().GetCullMode ();
399+ if (current_cull_mode != pipeline_cull_mode) {
400+ switch (pipeline_cull_mode) {
401+ case CullMode::kNone :
402+ gl.Disable (GL_CULL_FACE);
403+ break ;
404+ case CullMode::kFrontFace :
405+ gl.Enable (GL_CULL_FACE);
406+ gl.CullFace (GL_FRONT);
407+ break ;
408+ case CullMode::kBackFace :
409+ gl.Enable (GL_CULL_FACE);
410+ gl.CullFace (GL_BACK);
411+ break ;
412+ }
413+ current_cull_mode = pipeline_cull_mode;
406414 }
415+
407416 // --------------------------------------------------------------------------
408417 // / Setup winding order.
409418 // /
410- switch (pipeline.GetDescriptor ().GetWindingOrder ()) {
411- case WindingOrder::kClockwise :
412- gl.FrontFace (GL_CW);
413- break ;
414- case WindingOrder::kCounterClockwise :
415- gl.FrontFace (GL_CCW);
416- break ;
419+ WindingOrder pipeline_winding_order =
420+ pipeline.GetDescriptor ().GetWindingOrder ();
421+ if (current_winding_order != pipeline_winding_order) {
422+ switch (pipeline.GetDescriptor ().GetWindingOrder ()) {
423+ case WindingOrder::kClockwise :
424+ gl.FrontFace (GL_CW);
425+ break ;
426+ case WindingOrder::kCounterClockwise :
427+ gl.FrontFace (GL_CCW);
428+ break ;
429+ }
430+ current_winding_order = pipeline_winding_order;
417431 }
418432
419433 BufferBindingsGLES* vertex_desc_gles = pipeline.GetBufferBindings ();
0 commit comments