[OpenJDK 2D-Dev] RFR: 8269806: Emoji rendering on Linux

Phil Race prr at openjdk.java.net
Sun Aug 22 23:38:23 UTC 2021

On Thu, 15 Jul 2021 17:29:01 GMT, Nikita Gubarkov <github.com+9004656+YaaZ at openjdk.org> wrote:

> It was implemented in JetBrains Runtime a year ago and was ported & refactored for this PR
> It includes:
> - Bitmap glyph loading via Freetype
> - Manual scaling & transformation of bitmap glyphs with nearest-neighbor or bilinear-mipmap style algorithms depending on the text antialiasing hint
> - Storing BGRA glyphs in glyph cache & rendering them as plain images, as currently used XRender text drawing functions doesn't support colored glyphs
> - Small fixes in related code like null-checks which could cause NPE & comment typos

I'm in the early stages but
1) It doesn't build on the OL6.4 "official" build environment (note SFAIK the latest info
is still here : https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms)

Maybe there'll be an update for JDK 18 but it hasn't happened yet

src/java.desktop/share/native/libfontmanager/freetypeScaler.c:1193:24: error: 'FT_LOAD_COLOR' undeclared (first use in this function)
         renderFlags |= FT_LOAD_COLOR;
src/java.desktop/share/native/libfontmanager/freetypeScaler.c:1193:24: note: each undeclared identifier is reported only once for each function it appears in
src/java.desktop/share/native/libfontmanager/freetypeScaler.c:1259:50: error: 'FT_PIXEL_MODE_BGRA' undeclared (first use in this function); did you mean 'FT_PIXEL_MODE_GRAY'?
         } else if (ftglyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) {

At the very least this means you will need to include defines for these if they aren't defined and make sure
that symbols that may be similarly from a later freetype than available on older linuxes are loaded dynamically
and the support skipped where it doesn't exist.

2) I see Xrender code changes but am wondering what happens with the X11 and OpenGL pipelines ?
 Errors of some code ? Silently behaves like this new code doesn't exist ?

OK I can partially answer that one - garbage rendering with X11 on Ubuntu 20.04

Looks like you are supplying the BRGA glyphs but no loops to handle it.

This needs to be implemented for X11 and OpenGL


PR: https://git.openjdk.java.net/jdk/pull/4798

More information about the 2d-dev mailing list