Update with current status
[gnash.git] / librender / README
blob943d06848758fb81ae5b00fc044cd24a8596c31d
1 There is a process here that has to happen in a specific order. The
2 first step is to initialize the base hardware platform. Normally for
3 X11 you can assume this has already happened. If using EGL from Mesa
4 on X11, then we stil need to do this step, as EGL is out interface,
5 not X11.
7 After the device layer is initialized, then the renderer gets
8 created. This is just the base initilization though, as the rest needs
9 a window to draw into. So the next step after initilizing the renderer
10 is to initialize the GUI. For a framebuffer, either EGL or DirectFB
11 are used on the bare device.
13 Once the GUI is initilized, it can then pass the window for the
14 renderer to draw into. The renderer initizlizes a surface using the
15 window handle, and then make that surface the current context.
17 Rendering always happens in a back buffer, and is merely swapped with
18 the displayed one after rendering.
20 The main difference between how the Gnash renderers used to work and
21 the way they work now is they have gained device knowledge. In the
22 embedded world, all GPUs have varying levels of acceleration
23 support. This functionality is probed at runtime now, and the optimal
24 acceleration support selected automatically. For the features without
25 hardware accleration available, they will be renderered in software.
27 This allows us Gnash to take advantage of each GPUs support where it
28 best makes sense. Until recently, Gnash just depended on whatever the
29 X11 desktop supplied. To run properly without X11 though, requires the
30 ability in Gnash to supply the missing support.
32 Currently 3 devices are supported, as these are the most portable. The
33 primary default device is EGL, as it's used by OpenVG, OpenGLES1, and
34 OpenGLES2, on both embedded and desktop platforms. When using Gallium
35 drivers under libMesa, EGL supports hardware acceleration for the
36 higher level libraries.
38 The DirectFB device is a bit of a special case, as it's both an
39 accleration library and a GUI toolkit. So this one has support in both
40 librender and gui libraries. For rendering, only the device specific
41 parts of DirectFB are used.
43 The X11 device is primarily for testing and for running EGL on
44 X11. This makes X11 follow the same API as the other devices, and
45 allows simple window creation via xlib for testing renderers.
47 GnashDevice
48         > EglDevice
49         > X11Device
50         > DirectFBDevice
52 Renderer
53         > Renderer_base_agg
54           > Renderer_agg
55         > Renderer_ogl
56         > Renderer_gles1
57         > Renderer_gles2
58         > Renderer_ovg