coin_libraries(3)

πŸ“¦
version 4.0.10 Β· 4 versions
, in fedora 43, fedora 44

✨ NAME ✨

coin_libraries β€” Coin's whole complicated friend-group of 3rd party libraries πŸ’–

okay so bestie, this is coin_libraries(3) (section 3 of the Coin manual, you're welcome), and it's basically the group chat roster of everyone Coin hangs out with. 🫢

Coin may use a wide variety of 3rd party libraries, both directly and indirectly, depending on how the Coin build was configured. This document is our little attempt to summarize the whole situation. Some libraries that are a standard part of an operating system are just… ignored here, no shade, they're just always there. πŸ’…

Real talk though: this document expects that you're already familiar with library build processes, and that you know your way around concepts like "configure-time", "linktime", and "runtime" as they relate to library builds and behaviour. iykyk. 🧚


🌈 OpenGL & friends 🌈

First of all, Coin requires OpenGL. periodt. Depending on the OpenGL version, features in Coin get turned on and off. So if a feature Coin is supposed to support isn't producing any result, make sure to check that the underlying OpenGL version actually supports that feature β€” not me blaming the vibe, it's genuinely the version. πŸ”

OpenGL is linked into Coin both at linktime and at runtime. Features that were added to OpenGL later than the oldest version of OpenGL we support in Coin are always tried to be linked up at runtime, and if that fails, it will disable features in Coin or cause alternate implementations of features to be used instead. πŸ’€

OpenGL also comes with a little entourage of auxiliary libraries that we use too:

  • GLext
  • GLU β€” for NURBS tessellation and texture mipmapping, amongst others πŸ‘‘
  • CgGL β€” for shaders that use Cg (and by the way, we recommend using GLSL instead πŸ’…)

Out of these, CgGL is loaded at runtime if needed, while the others are linked with Coin at linktime.

Some platforms have GLU libraries that just do not behave properly in certain respects, and some Coin users have particular needs with respect to Coin's use of GLU. For those users, we (at Kongsberg Oil & Gas Technologies) have created a fork of GLU that we named SuperGLU, and we've tweaked it in certain ways. This library can be checked out into the Coin source code directory, which will be detected at configure-time and linked statically into Coin, and used instead of the GLU libraries on the host system. iconic behaviour, honestly. ✨

On top of all that, Coin will use AGL on Mac OS X, WGL on Microsoft Windows, and GLX on X Window Systems, all for offscreen rendering purposes. πŸ–ΌοΈ


πŸ“ the non-OpenGL girlies πŸ“

Now we move on to the libraries that are not related to OpenGL. 🌸

Coin uses libz (aka zlib) and libbzip2 to read and/or write files compressed with either of those compression techniques. Both libraries can be linked with Coin at linktime or loaded at runtime, and this is controlled at configure-time. They can also be disabled entirely if compressed file input/output is not wanted. Heads up: libz is likely to be pulled in as a dependency from other libraries as well, especially graphics libraries. πŸ™ˆ

For font support, Coin uses Fontconfig or FreeType in addition to native platform APIs for font reading. FreeType can be loaded at runtime instead of linked at linktime if desired, but FreeType is only used if Fontconfig is not found at configure-time anyway β€” unless the library builder overrides this behaviour. πŸ‘‘

For JavaScript support in VRML97, Coin uses SpiderMonkey. SpiderMonkey can also be loaded at runtime instead of linked at linktime.

For sound support in VRML97, Coin uses OpenAL. OpenAL is loaded at runtime or linked at linktime. Oh and by the way, some versions of the OpenAL library delivered with installers from Creative on Microsoft Windows have been known to crash/freeze Coin-applications when loaded, so if you experience something like that, that's one thing to investigate. 😭

For threading support, Coin uses POSIX threads (the pthread library) or the native Win32 API on Microsoft Windows. You can use pthread on MS Windows as well instead of the native threads, by setting this at configure-time. 🧡


πŸ¦‹ the integrated besties πŸ¦‹

We now come to a special class of libraries that has been directly integrated into the Coin source code, thereby not requiring the libraries to be installed on the system beforehand for Coin to build or run. no cap. πŸŽ€

For XML reading, Coin uses the Expat library, which has also been integrated directly into Coin, so also here there are no extra linktime or runtime dependencies to other libraries. The Expat API is not exposed in the Coin API β€” it is hidden β€” but Coin provides its own XML DOM API that is a wrapper over the Expat engine. 🀫

The last thing to mention here is hardly a library, but we mention it anyway. Coin uses flex and bison to generate some parsers (one for the STL 3D model file format, and another one for parsing the calculator language in the SoCalculator engine). This is code that has been generated by 3rd party parser generators and integrated into Coin. The generated code is distributed with the source code, so neither flex nor bison are needed to build Coin. πŸ’…

And last but definitely not least, Coin uses simage. 🌟


🌸 The simage library 🌸

Coin uses a library called simage, which is a 1st part library, since we have written it ourselves. main character energy, obviously. πŸ’–

simage is a thin wrapper library over a huge set of graphics and audio libraries, there to provide Coin with a unified API for loading images (textures), audio, and animations, regardless of which image file format it is stored as. In other words, the simage library can pull in another whole set of 3rd party libraries. All 3rd party libraries to simage are optional. 🫢

simage is loaded at runtime or (if specified) linked at linktime with Coin.

simage can use:

  • QImage from Qt, to add support for the file formats Qt supports.
  • GDI+ (gdiplus) under Microsoft Windows, to add support for the file formats supported by GDI+.
  • QuickTime under Mac OS X, to add support for the file formats QuickTime supports.
  • libungif or giflib for GIF file support.
  • libjpeg for JPEG file support.
  • libpng for PNG file support. This will also require that zlib is used.
  • libtiff for TIFF file support.
  • JASPER support for JPEG 2000 file support.
  • mpeg2enc for MPEG2 encoding.
  • vfw (Video for Windows) for AVI video encoding.
  • libogg, libvorbis and libvorbisfile for Ogg Vorbis support. This is for VRML97 sound support in Coin.
  • libsndfile for VRML97 sound support in Coin.
  • libguile for a Guile (Scheme) binding for the simage library API.

and that's the whole roster bestie, go forth and configure your build with confidence πŸ’œ

that's a wrap! πŸŽ€ this was Version 4.0.10, dated Thu Jun 25 2026 00:00:00 β€” mwah, slay, bye. πŸ’…βœ¨

πŸ“¦ where this page comes from