From: Eli Zaretskii <eliz@gnu.org>
To: Alex Gramiak <agrambot@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Removing assumption of unsigned long pixel values for colours
Date: Mon, 06 May 2019 05:45:56 +0300 [thread overview]
Message-ID: <83pnowjo63.fsf@gnu.org> (raw)
In-Reply-To: <87h8a8k84a.fsf@gmail.com> (message from Alex Gramiak on Sun, 05 May 2019 13:35:01 -0600)
> From: Alex Gramiak <agrambot@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Sun, 05 May 2019 13:35:01 -0600
>
> It's certainly possible that I'm overestimating the cost of the
> conversions. It just doesn't seem good to have to do this conversion for
> every draw operation.
>
> Perhaps I should follow the old adage and just use unsigned long with
> conversions first and benchmark after.
Yes, please.
> > . it leaks to platform-independent parts of the code representation
> > that is specific to one platform, something that goes against
> > everything you've been doing lately in your other work
>
> I'm not sure what leaks you're referring to here. The cases that use
> .pixel directly should only be in the TTY-specific or X-specific code.
No, I meant the RGBA representation. The integer color values are our
current abstraction.
> > . the union you propose has no indication which of its
> > interpretations is being used, which will lead to bugs
>
> I considered that, but as it looks like faces are tied to frames (which
> are tied to terminals), then the type shouldn't need to be checked as
> long as the terminal-independent code doesn't alter it.
That "as long as" part is already a potential problem. And I see
other opportunities for exciting bugs.
> > (larger structures slow down Emacs)
>
> More so than other programs?
Why should other programs matter here? I don't want to have slow-down
in the inner-most loops of Emacs, because that causes legitimate user
complaints. Faces are used in redisplay.
> > If we want to increase the number of bits per pixel we support in
> > Emacs, we need to do that for all the platforms. Currently, they all
> > are aligned on 32 bpp, AFAIK. If indeed there will be loss of
> > information (and I'd like to see some evidence to that first), then we
> > need to move all the platforms to higher precision, not just one.
>
> Wouldn't it only need to be done for platforms that support a higher
> pixel depth?
No, we want all platforms to support the same color representation,
for various good reasons. For example, platform-independent
representation of standard colors.
> gdk_rgba_parse uses pango_color_parse, which returns a PangoColor (48
> bpp RGB), and normalizes each component over 2^16. If using either
> CAIRO_FORMAT_RGB30 (30 bpp RGB) with image surfaces or using the OpenGL
> backend (which I believe the GTK Wayland backend uses), then storing
> ARGB values into an unsigned long would mean lost precision that could
> have been used.
Once again, I'm okay with discussing a change for all the platforms,
but it needs to show benefits for all of them, or at least a
majority. What you describe could mean a use of a single 'double' for
a color; we definitely don't need 4 'double's yet.
next prev parent reply other threads:[~2019-05-06 2:45 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-04 18:08 Removing assumption of unsigned long pixel values for colours Alex Gramiak
2019-05-04 18:39 ` Eli Zaretskii
2019-05-04 23:04 ` Alex Gramiak
2019-05-05 16:14 ` Eli Zaretskii
2019-05-05 19:35 ` Alex Gramiak
2019-05-06 2:45 ` Eli Zaretskii [this message]
2019-05-06 14:13 ` Daniel Pittman
2019-05-06 16:11 ` Alex Gramiak
2019-05-06 16:51 ` Stefan Monnier
2019-05-06 20:03 ` Alex Gramiak
2019-05-06 15:11 ` Alex Gramiak
2019-05-06 15:45 ` Eli Zaretskii
2019-05-06 16:29 ` Alex Gramiak
2019-05-06 16:54 ` Eli Zaretskii
2019-05-06 17:14 ` Alex Gramiak
2019-05-06 17:39 ` Eli Zaretskii
2019-05-06 18:00 ` Eli Zaretskii
2019-05-06 19:49 ` Alex Gramiak
2019-05-07 2:29 ` Eli Zaretskii
2019-05-06 8:12 ` Alan Third
2019-05-06 9:18 ` mituharu
2019-05-06 15:06 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83pnowjo63.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=agrambot@gmail.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).