/// <summary>
        /// Disposes the control.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if(graphicsDeviceService != null) {
                graphicsDeviceService.Release(disposing);
                graphicsDeviceService = null;
            }

            base.Dispose(disposing);
        }
		/// <summary>
		/// Gets a reference to the singleton instance.
		/// </summary>
		public static GraphicsDeviceService AddRef(IntPtr windowHandle,
												   int width, int height) {
			// Increment the "how many controls sharing the device" reference count.
			if(Interlocked.Increment(ref referenceCount) == 1) {
				// If this is the first control to start using the
				// device, we must create the singleton instance.
				singletonInstance = new GraphicsDeviceService(windowHandle,
															  width, height);
			}

			return singletonInstance;
		}
        /// <summary>
        /// Initializes the control.
        /// </summary>
        protected override void OnCreateControl()
        {
            // Don't initialize the graphics device if we are running in the designer.
            if(!DesignMode) {
                graphicsDeviceService = GraphicsDeviceService.AddRef(Handle,
                                                                     ClientSize.Width,
                                                                     ClientSize.Height);

                // Register the service, so components like ContentManager can find it.
                services.AddService(typeof(GraphicsDeviceService), graphicsDeviceService);

                // Give derived classes a chance to initialize themselves.
                Initialize();
            }

            base.OnCreateControl();
        }