-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.html
executable file
·154 lines (131 loc) · 9.48 KB
/
index.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
<!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>TextureRange</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body><a name="//apple_ref/doc/uid/DTS10000551" title="TextureRange"></a>
<!--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">Reference Library</a> > <a href="../../samplecode/index.html">Sample Code</a> > <a href="../../samplecode/GraphicsImaging/index.html">Graphics & Imaging</a> > <a href="../../samplecode/GraphicsImaging/idxOpenGL-date.html">OpenGL</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">TextureRange</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">
<p><strong>Version:</strong> 1.0</p>
<p><strong>Posted:</strong> 2003-07-16</p>
<p><strong>Build Requirements:</strong> N/A</p>
<p><strong>Runtime Requirements:</strong> null ProjectBuilder, Mac OS X v10.2 or later</p>
<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">/AppController.h</option>
<option value="listing2.html">/AppController.m</option>
<option value="listing3.html">/main.m</option>
<option value="listing4.html">/MainOpenGLView.h</option>
<option value="listing5.html">/MainOpenGLView.m</option>
<option value="listing6.html">/MyApplication.h</option>
<option value="listing7.html">/MyApplication.m</option></select>
</p>
</form>
<p><strong><a href="TextureRange.zip">Download Sample</a></strong> (“TextureRange.zip”, 1.35M)<BR>
<strong><a href="TextureRange.dmg">Download Sample</a></strong> (“TextureRange.dmg”, 1.42M)</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">
<h2>Description</h2>
<p>This demo shows the fundamental techniques required to fast texture upload performance: This is an updated and improved version of the texture range demo. There are 3 levels of optimization to implement to get the full benefit. Depending on what you're looking to do you can get anywhere from a 70% performance boost to a 800% performance boost. The first optimization is good for anything you're doing, the second two are only of non-power of two textures. 1) Using GL_UNPACK_CLIENT_STORAGE_APPLE This sequence should get you a ~70% texture performance improvement because this eliminates one data copy. Beware of of the fact that this tells OpenGL to use the app copy of the data. So don't trash your copy until you've deleted the texture from OpenGL. Create the texture with: glBindTextures( target, &texID); glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1); glTexImage2D(target, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); Update the texture with: glTexSubImage2D(target, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); 2) Enabling GL_TEXTURE_RECTANGLE_EXT. This will allow you to draw non-power of two textures. Be aware that using non-power of two textures also changes the textures coords from normalized coords to pixel coords. Make sure you check for the GL_TEXTURE_RECTANGLE_EXT extension before enabling. The Rage128 doesn't fulling support this extension. I'm working to add some code to the attached demo to show how to best optimize on the Rage128. Create the texture with: glBindTexture(GL_TEXTURE_RECTANGLE_EXT, &texID); glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); Update the texture with: glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); 3) Texture Range. This is a hint to OpenGL telling the system that you want VRAM or AGP texturing. Set the GL_TEXTURE_STORAGE_HINT_APPLE to GL_STORAGE_CACHED_APPLE or GL_STORAGE_SHARED_APPLE for requesting VRAM or AGP texturing respectively. GL_STORAGE_PRIVATE_APPLE is the default and specifies OpenGL normal texuring path. Additionally, you can use glTextureRangeAPPLEto specify an area of memory to be mapped vice each individual texture. This is useful for tiled or multiple textures in contiguous memory. Create the texture with: glBindTexture(GL_TEXTURE_RECTANGLE_EXT, &texID); if(texture_range) glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, IMAGE_COUNT * width * height * (IMAGE_DEPTH >> 3), image_ptr); else glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, 0, NULL); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_STORAGE_HINT_APPLE , GL_STORAGE_CACHED_APPLE); glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); Update the texture with: glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, image_ptr); With all 3 of these options correctly managed, what you get is async AGP/PCI DMA transfers straight from your memory to texture memory. Meaning that the driver never touches the pixels with the CPU. Requirements: ProjectBuilder, Mac OS X v10.2 or later Keywords: OpenGL, performance, texture, texture range, client storage, texture rectangle, non-power of two</p>
<h2>Document Revision History</h2>
<table cellspacing="0" class="graybox" width="680">
<tr>
<th width="100">Date</th>
<th width="580">Notes</th>
</tr>
<tr><td scope="row">2003-07-16</td><td>Shows the fundamental techniques required to fast texture upload performance.</td></tr>
</table>
</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/TextureRange/index.html%3Fid%3DDTS10000551-1.0&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/TextureRange/index.html%3Fid%3DDTS10000551-1.0&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/TextureRange/index.html%3Fid%3DDTS10000551-1.0&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>