Skip to content
Aditya Vaidyam edited this page Jan 14, 2019 · 2 revisions

Here lies some form of documentation and reference on the internal workings of Core Animation.framework and DIYAnimation.framework.

	Render
		Object -> simple refcounting object model 
		Array -> simple array wrapper for ^ objects
		Vector -> float array with n elements
		Encoder -> Codable-like
		Decoder -> Codable-like
		Message -> Wire message (i.e. XPC)
		Shmem -> mach_vm_allocate + mach_vm_region + mach_make_memory_entry_64 + mach_vm_map/remap
			ShmemBitmap -> unrelated
		Image -> Shmem + metadata (colorspace, etc) wrapper
		ImageProvider -> requires context command-based sync
		ImageQueue -> Shmem + object lookup + server->client ping update()
		ShapeImage -> Shmem + CGPath->scanconvert 
			TiledShapeImage -> same as ^ but tiled
		Texture -> virtual class for:
			TiledTexture -> used by ImageProvider?
			Surface -> IOSurface wrapper
			PixelBuffer -> Shmem + CVPixelBuffer metadata
		Filter -> cifilter + color map filters
		Transition -> ...
		Layer -> ...
		LayerSubclass -> ...
			GradientLayer -> ...
			ShapeLayer -> ...
			ReplicatorLayer -> ...
			EmitterLayer -> ...
				EmitterCell -> ...
			LayerHost -> ...
		Animation -> ...
			BasicAnimation -> ...
			PropertyAnimation -> ...
			KeyframeAnimation -> ...
			TransitionAnimation -> ...
			GroupAnimation -> ...
			MatchMoveAnimation -> ...
		Function -> ...
			NamedFunction -> ...
		Timing -> maps timing back and forth
		Interpolator -> basically unused?
		AnimationEvaluator -> first pass, second pass, copy transition ???
		Path -> CGPath wrapper
		Pattern -> CGPattern + CGColorSpace via raw Shmem
		TileCache -> used by OGL for tiled render
		LayerNode -> OGL rendering intermediate (w/ LocalState + GlobalState)
		Handle -> wrapper for transaction commands (+/- anims, set layer, etc)
		Proxy -> proxy for context object via lookup()
		Context -> layer client for the server
		Update -> server render request
		Server -> server thread + port + messaging + protect server vm space
	OGL
		Context -> virtual for v
			SWContext -> software renderer
			GLContext -> base GL renderer
				EAGLContext -> mobile
				CGLContext -> desktop
			MetalContext -> metal renderer
		ImagingNode -> virtual for v
			QuadNode -> simple quad
			LayerNode -> ...
			MaskNode -> ...
			ShadowNode -> ...
			CompositeNode -> composite filter
			BackdropNode -> i.e contents blur
			CacheNode -> rasterize stuff
			FilterNode -> bg + layer filters
			CombineNode -> ???
		RenderSurface -> new surface to render to
		Layer -> ???
		GState -> rendering state
		ContentsGeometry -> ???
			TiledImageGeometry -> ???

TODO:

Sublayer_filters_renderOrder ContentsGravity_resizeAspect ContentsGravity_resizeAspectFill ContentsGravity_bottomLeft Filters_blur_background Filters_blur_foreground

Clone this wiki locally