diff --git a/src/scene.h b/src/scene.h
index 3ba8ddc..85a62ed 100644
--- a/src/scene.h
+++ b/src/scene.h
@@ -83,7 +83,27 @@ public:
 	virtual void aboutToAccess() const {}
 
 protected:
+	/* A bit about OpenGL state:
+	 *
+	 *   If we're not inside the draw cycle (ie. the 'draw()'
+	 * handle), you're free to change any GL state through
+	 * gl-util, except for those in GLState which you should
+	 * push/pop as needed.
+	 *
+	 *   If we're _drawing_, you should probably not touch most
+	 * things in GLState. For scissored rendering, use push with
+	 * setIntersect(), and then pop afterwards.
+	 * Blendmode you can push/pop as you like. Do NOT touch viewport.
+	 * Texture/Shader bindings you're free to modify without
+	 * cleanup (and therefore you should expect dirty state).
+	 * Do NOT touch the FBO::Draw binding. If you have to do work
+	 * immediately before drawing that touches this (such as flushing
+	 * Bitmaps), use the 'prepareDraw' signal in SharedState that
+	 * will fire immediately before each frame draw.
+	 */
 	virtual void draw() = 0;
+
+	// FIXME: This should be a signal
 	virtual void onGeometryChange(const Scene::Geometry &) {}
 
 	/* Compares to elements in terms of their display priority;