1libraries(3Version) libraries(3Version)
2
3
4
6 libraries - Coin use of 3rd party libraries.
7
8 Coin may use a wide variety of 3rd party libraries, directly and
9 indirectly, depending on how the Coin build was configured. This
10 document tries to summarize the situation. Some of the libraries that
11 are a standard part of an operating system are ignored here.
12
13 This document expects that the reader is familiar with library build
14 processes and has knowledge of various concepts such as 'configure-
15 time', 'linktime', and 'runtime' related to library builds and
16 behaviour.
17
18 First of all, Coin requires OpenGL. Depending on the OpenGL version,
19 features in Coin are turned on and off. If a feature Coin is supposed
20 to suport does not seem to produce any result, make sure to check that
21 the underlying OpenGL version does support that feature. OpenGL is
22 linked into Coin both at linktime and runtime. Features added to OpenGL
23 later than the oldest version of OpenGL we support in Coin are always
24 tried linked up at runtime, and failure to do so will disable features
25 in Coin or cause alternate implementations of features to be used
26 instead.
27
28 OpenGL is accompanied with a set of auxiliary libraries we also use.
29 These are libraries like GLext, GLU (for NURBS tessellation and texture
30 mipmaping amongst others), CgGL (for shaders that use Cg (we recommend
31 using GLSL instead BTW)). Of these libraries, CgGL is loaded at runtime
32 if needed, while the others are linked with Coin at linktime.
33
34 Some platforms have GLU libraries that don't behave properly in certain
35 respects, and some Coin users have particular needs wrt Coin's use of
36 GLU. For these users, we (at Kongsberg Oil & Gas Technologies) have
37 created a fork og GLU that we have named SuperGLU that we have tweaked
38 in certain ways. This library can be checked out into the Coin source
39 code directory, which will be detected at configure-time and linked
40 statically into Coin and used instead of the GLU libraries on the host
41 system.
42
43 In addition to these libraries, Coin will use AGL on Mac OS X, WGL on
44 MS Windows, and GLX on X Windows Systems for offscreen rendering
45 purposes.
46
47 We now move on to libraries that are not related to OpenGL.
48
49 Coin uses libz (aka zlib) and libbzip2 to read and/or write files
50 compressed with either of those compression techniques. Both libraries
51 can ble linked with Coin at linktime or loaded at runtime, and this is
52 controlled at configure-time. They can also be disabled if compressed
53 file input/output is not wanted. The libz library is likely to be
54 pulled in as a dependency from other libraries as well, especially
55 graphics libraries.
56
57 For font support, Coin uses Fontconfig or FreeType in addition to
58 native platform APIs for font reading. Freetype can be loaded at
59 runtime instead of linked at linktime if desired, but FreeType is only
60 used if Fontconfig is not found at configure-time anyway, unless the
61 library builder overrides this behaviour.
62
63 For JavaScript support in VRML97, Coin uses SpiderMonkey. SpiderMonkey
64 can also be loaded at runtime instead of linked at linktime.
65
66 For sound support in VRML97, Coin uses OpenAL. OpenAL is loaded at
67 runtime or linked at linktime. BTW, some versions of the OpenAL library
68 delivered with installers from Creative on MS Windows have been known
69 to crash/freeze Coin-applications when loaded, so if you experience
70 something like that, that's one thing to investigate.
71
72 For threading support, Coin uses POSIX threads (pthread library) or the
73 native Win32 API on MS Windows. You can use pthread on MS Windows as
74 well instead of the native threads by setting this at configure-time.
75
76 We now come to a special class of libraries that has been directly
77 integrated into the Coin source code, thereby not requiring the
78 libraries to be installed on the system beforehand for Coin to build or
79 run.
80
81 Coin makes use of certain utilities like smart-pointers from Boost. The
82 boost headers can be found under include/ in the Coin source code
83 directory. No boost types are exposed in the Coin API, nor will they
84 ever be. They are completely hidden, viewed from the outside of Coin.
85 All boost types used in Coin are completely inlined in the boost
86 headers and therefore do not require a link library to pull their
87 implementation from at runtime.
88
89 For XML reading, Coin uses the expat library, which has also been
90 integrated directly into Coin, so also here there are no extra linktime
91 or runtime dependencies to other libraries. The expat API is not
92 exposed in the Coin API, it is hidden, but Coin provides its own XML
93 DOM API that is a wrapper over the expat engine.
94
95 The last thing to mention here is hardly a library, but we mention it
96 anyway. Coin uses flex and bison to generate some parsers (one for the
97 STL 3D model file format, and another one for parsing the calculator
98 language in the SoCalculator engine). This is code that has been
99 generated by 3rd party parser generators and integrated into Coin. The
100 generated code is distributed with the source code, so neither flex nor
101 bison is needed to build Coin.
102
103 And last but definitely not least, Coin uses simage...
104
106 Coin uses a library called simage, which is a 1st part library since we
107 have written it ourselves. Simage is a thin wrapper library over a huge
108 set of graphics and audio libraries, to provide Coin with a unified API
109 for loading images (textures), audio, and animations, regardless of
110 which image file format it is stored as. The simage library can in
111 other words pull in another set of 3rd party libraries. All 3rd party
112 libraries to simage are optional. Simage is loaded at runtime or (if
113 specified) linked at linktime with Coin.
114
115 Simage can use QImage from Qt to add support for the file formats Qt
116 supports.
117
118 Simage can use GDI+ (gdiplus) under MS Windows to add support for the
119 file formats supported by GDI+.
120
121 Simage can use QuickTime under Mac OS X to add support for the file
122 formats QuickTime supports.
123
124 Simage can use libungif or giflib for GIF file support.
125
126 Simage can use libjpeg for JPEG file support.
127
128 Simage can use libpng for PNG file support. This will also require that
129 zlib is used.
130
131 Simage can use libtiff for TIFF file support.
132
133 Simage can use JASPER support for JPEG 2000 file support.
134
135 Simage can use mpeg2enc for MPEG2 encoding.
136
137 Simage can use vfw (Video for Windows) for AVI video encoding.
138
139 Simage can use libogg, libvorbis and libvorbisfile for Ogg Vorbis
140 support. This is for VRML97 sound support in Coin.
141
142 Simage can use libsndfile for VRML97 sound support in Coin.
143
144 Simage can use libguile for a Guile (Scheme) binding for the Simage
145 library API.
146
147
148
149Coin 3.1.3" libraries(3Version)