Browse Source

Trigger a Lua error if love.graphics.draw(canvas) is called while that canvas is the active one.

This only catches a subset of the possible accidental read-while-writing situations that can happen when using Canvases, unfortunately.
Alex Szpakowski 10 years ago
parent
commit
db91a73d57
2 changed files with 7 additions and 5 deletions
  1. 0 3
      src/common/iOS.mm
  2. 7 2
      src/modules/graphics/opengl/Canvas.cpp

+ 0 - 3
src/common/iOS.mm

@@ -323,9 +323,6 @@ std::string getExecutablePath()
 	}
 }
 
-static dispatch_queue_t queue = nil;
-static dispatch_source_t timer = nil;
-
 void vibrate()
 {
 	@autoreleasepool

+ 7 - 2
src/modules/graphics/opengl/Canvas.cpp

@@ -300,6 +300,12 @@ void Canvas::unloadVolatile()
 
 void Canvas::drawv(const Matrix4 &t, const Vertex *v)
 {
+	// FIXME: This doesn't handle cases where the Canvas is used as a texture
+	// in a SpriteBatch, Mesh, or ParticleSystem, or when the Canvas is used in
+	// a shader as a non-default texture.
+	if (Canvas::current == this)
+		throw love::Exception("Cannot draw a Canvas to itself.");
+
 	OpenGL::TempDebugGroup debuggroup("Canvas draw");
 
 	OpenGL::TempTransform transform(gl);
@@ -327,8 +333,7 @@ void Canvas::drawq(Quad *quad, float x, float y, float angle, float sx, float sy
 {
 	Matrix4 t(x, y, angle, sx, sy, ox, oy, kx, ky);
 
-	const Vertex *v = quad->getVertices();
-	drawv(t, v);
+	drawv(t, quad->getVertices());
 }
 
 void Canvas::setFilter(const Texture::Filter &f)