<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>High Speed Visualization in the JetOS Aviation Operating System Using Hardware Acceleration*</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>The Keldysh Institute of the Applied Mathematics of RAS</institution>
          ,
          <addr-line>Moscow</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2067</year>
      </pub-date>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>The paper discusses details of the pilot display visualization that uses the hardware acceleration capabilities of the Vivante graphics processor in the JetOS aviation operating system. Previously the OpenGL Safety Critical library was implemented without hardware acceleration. This was done in such a way because software library is easier to certify in accordance with the avionics requirements. But usage of the software OpenGL does not provide acceptable visualization speed for modern Flight Display and 3D relief applications. So more complex visualization approach utilized the GPU acceleration capabilities was elaborated. Although the OpenGL library was implemented for a specific GPU and took into account its specificity, the described approach to adapt the MESA open source library can be used for other GPUs. An effective algorithm for multi-window visualization using the implemented library with hardware acceleration is present. The described approach allows you to achieve the visualization speed acceptable for the pilot display of the aircraft.</p>
      </abstract>
      <kwd-group>
        <kwd>Pilot Display</kwd>
        <kwd>Embedded Systems</kwd>
        <kwd>Real-time Operating System</kwd>
        <kwd>OpenGL Safety Critical</kwd>
        <kwd>Multi-windowing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        In [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] requirements were formulated for a real-time operating system (RTOS)
designed to work with integrated modular avionics. In particular, the RTOS should
comply with the ARINC 653 standard [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. The software used in aircraft must be
certified in accordance to strict rules. The certification requires the correct software
development processes in accordance with DO-178C [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], as well as full access to source
codes. The real-time operating system JetOS [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] under development, which meets
these requirements, is currently being prepared for certification. An important
component of the on-board software is the pilot display visualization system which must
meet the OpenGL SC (Safety Critical) standard to be used in aviation software.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ] a software implementation of the OpenGL SC graphics library running
under the JetOS RTOS was presented. Software implementation of OpenGL is easier
to certify in accordance with the requirements described above. However, the use of
hardware acceleration provides a higher visualization speed. The achieved
visualization speed reported in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] was not satisfactory for typical aviation applications.
Moreover satisfactory speed for most of the analyzed applications was achieved using four
processor cores only. However the use of four cores is not always acceptable because
there are other consumers of computing resources in the on-board system. It also
creates certain problems for system certification.
      </p>
      <p>
        The goal of our research is to find a solution which provides visualization of a pilot
