Hi,<br><br>I've just put together a webref of the xrender pipeline-rewrite for a first review. <br>Please ignore the content of the xrender-repo, I finally gave up on using hg for this task.<br>Please take a look at the webref located at: <a href="http://78.31.67.79:8080/jxrender/downloads/jxrender_20080820.zip">http://78.31.67.79:8080/jxrender/downloads/jxrender_20080820.zip</a><br>
<br>Many things are not as mature/clean as I wished they would be, and some areas are just plain ugly ;) ... but I guess waiting any longer would just increase the risk of missing JDK7.<br><br>The webref contains two small "fixes" required to make the JDK build on Fedora-Rawhide, please ignore them for now.<br>
The "pure-java" backend is for now experimental only and disabled by default, as it is not well tested and requires some enhancements.<br><br>Thanks, Clemens<br><br>PS: below you find some kind of status-document with questions inside. would be great if somebody could take a look at the open questions.<br>
<br><br><b><u>Known bugs:</u></b><br>1. CopyArea GC leak. It seems XRSurfaceDara.flush() is only called for Pixmaps, even when overrriden in XRSurfaceData, is there any way to get a notification when a window is disposed?<br>
<br>2. Sometimes I get bad XID errors for different operations.<br><br>3. How can that happen? Only loops for X11 destination surfaces have been registered:<br>  Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.awt.image.BufImgSurfaceData cannot be cast to sun.java2d.xr.XRSurfaceData                                                                                            <br>
        at sun.java2d.xr.XRPMBlitLoops.cacheToTmpSurface(XRPMBlitLoops.java:154)                                       <br>        at sun.java2d.xr.XrSwToPMBlit.Blit(XRPMBlitLoops.java:365)                                                     <br>
        at sun.java2d.pipe.DrawImage.blitSurfaceData(DrawImage.java:953)  <br><br>4. X11 automatic flush does not work (see e.g. Java2Demo, without antialiasing, high delay). <br>Commands are flushed only when events occur or the output-buffer is full.<br>
<br>5. How does the SW->Surface blit behave, if tmp>source? (interpolation issues??).<br>Possible solution: Simply set up source-rectangle, this will emulate surface boundaries.<br><br><br><u><b>TODO: </b></u><br>- D3D pipeline needs adjustments to the new GlyphInfo structure (managed=1)<br>
- Proprietary glyph scaler needs to initialize managed-field at GlyphInfo initialition<br>- Implement tracing support (java2d.trace=log/count)<br><br><br><b><u>Possible enhancements:</u></b><br>- Improve blit-mask handling to save fillrate (use scaling without modifying the mask contents if possible)<br>
- Implement linear gradients using a 1xY temporary pixmap.<br><br><br><b><u>System bugs/troubles:</u></b><br>- XPutImage+Composite used for MaskFill is slow, especially on intel<br>- Rendering artifacts for TransformedBlits intel<br>
- Uploading multiple glyphs at once crashes the XServer<br><br><br><b><u>Open Questions: </u></b><br><br>- How does pipeline initialization interier with font stuff?<br>Why does it need static initialization instead of how it is done for now? (mark knows more about that, fixed it recently),<br>
<br>- How to install an appropriate ColorModel and use it, instead of bit-twiddling with the pixel value we get?<br><br>- Is there a reliable way of detecting if a glpyh is LCD or grayscale? For zero-width glyphs rowBytes==width doesn't do the trick.<br>
For now, I upload a zero-width glyph as lcd, if GlyphList contains other lcd glyphs.<br>Would streamline the code in some cases a bit.<br><br>- How does the pipeline behave on bgBlits? Does it fallback to sw loops, or simply emulate the behaviour with a two-step operation. <br>