Original patch was posted to https://celestia.space/forum/viewtopic.php?f=4&t=17282
====================================
Here comes the original description:
====================================
Before this update, the celestia code supports only JPL Big Endian
ephemerides DE406/DE405/DE200.
The big endian ephemeris DE406 comes in chunk of 300 years. If you
want to concatenate several pieces, using the software provided by JPL
(which does not handle endianess), you need a big endian platform. The
little endian DE406 comes in one piece of 6000 years, so you don't
even need to concatenate this one.
This commit adds the following:
- support for both endianess with autodetection of endianess
- support for all JPL DE ephemeris (from DE200) with autodetection of
record size.
- support for JPL DE compatible ephemeris such as the INPOP ephemeris
from Paris observatory (only the ephemeris files in the legacy JPL DE
compatible format and with timescale TDB, not the INPOP native format,
or the TCB files). http://www.imcce.fr/inpop/download10e.php
The method to autodetect ephemeris type, record size and endianess is
based on the CALCEPH software.
It would probably be better if possible to wrap around the CALCEPH
library (so that it would also support INPOP native format) but this
would be more work.
In addition to the ephemeris number and the start and end date, the
record size and endianess are also printed to the log (which you get
by pressing the tilde key).
If the ephemeris is an INPOP ephemeris, then the ephemeris number is
not printed to the log: it just says "INPOP".
It has been tested with:
- DE406 big endian
- DE406 little endian
- DE405 big endian
- DE423 little endian
- INPOP10A little endian
on Linux/x86_64.
However, no accurate regression testing has been performed. It has
only been tested visually that the planets orbits do not look wrong
and that the log is reporting the correct endianess, record size and
ephemeris name.
* use GL_MESA_pack_invert to flip captured buffer
* move enum PixelFormat to own file
* use PixelFormat instead of GL formats in Image
* provide captureImage() in CelestiaCore
* use CelestiaCore methods to capture images in Qt UI
1) It's already calculated in CelestiaGLProgram::initParameters()
2) This decreases number of varying floats by 3 per light, so for the case
listed in #593 we save 9 floats, so 8 are available.