-
Notifications
You must be signed in to change notification settings - Fork 3
/
listing6.html
executable file
·200 lines (170 loc) · 7.99 KB
/
listing6.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- BEGIN META TAG INFO -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="home" href="http://developer.apple.com/">
<link rel="find" href="http://developer.apple.com/search/">
<link rel="stylesheet" type="text/css" href="../../documentation/css/adcstyle.css" title="fonts">
<script language="JavaScript" src="../../documentation/js/adc.js" type="text/javascript"></script>
<!-- END META TAG INFO -->
<!-- BEGIN TITLE -->
<title>OpenGLScreenSnapshot - /read me.txt</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body>
<!--END BODY OPEN -->
<!-- START CENTER OPEN -->
<center>
<!-- END CENTER OPEN -->
<!-- BEGIN LOGO AND SEARCH -->
<!--#include virtual="/includes/adcnavbar"-->
<!-- END LOGO AND SEARCH -->
<!-- START BREADCRUMB -->
<div id="breadcrumb">
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td scope="row"><img width="340" height="10" src="images/1dot.gif" alt=""></td>
<td><img width="340" height="10" src="images/1dot.gif" alt=""></td>
</tr>
<tr valign="middle">
<td align="left" colspan="2">
<a href="http://developer.apple.com/">ADC Home</a> > <a href="../../referencelibrary/index.html#//apple_ref/doc/uid/TP30000943" target="_top">Reference Library</a> > <a href="../index.html#//apple_ref/doc/uid/TP30000925" target="_top">Sample Code</a> > <a href="../GraphicsImaging/index.html#//apple_ref/doc/uid/TP30000925-TP30000424" target="_top">Graphics & Imaging</a> > <a href="../GraphicsImaging/idxOpenGL-date.html#//apple_ref/doc/uid/TP30000925-TP30000424-TP30000549">OpenGL</a> > <A HREF="javascript:location.replace('index.html');">OpenGLScreenSnapshot</A> >
</td>
</tr>
<tr>
<td colspan="2" scope="row"><img width="680" height="35" src="images/1dot.gif" alt=""></td>
</tr>
</table>
</div>
<!-- END BREADCRUMB -->
<!-- START MAIN CONTENT -->
<!-- START TITLE GRAPHIC AND INTRO-->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td><h1><div id="pagehead">OpenGLScreenSnapshot</div></h1></td>
</tr>
</table>
<!-- END TITLE GRAPHIC AND INTRO -->
<!-- START WIDE COLUMN -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td id="scdetails">
<h2>/read me.txt</h2>
<form name="scpopupmenu" onSubmit="return false;" method=post>
<p><strong>View Source Code:</strong>
<select name="gotop" onChange="JumpToNewPage();" style="width:340px"><option selected value="ingnore">Select File</option>
<option value="listing1.html">/main.m</option>
<option value="listing2.html">/MyController.h</option>
<option value="listing3.html">/MyController.m</option>
<option value="listing4.html">/OpenGLScreenReader.h</option>
<option value="listing5.html">/OpenGLScreenReader.m</option>
<option value="listing6.html">/read me.txt</option></select>
</p>
</form>
<p><strong><a href="OpenGLScreenSnapshot.zip">Download Sample</a></strong> (“OpenGLScreenSnapshot.zip”, 38.8K)<BR>
<strong><a href="OpenGLScreenSnapshot.dmg">Download Sample</a></strong> (“OpenGLScreenSnapshot.dmg”, 40.9K)</p>
<!--
<p><strong><a href="#">Download Sample</a></strong> (“filename.sit”, 500K)</p>
-->
</td>
</tr>
<tr>
<td scope="row"><img width="680" height="10" src="images/1dot.gif" alt=""><br>
<img height="1" width="680" src="images/1dot_919699.gif" alt=""><br>
<img width="680" height="20" src="images/1dot.gif" alt=""></td>
</tr>
<tr>
<td scope="row">
<!--googleon: index -->
<pre class="sourcecodebox">READ ME - OpenGLScreenSnapshot
v1.1 6/27/08
-----------------------------
OpenGLScreenSnapshot is a Mac OS X application which demonstrates how to use
OpenGL to grab a "snapshot" of the screen and save it to a image file on disk.
This sample uses the OpenGL glReadPixels function to get the pixel data for the
screen. This technique is actually very simple to use, and is sufficient for
grabbing a single or a very few frames.
Building the Sample
-------------------
The sample was built using Xcode 3 on Mac OS X 10.5. You can just open the
project and choose Build from the Build menu. This will build the
OpenGLScreenSnapshot application in the "Build" directory.
Using the Sample
----------------
To try out the OpenGLScreenSnapshot application, launch the application and
select the "Capture" menu, then choose the "Screen Snapshot" menu item. The
program will then take a single "snapshot" of the current screen and save the
screen grab to a TIFF image file on the desktop.
How It Works
------------
As stated above, the sample shows how to use the glReadPixels() function for
capturing the screen: a synchronous, but easy way for capturing a single or very
few frames.
Synchronous capture using glReadPixels() is fairly simple approach. Simply call
this function and OpenGL will read pixel data from the framebuffer for you. But
glReadPixels() by its very nature is an expensive function call. Therefore, care
must be taken when using glReadPixels() that it is done in the most effective
and efficient way possible. The glReadPixels() function will cause a synch point
to be placed in the command stream. This synch point forces a synchronization
between the CPU and GPU, which can have the effect of stalling the rendering
pipeline. When this occurs, performance is guaranteed to suffer while either CPU
or GPU is waiting for the other to catch up.
Asynchronous texture fetching is another technique for grabbing the screen
bits, and it offers much better performance, but it is also more complicated.
See the OpenGL documentation on the ADC website for more information about
asynchronous texture fetching.
Additional Information
----------------
For additional information, see the following documents:
OpenGL Performance Optimizations : The Basics
<http://developer.apple.com/technotes/tn2004/tn2093.html>
OpenGL Programming Guide For Mac OS X
<http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/index.html>
Finally, note that only minimal error checking is provided in this sample. In
production code, a robust error handling strategy must be devised at the
architectural level. This is left as an exercise for the reader.
</pre>
<!--googleoff: index -->
</td>
</tr>
</table>
<!-- END WIDE COLUMN -->
<!-- END MAIN CONTENT -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div style="width: 100%; height: 1px; background-color: #919699; margin-top: 5px; margin-bottom: 15px"></div></td>
</tr>
<tr>
<td align="center"><br/>
<table border="0" cellpadding="0" cellspacing="0" class="graybox">
<tr>
<th>Did this document help you?</th>
</tr>
<tr>
<td>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=1&url=/samplecode/OpenGLScreenSnapshot/listing6.html%3Fid%3DDTS10004288-1.1&media=dvd" target=_new>Yes</a>: Tell us what works for you.</div>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=2&url=/samplecode/OpenGLScreenSnapshot/listing6.html%3Fid%3DDTS10004288-1.1&media=dvd" target=_new>It’s good, but:</a> Report typos, inaccuracies, and so forth.</div>
<div><a href="http://developer.apple.com/feedback/?v=3&url=/samplecode/OpenGLScreenSnapshot/listing6.html%3Fid%3DDTS10004288-1.1&media=dvd" target=_new>It wasn’t helpful</a>: Tell us what would have helped.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- START BOTTOM APPLE NAVIGATION -->
<!--#include virtual="/includes/footer"-->
<!-- END BOTTOM APPLE NAVIGATION -->
<!-- START CENTER CLOSE -->
</center>
<!-- END CENTER CLOSE -->
</body>
</html>