diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go
index 5bc8437952b959e5c5c17a79d72ecef5e26caf33..ff60479d3fa55d8a7edbf73e5011476382970df8 100644
--- a/pixelgl/canvas.go
+++ b/pixelgl/canvas.go
@@ -315,6 +315,10 @@ func (ct *canvasTriangles) draw(tex *glhf.Texture, bounds pixel.Rect) {
 			ct.dst.shader.s.SetUniformAttr(loc, u.Value())
 		}
 
+		if clip, has := ct.ClipRect(); has {
+			gl.Scissor(int32(clip.Min.X), int32(clip.Min.Y), int32(clip.W()), int32(clip.H()))
+		}
+
 		if tex == nil {
 			ct.vs.Begin()
 			ct.vs.Draw()
@@ -327,9 +331,6 @@ func (ct *canvasTriangles) draw(tex *glhf.Texture, bounds pixel.Rect) {
 			}
 
 			ct.vs.Begin()
-			if clip, has := ct.ClipRect(); has {
-				gl.Scissor(int32(clip.Min.X), int32(clip.Min.Y), int32(clip.W()), int32(clip.H()))
-			}
 			ct.vs.Draw()
 			ct.vs.End()