Chien answered some of these, but here are my answers (inline)...

On 1/3/14 9:40 AM, Steve Hannah wrote:

Prism. We do mix HW and SW in that we generate masks from a path in SW,
but we cache that on the card and render it using shaders.

Can you describe roughly how the caching works?  I understand that the
alpha mask is stored in OGL as a texture, but there are an infinite number
of possible paths to be masked. How many textures can be stored at once (on
say an iPhone)?  I'm guessing JavaFX uses some sort of LRU caching
algorithm for these textures?

As Chien mentioned, Lombard/JDK8 has a new texture management component that lets us purge textures as needed on a LRU basis. The caching tends to simply just validate the cached mask on every Shape node that has a cached mask on every frame and it sometimes finds that the texture needs to be recreated if we are running low. Worst case, the cached texture needs to be recreated on every frame.

I ask this because I've been playing around directly with the Pisces C
library directly to generate alpha masks and render them using shaders.  I
can see a performance increase of 4x in using alpha masks rather than full
argb pixels (due to 1 byte per pixel instead of 4), but I'm curious about
other savings that JavaFX makes with this method.

Are you referring to the C version of Pisces in the FX sources? Actually, there are 2 currently in the FX source base. There is one version (which has both a Java and native port) of the Pisces renderer that historically came from OpenJDK which got its version from an embedded port of Java that didn't use Ductus. It is used by the D3D and OGL pipelines. The second version came in when the SW pipeline was added recently, it went back to the original source base that had Pisces integrated with a full set of rendering loops and it brought that whole package in to be a complete rendering solution. So there may be some divergence between the two versions of the rasterizer given the circuitous history of how the version used by D3D/OGL got into the FX source base and the fact that there was some work done on both versions since they diverged back in the OpenJDK early days.

I'd be curious to see your work and how it might help us to have some tighter integration between the rasterizers and the OGL/D3D shaders...


Reply via email to