Hello, Denis.
Thanks for this research!
On 09.07.2014 15:13, Denis Fokin wrote:
The current version consist of three parts.

1. We are rendering glyphs in offscreen images using Quartz functions. This does not work without kCGBitmapByteOrder32Host mask.
I assume LCD hint does not work? this looks good.

2. We assume that subpixel antialiasing should not be used on a non-opaque surface. As I understand the vImage in CGLVolatileSurfaceManager is not related directly to our window. For a start, I have hardcoded Transparency.OPAQUE, but it requires much better understanding of the architecture to make a more proper solution.
It is related to the CGLOffScreenSurfaceData, which is used as a surface for VolatileImages. I check this code and looks like we ignore type of the ColorModel and create a transparent native texture anyway.

3. When I started using CGGI_CopyImageFromCanvasToRGBInfo as a rendering mode, I had found that the little endian mode should be undefined. Again, it might be an improper way to do this.
It seems __LITTLE_ENDIAN__usage in this file should be checked.

Thank you,
   Denis.

diff -r f87c5be90e01 src/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java

--- a/src/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.javaFri Jun 20 10:15:30 2014 -0700

+++ b/src/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.javaWed Jul 09 14:50:09 2014 +0400

@@ -108,7 +108,7 @@

             } else {

                 CGLGraphicsConfig gc =

(CGLGraphicsConfig)vImg.getGraphicsConfig();

-                ColorModel cm = gc.getColorModel(vImg.getTransparency());

+                ColorModel cm = gc.getColorModel(Transparency.OPAQUE);

                 int type = vImg.getForcedAccelSurfaceType();

// if acceleration type is forced (type != UNDEFINED) then

// use the forced type, otherwise choose one based on caps

diff -r f87c5be90e01 src/macosx/native/sun/font/CGGlyphImages.m

--- a/src/macosx/native/sun/font/CGGlyphImages.mFri Jun 20 10:15:30 2014 -0700

+++ b/src/macosx/native/sun/font/    .mWed Jul 09 14:50:09 2014 +0400

@@ -196,6 +196,8 @@

 #pragma mark --- Font Rendering Mode Descriptors ---

+#undef __LITTLE_ENDIAN__

+

 static inline void

 CGGI_CopyARGBPixelToRGBPixel(const UInt32 p, UInt8 *dst)

 {

@@ -366,7 +368,8 @@

     canvas->context = CGBitmapContextCreate(canvas->image->data,

width, height, 8, bytesPerRow,

colorSpace,

- kCGImageAlphaPremultipliedFirst);

+ kCGImageAlphaPremultipliedFirst

+                                            | kCGBitmapByteOrder32Host);

CGContextSetRGBFillColor(canvas->context, 0.0f, 0.0f, 0.0f, 1.0f);

     CGContextSetFontSize(canvas->context, 1);



--
Best regards, Sergey.

Reply via email to