blob: b0609cf88c7072bae534f0789fd4de5885533589 [file] [log] [blame]
Andreas Bollecd5c7c2012-06-12 09:05:03 +02001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html lang="en">
3<head>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8">
5 <title>Off-screen Rendering</title>
6 <link rel="stylesheet" type="text/css" href="mesa.css">
7</head>
8<body>
Brian Paul0b27ace2003-03-08 17:38:57 +00009
Andreas Bollb5da52a2012-09-18 18:57:02 +020010<div class="header">
11 <h1>The Mesa 3D Graphics Library</h1>
12</div>
13
14<iframe src="contents.html"></iframe>
15<div class="content">
16
Andreas Bollecd5c7c2012-06-12 09:05:03 +020017<h1>Off-screen Rendering</h1>
Brian Paul0b27ace2003-03-08 17:38:57 +000018
19
20<p>
Brian Paule35b9052006-05-19 03:42:16 +000021Mesa's off-screen rendering interface is used for rendering into
22user-allocated blocks of memory.
23That is, the GL_FRONT colorbuffer is actually a buffer in main memory,
24rather than a window on your display.
25There are no window system or operating system dependencies.
26One potential application is to use Mesa as an off-line, batch-style renderer.
Brian Paul0b27ace2003-03-08 17:38:57 +000027</p>
Brian Paule35b9052006-05-19 03:42:16 +000028
Brian Paul0b27ace2003-03-08 17:38:57 +000029<p>
Andreas Boll210a27d2012-06-12 09:05:36 +020030The <b>OSMesa</b> API provides three basic functions for making off-screen
Brian Paul0b27ace2003-03-08 17:38:57 +000031renderings: OSMesaCreateContext(), OSMesaMakeCurrent(), and
32OSMesaDestroyContext(). See the Mesa/include/GL/osmesa.h header for
Brian Paule35b9052006-05-19 03:42:16 +000033more information about the API functions.
Brian Paul0b27ace2003-03-08 17:38:57 +000034</p>
Brian Paule35b9052006-05-19 03:42:16 +000035
Brian Paul0b27ace2003-03-08 17:38:57 +000036<p>
Andreas Boll7b314b32012-09-20 16:01:15 +020037There are several examples of OSMesa in the mesa/demos repository.
Brian Paul0b27ace2003-03-08 17:38:57 +000038</p>
39
40
Andreas Boll210a27d2012-06-12 09:05:36 +020041<h2>Deep color channels</h2>
Brian Paul0b27ace2003-03-08 17:38:57 +000042
43<p>
Brian Paule35b9052006-05-19 03:42:16 +000044For some applications 8-bit color channels don't have sufficient
45precision.
46OSMesa supports 16-bit and 32-bit color channels through the OSMesa interface.
47When using 16-bit channels, channels are GLushorts and RGBA pixels occupy
488 bytes.
49When using 32-bit channels, channels are GLfloats and RGBA pixels occupy
5016 bytes.
Brian Paul0b27ace2003-03-08 17:38:57 +000051</p>
Brian Paule35b9052006-05-19 03:42:16 +000052
Brian Paul0b27ace2003-03-08 17:38:57 +000053<p>
Brian Paule35b9052006-05-19 03:42:16 +000054Before version 6.5.1, Mesa had to be recompiled to support exactly
55one of 8, 16 or 32-bit channels.
56With Mesa 6.5.1, Mesa can be compiled for either 8, 16 or 32-bit channels
57and render into any of the smaller size channels.
58For example, if Mesa's compiled for 32-bit channels, you can also render
5916 and 8-bit channel images.
60</p>
61
62<p>
63To build Mesa/OSMesa for 16 and 8-bit color channel support:
Brian Paul0b27ace2003-03-08 17:38:57 +000064<pre>
Brian Paul58be9e62004-09-24 20:31:02 +000065 make realclean
66 make linux-osmesa16
Brian Paul0b27ace2003-03-08 17:38:57 +000067</pre>
68
Brian Paule35b9052006-05-19 03:42:16 +000069<p>
70To build Mesa/OSMesa for 32, 16 and 8-bit color channel support:
Brian Paul0b27ace2003-03-08 17:38:57 +000071<pre>
Brian Paul58be9e62004-09-24 20:31:02 +000072 make realclean
73 make linux-osmesa32
Brian Paul0b27ace2003-03-08 17:38:57 +000074</pre>
75
76<p>
Brian Paul7357f202003-05-02 15:05:02 +000077You'll wind up with a library named libOSMesa16.so or libOSMesa32.so.
Brian Paule35b9052006-05-19 03:42:16 +000078Otherwise, most Mesa configurations build an 8-bit/channel libOSMesa.so library
79by default.
80</p>
81
82<p>
83If performance is important, compile Mesa for the channel size you're
84most interested in.
Brian Paul7357f202003-05-02 15:05:02 +000085</p>
86
87<p>
Brian Paul58be9e62004-09-24 20:31:02 +000088If you need to compile on a non-Linux platform, copy Mesa/configs/linux-osmesa16
89to a new config file and edit it as needed. Then, add the new config name to
90the top-level Makefile. Send a patch to the Mesa developers too, if you're
91inclined.
Brian Paul0b27ace2003-03-08 17:38:57 +000092</p>
Brian Paul58be9e62004-09-24 20:31:02 +000093
Andreas Bollb5da52a2012-09-18 18:57:02 +020094</div>
Andreas Bollecd5c7c2012-06-12 09:05:03 +020095</body>
96</html>