1. A method of caching fragment programs for rendering images on a graphics processing unit, comprising: receiving a render tree specifying one or more filters to be applied to an image, each filter corresponding to a node of the render tree, and one or more parameters for those filters; computing a hash value of the render tree by applying a hash function to the nodes of the render tree but not to the parameters; comparing the computed hash value to one or more hash values corresponding to one or more cached, previously compiled fragment programs for execution on a graphics processing unit to determine whether a cached fragment program corresponding to the render tree is available; and when a cached fragment program corresponding to the render tree is available, retrieving the cached fragment program, passing the parameters to the retrieved cached fragment program, and executing the retrieved cached fragment program to perform a render; and when a cached fragment program corresponding to the render tree is not available, generating, compiling, and executing a new fragment program to perform the render and caching the new fragment program.