display in multiwindows mode with acceptable speed. And in the same time the
solution should possible to certificate for usage in civil aircrafts. The OpenGL software
solution mentioned above is close to this goal but not fully acceptable due to low
speed reason. This is why it was decided to investigate possibility to use the GPU
hardware acceleration. Because of certification requirement the MESA package [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
with open sources was the only choice.
      </p>
      <p>
        MESA (also called Mesa3D and the Mesa 3D Graphics Library) is an open source
software implementation of OpenGL, Vulkan, and other graphics API. MESA
translates the API specifications into manufacturer specific graphics hardware drivers. It is
focused on providing high performance when working with 3D-graphics through the
hardware acceleration provided by GPUs. For a particular GPU an appropriate
specific driver is required. Some processor manufacturers, such as AMD or Intel, develop
drivers for the open-source MESA package for their processors by themselves. Other
manufacturers, such as Nvidia or Vivante, completely replace the entire MESA,
providing their own proprietary implementation of the graphics API (OpenGL
library). For such equipment the MESA development community creates alternative
drivers (for example, Nouveau for Nvidia or Etnaviv for Vivante). The
implementation of various versions of OpenGL (including OpenGL SC) based on commercial
drivers is considered in [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ]. However using binary drivers in JetOS RTOS is not
possible due to certification requirements.
      </p>
      <p>Therefore an open source driver is needed to use the hardware acceleration of a
graphics processor in JetOS RTOS. Unfortunately a simple way – to use existent
drivers from MESA – does not work because MESA is elaborated mainly for Linux
and Windows. But the JetOS RTOS has a lot of own specifics. So in our case, when
using the i.MX6 platform with the Vivante GPU, the only way is to investigate
possibility to adapt MESA and Etnaviv driver codes. It should be noted that the system
requires two libraries for working with graphics: the first one provides the OpenGL
API and the second one directly displays the image built by the OpenGL library on
the monitor screen (the frame buffer library). In this paper we consider only the
implementation of the OpenGL.</p>
      <p>So the implementation of the GPU hardware support for visualization in the JetOS
operating system can be divided into two stages:
1. Adaptation of the MESA package to work under control of the JetOS RTOS;
2. Direct implementation of the OpenGL SC standard based on the adapted package.</p>
      <p>High Speed Visualization in the JetOS Aviation Operating System Using Hardware… 3
2</p>
    </sec>
    <sec id="sec-2">
      <title>Adaptation of the MESA package to work under control of the JetOS real time OS</title>
      <p>
        The MESA package is currently adapted only for use under operating systems such as
Linux, Android and Windows [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. For these operating systems, the compilation and
integration technology for most of the currently used GPUs is available in the MESA
package. But the development of applications, drivers and libraries for running under
JetOS is significantly different from the technology of software development for
Linux or Windows. To adapt the MESA package to work under the JetOS that meets
to the ARINC 653 standard, the following main problems must be solved:
1. Only appropriate JetOS special functions can be used to allocate memory.
2. Memory allocation is allowed only at the partition initialization stage.
3. Dynamic memory allocation, freeing memory is prohibited. This means that the
corresponding MESA calls must be excluded or rewritten using own memory
manager.
4. Any multithreading in accordance with the ARINC 653 specification cannot be
used. Therefore the corresponding MESA calls using mutex objects should be
excluded or rewritten.
5. The MESA package contains a large amount of code intended for use in various
operating systems for working with various graphic processors. All such redundant
code must be excluded in accordance with the DO-178C. The size of the source
code of the MESA package is ~125 megabytes and contains ~6000 files. Most of
them are not needed for OpenGL hardware acceleration of i.MX6 platform under
JetOS. But the package has complex structure with internal dependences. So
elicitation of redundant code is a challenging task.
      </p>
      <p>
        We succeeded to solve to some extent all the problems indicated in points 1–5 and
to implement the hardware OpenGL (HWGL) library based on the MESA package.
All aviation applications from [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ] were successfully executed under JetOS using
this library. The size of the library was reduced to ~40 megabytes and ~1600 files. Of
course the work is not completed yet. Further optimization of the code is necessary in
order to remove its unused parts (so-called “dead code” in term of DO-178C). For this
purpose the appropriate JetOS tools can be used that capture the use of various
functions during application running. Unused functions or code branches should be
excluded.
      </p>
      <p>
        After MESA code adaptation the OpenGL Safety Critical should be implemented
to make our library acceptable for avionics software. This work should be carried out
separately for standard OpenGL SC versions 1.0.1 and 2.0.1. The OpenGL SC 1.0.1
standard [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] was developed on the basis of the OpenGL 1.3 standard as a subset of it
with additional restrictions. They are mainly related to the prohibition of use of
double precision variables and certain restrictions on the permissible function parameters.
Thus the implementation of the OpenGL SC 1.0.1 standard is not so difficult.
Implementation of the library according to the OpenGL SC 2.0.1 standard [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] requires a
lot of efforts. The standard is based of the OpenGL ES 2.0 but it contains also
functions defined in the later OpenGL ES standards. In addition, the standard does not
define a function for shaders compilation. The standard defines only the
glProgramBinary function which provides the loading of a precompiled binary object. What
exactly compiler should be used for shaders is left, apparently, at the discretion of the
library developers. It looks reasonable to move the shader compiler to a separate
utility that will be used at the stage of application preparation. This should somewhat
simplify the certification of the system as a whole.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Visualization speed using hardware acceleration</title>
      <p>
        The hardware OpenGL SC 1.0.1 library implemented on the basis of the MESA
package was tested on the same aviation applications that were used for elaboration of the
software library in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. These are S_PFD (SSJ-100 Primary Flight Display), M_PFD
(MC-21 Primary Flight Display), Counters, GlassCockpit, FlightDisplay and SVS
(relief visualization). Table 1 shows the visualization speed (in frames per second) for
the software OpenGL (SWGL) from [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and the hardware OpenGL (HWGL)
elaborated by us basing on MESA. Column SWGL 1 presents speed for use of 1 core,
while SWGL 4 – 4 cores was used.
      </p>
      <p>It should be noted that the speed of 60 frames per second indicated in the table for
some applications is restricted by the display vertical synchronization frequency. The
speed of HWGL for these applications is higher. Thus, the use of our HWGL library
in the JetOS operating system allows to achieve significant visualization acceleration
due to the use of hardware acceleration of the Vivante GPU. The software
implementation even using four cores is faster for one specific application only.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Multi-window display visualization</title>
      <p>An important requirement for the aircraft's on-board system software is multi-window
visualization capabilities when various information, generated by numerous
independent flight control systems, is simultaneously displayed on one multi-function
display. For the software implementation of OpenGL, a compositor was developed in</p>
      <p>
        High Speed Visualization in the JetOS Aviation Operating System Using Hardware… 5
work [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. It receives images generated by various applications and displays them in
the specified screen windows using the frame buffer library. Two approaches were
considered in that work. In the first one all applications and the compositor work in
the own partitions, but on one processor core according ARINC 653 standard. In the
second one the so-called AMP technology was used when a separate instance of the
JetOS operating system was running on each processor core and so each application
and compositor works on own core. The acceptable visualization speed for aviation
systems was achieved with the second approach only.
      </p>
      <p>Unfortunately both compositor approaches cannot be used for OpenGL with
hardware acceleration. A typical aviation platform has only one GPU. We cannot use
separate OpenGL instance in each partition or instance of JetOS. So to solve this problem
we developed a new approach when OpenGL commands are executed in one special
partition of the JetOS operating system.</p>
      <p>The application using visualization via the OpenGL library for can be divided into
two parts:
1. Preparation of data necessary for OpenGL operation: geometry parameters, various
attributes, camera parameters, etc.
2. Direct execution of OpenGL functions with prepared data.</p>
      <p>In our implementation these components are run in different partitions of the JetOS
operating system. This allows us to separate data preparation and OpenGL execution
which has to use the only GPU in case of hardware acceleration. Each application
stores the indices of the OpenGL functions needed for visualization together with the
corresponding parameters in a special array. It is located in the memory shared with
the partition that performs real calls of the OpenGL functions (we will further call it
the OpenGL partition). When all the calls necessary for generating the one frame
image are prepared then the OpenGL partition is started. Only this partition uses the
HWGL library and load GPU. Fig. 1 illustrates the implemented approach.</p>
      <sec id="sec-4-1">
        <title>Application 1</title>
      </sec>
      <sec id="sec-4-2">
        <title>Application 2</title>
      </sec>
      <sec id="sec-4-3">
        <title>Application 3</title>
      </sec>
      <sec id="sec-4-4">
        <title>Application 4</title>
      </sec>
      <sec id="sec-4-5">
        <title>Buffer 1</title>
      </sec>
      <sec id="sec-4-6">
        <title>Buffer 2</title>
      </sec>
      <sec id="sec-4-7">
        <title>Buffer 3</title>
      </sec>
      <sec id="sec-4-8">
        <title>Buffer 4</title>
      </sec>
      <sec id="sec-4-9">
        <title>OpenGL</title>
      </sec>
      <sec id="sec-4-10">
        <title>Display</title>
        <p>The code for each application is used almost unchanged. Minimal changes are
necessary to provide necessary viewport position on the screen and to synchronize the
operation of applications and the OpenGL partition. Encoding of calls to the OpenGL
functions and writing the necessary data to the corresponding buffer is performed by
the special OGLOUT library. This library replaces the real calls to OpenGL functions
by writing the necessary data and indices of the corresponding OpenGL functions.</p>
        <p>The encoding itself is relatively simple. If the function passes a fixed number of
parameters, then the index of the called function is written to the current position of
the array, followed by the values of the parameters. This is applicable to the most of
OpenGL functions, such as glViewport(), glClearColor(), glClearDepthf(),
glClearStencil(), etc. In more complex cases when number of parameters is not defined at the
time of the call are passed (for example, glVertexPointer()) the encoding technology
is somewhat complicated. During the call of such functions, instead of the pointer, the
index of the reserved position in the output array is written. Then from this position
values are written by this pointer in functions such as glDrawArrays() or
glDrawElements().</p>
        <p>Decoding the information recorded by applications is performed in the OpenGL
partition using the OGLIN library sequentially for each array generated by the
applications. The OGLIN library consists of one function process_ogl_input_array(). It
sequentially reads data from the array written by the application, then according to the
index of the OpenGL function it goes to the piece of code written for this function and
extracts the data transferred from subsequent elements of the array including pointer
values. After that it calls the specified OpenGL function with extracted parameters.</p>
        <p>
          Disadvantage of this approach is that it is hard to implement the OpenGL functions
that return parameter values (such as, for example, glGenLists(), glGetError(),
glGetString(), glIsEnabled(), glGetPointerv(), glGetTexParameteriv()). However an
analysis of the currently used practical applications in onboard equipment has shown
that these functions are not used in them. Calls to these functions are also absent in
the OGLX library [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] which is currently used in the development of most onboard
applications with output to the display screen. Since according to DO-178C there
should not be a non-executable code (Dead code) in the on-board equipment software
we do not need to solve this problem
        </p>
        <p>
          Synchronization of the applications and the OpenGL partition is done using special
objects called events [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. Interaction between applications and the OpenGL partition
is implemented in the way close to the synchronization between client and servers
described in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] and we omit these details here to simplicity.
5
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>The multi-windowing algorithm performance</title>
      <p>The developed algorithm was tested using multi-window visualization of two pairs of
practical applications:
1. PFD (Primary Flight Display) and DOORS (state of aircraft doors), demonstrated
on Fig. 2;
2. PFD (Primary Flight Display) and ND (Navigation Display), demonstrated on
Fig. 3.</p>
      <p>High Speed Visualization in the JetOS Aviation Operating System Using Hardware… 7</p>
      <p>Table 2 shows multi-window visualization speed (in frames per second) for the
software OpenGL (SWGL) and the hardware OpenGL (HWGL). Visualization via the
SWGL library has the possibility to run each application with own instance of
OpenGL and compositor on own processor core. Visualization via the HWGL uses
the algorithm described in previous chapter. Column SWGL 1 presents speed for use
of 1 core, while SWGL 3 – 3 cores were used.</p>
      <p>It should be noted that the visualization approach presented in this paper (HWGL +
new multi-window algorithm) finally provides the speed which 2-3 times higher than
visualization speed in case of software libraries using. Taking into account that the
pilot display intended for visualization of information about flight and state of aircraft
systems (but not for a movie demonstration) the speed in 15-20 frames per second can
be considered as acceptable.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>Studies have shown the possibility to use the GPU hardware acceleration in avionics.
All study components – the JetOS real-time operating system, the OpenGL SC
standard, the Vivante GPU – impose own limitations and particularities. Additionally, we
always need to think about certification of on-board software according to the
DO178C avionics standard. All these complicated the project much. But finally we
succeeded to elaborate the approach and the algorithms which, on the one hand, provide
acceptable visualization speed for the aircraft pilot display and, on the other hand, can
be certified to be used in a real aviation operating system.</p>
      <p>The technology of the hardware OpenGL SC library creation basing on the
adaptation of the open-source MESA package can be applicable not only for the Vivante
GPU but for other graphics hardware as well.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Fedosov</surname>
            ,
            <given-names>E.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koverninskii</surname>
            ,
            <given-names>I.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kan</surname>
            ,
            <given-names>A.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Solodelov</surname>
          </string-name>
          , Yu.A.:
          <article-title>Application of real-time operating systems in integrated modular avionics</article-title>
          , https://osday.ru/2015/solodelov.html.
          <source>Last accessed 5 Jul 2020</source>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Ananda</surname>
            ,
            <given-names>C.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sabitha</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mainak</surname>
            ,
            <given-names>G.H.</given-names>
          </string-name>
          :
          <article-title>ARINC 653 API and its application - An insight into Avionics System Case Study</article-title>
          . Defence
          <source>Science Journal</source>
          <volume>63</volume>
          (
          <issue>2</issue>
          ),
          <fpage>223</fpage>
          -
          <lpage>229</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. DO-178C
          <source>Software Considerations in Airborne Systems and Equipment Certification</source>
          , https://en.wikipedia.org/wiki/DO-178C.
          <source>Last accessed 5 Jul 2020</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Mallachiev</surname>
            ,
            <given-names>K.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pakulin</surname>
            ,
            <given-names>N.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Khoroshilov</surname>
            ,
            <given-names>A.V.</given-names>
          </string-name>
          :
          <article-title>Design and architecture of real-time operating system</article-title>
          .
          <source>Proceedings of the Institute for System Programming</source>
          <volume>28</volume>
          (
          <issue>2</issue>
          ),
          <fpage>181</fpage>
          -
          <lpage>192</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Barladian</surname>
            ,
            <given-names>B.Kh.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Voloboy</surname>
            ,
            <given-names>A.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Galaktionov</surname>
            ,
            <given-names>V.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Knyaz</surname>
            ,
            <given-names>V.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koverninskii</surname>
            ,
            <given-names>I.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Solodelov</surname>
            ,
            <given-names>Yu.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Frolov</surname>
            ,
            <given-names>V.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shapiro</surname>
            ,
            <given-names>L.Z.</given-names>
          </string-name>
          :
          <article-title>Efficient Implementation of OpenGL SC for Avionics Embedded Systems</article-title>
          .
          <source>Programming and Computer Software</source>
          <volume>44</volume>
          (
          <issue>4</issue>
          ),
          <fpage>207</fpage>
          -
          <lpage>212</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Barladian</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Kh</surname>
          </string-name>
          .,
          <string-name>
            <surname>Shapiro</surname>
            ,
            <given-names>L.Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mallachiev</surname>
            ,
            <given-names>K.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Khoroshilov</surname>
            ,
            <given-names>A.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Solodelov</surname>
            ,
            <given-names>Yu.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Voloboy</surname>
            ,
            <given-names>A.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Galaktionov</surname>
            ,
            <given-names>V.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koverninskii</surname>
            ,
            <given-names>I.V.</given-names>
          </string-name>
          :
          <article-title>Visualization Component for the Aircraft Real-Time Operating System JetOS</article-title>
          .
          <source>Programming and Computer Software</source>
          <volume>46</volume>
          (
          <issue>3</issue>
          ),
          <fpage>167</fpage>
          -
          <lpage>175</lpage>
          (
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <source>The Mesa 3D Graphics Library</source>
          , https://www.mesa3d.org.
          <source>Last accessed 5 Jul 2020</source>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Baek</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lee</surname>
          </string-name>
          , H.:
          <source>OpenGL ES 1.1 Implementation Based on OpenGL. Multimedia Tools and Applications</source>
          <volume>57</volume>
          (
          <issue>3</issue>
          ),
          <fpage>669</fpage>
          -
          <lpage>685</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baek</surname>
          </string-name>
          , N.:
          <string-name>
            <surname>OpenGL SC Emulation</surname>
          </string-name>
          <article-title>Based on OpenGL and OpenGL ES</article-title>
          . In: Cozzi,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Riccio</surname>
          </string-name>
          , Ch. (eds.) OpenGL Insights, pp.
          <fpage>121</fpage>
          -
          <lpage>131</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. OpenGL Safity Critical specifications, https://www.khronos.org/registry/OpenGL/specs/sc.
          <source>Last accessed 5 Jul 2020</source>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Ansys SCADE Display</surname>
          </string-name>
          <article-title>Capabilities</article-title>
          . https://www.ansys.com/products/embeddedsoftware/ansys-scade
          <article-title>-display/scade-display-capabilities</article-title>
          .
          <source>Last accessed 5 Jul 2020</source>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>