1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> 3<!-- saved from url=(0013)about:internet --> 4<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl"> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 7 <style xmlns="" type="text/css"> 8 /* This style sets a margin around the entire page */ 9 html, body { 10 margin: 10px; 11 } 12 13 p { 14 font: normal 16px verdana, sans-serif; 15 margin: 0; 16 padding-bottom:12px; 17 } 18 19 h1 { 20 font: bold 25px verdana, sans-serif; 21 margin-top: 0; 22 margin-bottom: 3px; 23 padding-top: 0; 24 padding-bottom: 0; 25 } 26 27 h2 { 28 font: bold 19px verdana, sans-serif; 29 margin-top: 28px; 30 margin-bottom: 3px; 31 padding-top: 0; 32 padding-bottom: 0; 33 } 34 35 h3 { 36 font: bold 19px verdana, sans-serif !important; 37 margin-top: 28px; 38 margin-bottom: 3px; 39 padding-top: 0; 40 padding-bottom: 0; 41 } 42 43 li { 44 font: normal 16px verdana, sans-serif; 45 margin-top: 0; 46 margin-bottom: 18px; 47 padding-top: 0; 48 padding-bottom: 0; 49 } 50 51 .pdparam { 52 font: italic 16px verdana, sans-serif; 53 } 54 55 .term { 56 font: italic 16px verdana, sans-serif; 57 font-weight: normal; 58 } 59 60 .type { 61 font: normal 16px verdana, sans-serif !important; 62 } 63 64 .parameter { 65 font-style: italic; 66 } 67 68 a:link, a:visited { 69 color: blue; 70 text-decoration: none; 71 font: normal 16px; 72 } 73 74 a:hover { 75 background-color: #FFFF99; 76 font: normal 16px; 77 } 78 79 div.funcsynopsis { 80 text-align: left; 81 background-color: #e6e6e6; 82 font: normal 16px verdana, sans-serif; 83 padding-top: 10px; 84 padding-bottom: 10px; 85 } 86 87 div.funcsynopsis table { 88 border-collapse: separate; 89 font: normal 16px verdana, sans-serif; 90 } 91 92 div.funcsynopsis td { 93 background-color: #e6e6e6; 94 border: 0 solid #000; 95 padding: 1px; 96 font: normal 16px verdana, sans-serif; 97 } 98 99 div.refsect1 { 100 font-family: verdana, sans-serif; 101 font-size: 16px; 102 } 103 104 code.constant { 105 font: normal 16px courier new, monospace !important; 106 } 107 108 span.errorname { 109 font: normal 16px verdana, sans-serif !important; 110 } 111 112 code.function { 113 font: bold 16px verdana, sans-serif !important; 114 } 115 116 b.fsfunc { 117 font: bold 16px verdana, sans-serif !important; 118 } 119 120 code.varname { 121 font: italic 16px verdana, sans-serif; 122 } 123 124 code.replaceable { 125 font: italic 16px courier new, monospace; 126 } 127 128 code.funcdef { 129 font: normal 16px verdana, sans-serif !important; 130 } 131 132 .citerefentry { 133 font: normal 16px verdana, sans-serif !important; 134 } 135 136 .parameter { 137 font-style: italic; 138 } 139 140 code.fsfunc { 141 font: normal 16px verdana, sans-serif !important; 142 } 143 144 /* PARAMETER: This style controls spacing between the terms in Parameter section */ 145 dt { 146 margin-top: 15px; 147 } 148 149 /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */ 150 div.refsect1 table { 151 width: 100%; 152 margin-top: 10px; 153 background-color: #FFF; 154 border-collapse: collapse; 155 border-color: #000; 156 border-width: 1px; 157 font: normal 16px verdana, sans-serif; 158 } 159 160 div.refsect1 th { 161 border-collapse: collapse; 162 border-color: #000; 163 border-width: 1px; 164 font: bold 16px verdana, sans-serif; 165 } 166 167 div.refsect1 td { 168 background-color: #FFF; 169 padding: 5px; 170 vertical-align: text-top; 171 border-collapse: collapse; 172 border-color: #000; 173 border-width: 1px; 174 font: normal 16px verdana, sans-serif; 175 } 176 177 div.refsect1 p{ 178 font: normal 16px verdana, sans-serif; 179 margin-top: 8px; 180 margin-bottom: 8px; 181 padding-top: 0; 182 padding-bottom: 0; 183 } 184 185 186 /* EXAMPLE: These styles apply only to the Example section */ 187 div.refsect2 { 188 font: normal 16px courier new, monospace !important; 189 } 190 191 div.refsect2 table { 192 margin-top: 0; 193 background-color: #e6e6e6; 194 width: 100%; 195 border: 0 solid #000; 196 padding: 2px; 197 font: normal 16px courier new, monospace !important; 198 } 199 200 div.refsect2 td { 201 background-color: #e6e6e6; 202 font: normal 16px courier new, monospace !important; 203 white-space:pre; 204 } 205 206 /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */ 207 div.refsect3 { 208 font: normal 11px verdana, sans-serif; 209 margin-top: 50px; 210 margin-bottom: 20px; 211 padding-top: 0; 212 padding-bottom: 0; 213 } 214 215</style> 216 <title>eglCreatePbufferFromClientBuffer</title> 217 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /> 218 </head> 219 <body> 220 <div class="refentry"> 221 <a id="eglCreatePbufferFromClientBuffer"></a> 222 <div class="titlepage"></div> 223 <div xmlns="" class="refnamediv"> 224 <h1>eglCreatePbufferFromClientBuffer</h1> 225 <p> 226 create a new <acronym xmlns="http://www.w3.org/1999/xhtml" class="acronym">EGL</acronym> pixel buffer surface 227 bound to an OpenVG image 228 </p> 229 </div> 230 <div class="refsynopsisdiv"> 231 <h2>C Specification</h2> 232 <div class="funcsynopsis"> 233 <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0"> 234 <tr valign="bottom"> 235 <td> 236 <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">EGLSurface <strong class="fsfunc">eglCreatePbufferFromClientBuffer</strong>(</code> 237 <td>EGLDisplay <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">display</var>, </td> 238 </td> 239 </tr> 240 <tr valign="top"> 241 <td> </td> 242 <td>EGLenum <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">buftype</var>, </td> 243 </tr> 244 <tr valign="top"> 245 <td> </td> 246 <td>EGLClientBuffer <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">buffer</var>, </td> 247 </tr> 248 <tr valign="top"> 249 <td> </td> 250 <td>EGLConfig <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">config</var>, </td> 251 </tr> 252 <tr valign="top"> 253 <td> </td> 254 <td>EGLint const * <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">attrib_list</var><code>)</code></td> 255 </tr> 256 </table> 257 </div> 258 </div> 259 <div class="refsect1"> 260 <a id="parameters"></a> 261 <h2>Parameters</h2> 262 <div class="variablelist"> 263 <dl class="variablelist"> 264 <dt> 265 <span class="term"> 266 <em class="parameter"> 267 <code>display</code> 268 </em> 269 </span> 270 </dt> 271 <dd> 272 <p>Specifies the EGL display connection.</p> 273 </dd> 274 <dt> 275 <span class="term"> 276 <em class="parameter"> 277 <code>buftype</code> 278 </em> 279 </span> 280 </dt> 281 <dd> 282 <p> 283 Specifies the type of client API buffer to be bound. 284 Must be <code class="constant">EGL_OPENVG_IMAGE</code>, 285 corresponding to an OpenVG <span class="type">VGImage</span> 286 buffer. 287 </p> 288 </dd> 289 <dt> 290 <span class="term"> 291 <em class="parameter"> 292 <code>buffer</code> 293 </em> 294 </span> 295 </dt> 296 <dd> 297 <p> 298 Specifies the OpenVG <span class="type">VGImage</span> handle of 299 the buffer to be bound. 300 </p> 301 </dd> 302 <dt> 303 <span class="term"> 304 <em class="parameter"> 305 <code>config</code> 306 </em> 307 </span> 308 </dt> 309 <dd> 310 <p> 311 Specifies the EGL frame buffer configuration that defines the 312 frame buffer resource available to the surface. 313 </p> 314 </dd> 315 <dt> 316 <span class="term"> 317 <em class="parameter"> 318 <code>attrib_list</code> 319 </em> 320 </span> 321 </dt> 322 <dd> 323 <p> 324 Specifies pixel buffer surface attributes. 325 May be <code class="constant">NULL</code> or empty 326 (first attribute is <code class="constant">EGL_NONE</code>). 327 </p> 328 </dd> 329 </dl> 330 </div> 331 </div> 332 <div class="refsect1"> 333 <a id="description"></a> 334 <h2>Description</h2> 335 <p> 336 <code class="function">eglCreatePbufferFromClientBuffer</code> creates an 337 off-screen pixel buffer surface and returns its handle. If 338 <code class="function">eglCreatePbufferFromClientBuffer</code> fails to create 339 a pixel buffer surface, <code class="constant">EGL_NO_SURFACE</code> 340 is returned. 341 </p> 342 <p> 343 The new pixel buffer surface is similar to a pixel buffer 344 created with 345 <a class="citerefentry" href="eglCreatePbufferSurface.html"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferSurface</span></span></a>, 346 but storage for the color buffer is provided by a client API 347 buffer. Other buffer required by 348 <em class="parameter"><code>config</code></em>, such as depth, stencil, and 349 alpha mask, are allocated by EGL. 350 </p> 351 <p> 352 <em class="parameter"><code>buftype</code></em> must be 353 <code class="constant">EGL_OPENVG_IMAGE</code>, corresponding to an 354 OpenVG <span class="type">VGImage</span> buffer. 355 <em class="parameter"><code>buffer</code></em> must be a valid 356 <span class="type">VGImage</span> handle in the current OpenVG context, 357 cast into the type <span class="type">EGLClientBuffer</span>. 358 </p> 359 <p> 360 The height, width,, OpenVG alpha format, and OpenVG 361 colorspace (surface attributes 362 <code class="constant">EGL_HEIGHT</code>, 363 <code class="constant">EGL_WIDTH</code>, 364 <code class="constant">EGL_VG_ALPHA_FORMAT</code>, and 365 <code class="constant">EGL_VG_COLORSPACE</code>, respectively) of the 366 resulting surface are determined by the size and format of 367 <em class="parameter"><code>buffer</code></em>. 368 </p> 369 <p> 370 Surface attributes are specified as a list of 371 attribute-value pairs, terminated with 372 <code class="constant">EGL_NONE</code>. Accepted attributes are: 373 </p> 374 <div class="variablelist"> 375 <dl class="variablelist"> 376 <dt> 377 <span class="term"> 378 <code class="constant">EGL_MIPMAP_TEXTURE</code> 379 </span> 380 </dt> 381 <dd> 382 <p> 383 Specifies whether storage for mipmaps should be 384 allocated. Space for mipmaps will be set aside if 385 the attribute value is <code class="constant">EGL_TRUE</code> 386 and <code class="constant">EGL_TEXTURE_FORMAT</code> is not 387 <code class="constant">EGL_NO_TEXTURE</code>. The default 388 value is <code class="constant">EGL_FALSE</code>. 389 </p> 390 </dd> 391 <dt> 392 <span class="term"> 393 <code class="constant">EGL_TEXTURE_FORMAT</code> 394 </span> 395 </dt> 396 <dd> 397 <p> 398 Specifies the format of the texture that will be 399 created when a pbuffer is bound to a texture map. 400 Possible values are 401 <code class="constant">EGL_NO_TEXTURE</code>, 402 <code class="constant">EGL_TEXTURE_RGB</code>, and 403 <code class="constant">EGL_TEXTURE_RGBA</code>. The default 404 value is <code class="constant">EGL_NO_TEXTURE</code>. 405 </p> 406 </dd> 407 <dt> 408 <span class="term"> 409 <code class="constant">EGL_TEXTURE_TARGET</code> 410 </span> 411 </dt> 412 <dd> 413 <p> 414 Specifies the target for the texture that will be 415 created when the pbuffer is created with a texture 416 format of <code class="constant">EGL_TEXTURE_RGB</code> or 417 <code class="constant">EGL_TEXTURE_RGBA</code>. Possible 418 values are <code class="constant">EGL_NO_TEXTURE</code>, or 419 <code class="constant">EGL_TEXTURE_2D</code>. The default 420 value is <code class="constant">EGL_NO_TEXTURE</code>. 421 </p> 422 </dd> 423 </dl> 424 </div> 425 <p> 426 Any EGL rendering context that was created with respect to 427 <em class="parameter"><code>config</code></em> can be used to render into the 428 surface. Use 429 <a class="citerefentry" href="eglMakeCurrent.html"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a> 430 to attach an EGL rendering context to the surface. 431 </p> 432 <p> 433 Use 434 <a class="citerefentry" href="eglQuerySurface.html"><span class="citerefentry"><span class="refentrytitle">eglQuerySurface</span></span></a> 435 to retrieve the dimensions of the allocated pixel buffer 436 surface or the ID of <em class="parameter"><code>config</code></em>. 437 </p> 438 <p> 439 Use <a class="citerefentry" href="eglDestroySurface.html"><span class="citerefentry"><span class="refentrytitle">eglDestroySurface</span></span></a> 440 to destroy the surface. 441 </p> 442 </div> 443 <div class="refsect1"> 444 <a id="notes"></a> 445 <h2>Notes</h2> 446 <p> 447 <code class="function">eglCreatePbufferFromClientBuffer</code> is 448 supported only if the EGL version is 1.2 or greater, and if 449 the EGL implementation supports the OpenVG client API. 450 </p> 451 <p> 452 Currently 453 <code class="function">eglCreatePbufferFromClientBuffer</code> only 454 supports binding OpenVG <span class="type">VGImage</span> buffers to 455 pixel buffers. While other client API resources could be 456 supported in the future, mechanisms such as OpenGL ES 457 framebuffer objects, and the family of EGL and client API 458 extensions for defining and using <span class="type">EGLImageKHR</span> 459 images, are a more flexible and general framework to satisfy 460 most of the same needs. 461 </p> 462 <p> 463 If the value of <em class="parameter"><code>config</code></em> attribute 464 <code class="constant">EGL_TEXTURE_FORMAT</code> is not 465 <code class="constant">EGL_NO_TEXTURE</code>, then the pbuffer width 466 and height specify the size of the level zero texture image 467 </p> 468 <p> 469 If <code class="constant">EGL_LARGEST_PBUFFER</code> is specified and 470 if the pbuffer will be used as a texture (i.e. the value of 471 <code class="constant">EGL_TEXTURE_TARGET</code> is 472 <code class="constant">EGL_TEXTURE_2D</code>, and the value of 473 <code class="constant">EGL_TEXTURE FORMAT</code> is 474 <code class="constant">EGL_TEXTURE_RGB</code> or 475 <code class="constant">EGL_TEXTURE_RGBA</code>), then the aspect 476 ratio will be preserved and the new width and height will be 477 valid sizes for the texture target (e.g. if the underlying 478 OpenGL ES implementation does not support non-power-of-two 479 textures, both the width and height will be a power of 2). 480 </p> 481 <p> 482 The contents of the depth and stencil buffers may not be 483 preserved when rendering a texture to the pbuffer and 484 switching which image of the texture is rendered to (e.g., 485 switching from rendering one mipmap level to rendering 486 another). 487 </p> 488 <p> 489 Binding client API buffers to EGL pbuffers create the 490 possibility of race conditions, and of buffers being deleted 491 through one API while still in use in another API. To avoid 492 these problems, a number of constraints apply to bound 493 client API buffers: 494 </p> 495 <div class="orderedlist"> 496 <ol class="orderedlist" type="1"> 497 <li class="listitem"> 498 <p> 499 Bound buffers may be used exclusively by either EGL, 500 or the client API that originally created them. For 501 example, if a <span class="type">VGImage</span> is bound to a 502 pbuffer, and that pbuffer is bound to any client API 503 rendering context, then the <span class="type">VGImage</span> may 504 not be used as the explicit source or destination of 505 any OpenVG operation. Errors resulting from such use 506 are described in client API specifications. 507 Similarly, while a <span class="type">VGImage</span> is in use by 508 OpenVG, the pbuffer it is bound to may not be made 509 current to any client API context using 510 <a class="citerefentry" href="eglMakeCurrent.html"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a>. 511 </p> 512 </li> 513 <li class="listitem"> 514 <p> 515 Binding a buffer creates an additional reference to 516 it, and implementations must respect outstanding 517 references when destroying objects. For example, if 518 a <span class="type">VGImage</span> is bound to a pbuffer, 519 destroying the image with 520 <code class="function">vgDestroyImage</code> will not free 521 the underlying buffer, because it is still in use by 522 EGL. However, following 523 <code class="function">vgDestroyImage</code> the buffer may 524 only be referred to via the EGL pbuffer handle, 525 since the OpenVG handle to that buffer no longer 526 exists. Similarly, destroying the pbuffer with 527 <code class="function">eglDestroySurface</code> will not free 528 the underlying buffer, because it is still in use by 529 OpenVG . However, following 530 <code class="function">eglDestroySurface</code> the buffer 531 may only be referred to via the OpenVG 532 <span class="type">VGImage</span> handle, since the EGL pbuffer 533 handle no longer exists. 534 </p> 535 </li> 536 </ol> 537 </div> 538 <p> 539 </p> 540 </div> 541 <div class="refsect1"> 542 <a id="errors"></a> 543 <h2>Errors</h2> 544 <p> 545 <code class="constant">EGL_NO_SURFACE</code> is returned if creation of 546 the context fails. 547 </p> 548 <p> 549 <code class="constant">EGL_BAD_DISPLAY</code> is generated if 550 <em class="parameter"><code>display</code></em> is not an EGL display connection. 551 </p> 552 <p> 553 <code class="constant">EGL_NOT_INITIALIZED</code> is generated if 554 <em class="parameter"><code>display</code></em> has not been initialized. 555 </p> 556 <p> 557 <code class="constant">EGL_BAD_CONFIG</code> is generated if 558 <em class="parameter"><code>config</code></em> is not an EGL frame buffer configuration. 559 </p> 560 <p> 561 <code class="constant">EGL_BAD_PARAMETER</code> is generated if 562 <em class="parameter"><code>buftype</code></em> is not 563 <code class="constant">EGL_OPENVG_IMAGE</code>, or if 564 <em class="parameter"><code>buffer</code></em> is not a valid handle to a 565 <span class="type">VGImage</span> object in the currently bound OpenVG 566 context. 567 </p> 568 <p> 569 <code class="constant">EGL_BAD_ACCESS</code> is generated if there is 570 no current OpenVG context, or if 571 <em class="parameter"><code>buffer</code></em> is already bound to another 572 pixel buffer or in use by OpenVG as discussed in the Notes 573 section above. 574 </p> 575 <p> 576 <code class="constant">EGL_BAD_ALLOC</code> is generated if there are not 577 enough resources to allocate the new surface. 578 </p> 579 <p> 580 <code class="constant">EGL_BAD_ATTRIBUTE</code> is generated if 581 <em class="parameter"><code>attrib_list</code></em> contains an invalid pixel 582 buffer attribute or if an attribute value is not recognized 583 or out of range. 584 </p> 585 <p> 586 <code class="constant">EGL_BAD_ATTRIBUTE</code> is generated if 587 <em class="parameter"><code>attrib_list</code></em> contains any of the 588 attributes <code class="constant">EGL_MIPMAP_TEXTURE</code>, 589 <code class="constant">EGL_TEXTURE_FORMAT</code>, or 590 <code class="constant">EGL_TEXTURE_TARGET</code>, and 591 <em class="parameter"><code>config</code></em> does not support OpenGL ES 592 rendering (e.g. the EGL version is 1.2 or later, and the 593 <code class="constant">EGL_RENDERABLE_TYPE</code> attribute of 594 <em class="parameter"><code>config</code></em> does not include at least one 595 of <code class="constant">EGL_OPENGL_ES_BIT</code> or 596 <code class="constant">EGL_OPENGL_ES2_BIT</code>). 597 </p> 598 <p> 599 <code class="constant">EGL_BAD_MATCH</code> is generated if 600 <em class="parameter"><code>config</code></em> does not support rendering to pixel buffers 601 (the <code class="constant">EGL_SURFACE_TYPE</code> attribute does not contain 602 <code class="constant">EGL_PBUFFER_BIT</code>). 603 </p> 604 <p> 605 <code class="constant">EGL_BAD_MATCH</code> is generated if the 606 buffers contained in <em class="parameter"><code>buffer</code></em> do not 607 match the bit depths for those buffers specified by 608 <em class="parameter"><code>config</code></em>. 609 </p> 610 <p> 611 <code class="constant">EGL_BAD_MATCH</code> is generated if the 612 <code class="constant">EGL_TEXTURE_FORMAT</code> attribute is not 613 <code class="constant">EGL_NO_TEXTURE</code>, and 614 <code class="constant">EGL_WIDTH</code> and/or 615 <code class="constant">EGL_HEIGHT</code> specify an invalid size 616 (e.g., the texture size is not a power of 2, and the 617 underlying OpenGL ES implementation does not support 618 non-power-of-two textures). 619 </p> 620 <p> 621 <code class="constant">EGL_BAD_MATCH</code> is generated if 622 the <code class="constant">EGL_TEXTURE_FORMAT</code> attribute is 623 <code class="constant">EGL_NO_TEXTURE</code>, and 624 <code class="constant">EGL_TEXTURE_TARGET</code> is something other 625 than <code class="constant">EGL_NO_TEXTURE</code>; or, 626 <code class="constant">EGL_TEXTURE_FORMAT</code> is something other 627 than <code class="constant">EGL_NO_TEXTURE</code>, and 628 <code class="constant">EGL_TEXTURE_TARGET</code> is 629 <code class="constant">EGL_NO_TEXTURE</code>. 630 </p> 631 <p> 632 <code class="constant">EGL_BAD_MATCH</code> is generated if the 633 implementation has additional constraints on which types of 634 client API buffers may be bound to pixel buffer surfaces. 635 For example, it is possible that the OpenVG implementation 636 might not support a <span class="type">VGImage</span> being bound to a 637 pixel buffer which will be used as a mipmapped OpenGL ES 638 texture (e.g. whose <code class="constant">EGL_MIPMAP_TEXTURE</code> 639 attribute is <code class="constant">TRUE</code>). Any such 640 constraints should be documented by the implementation 641 release notes. 642 </p> 643 </div> 644 <div class="refsect1"> 645 <a id="seealso"></a> 646 <h2>See Also</h2> 647 <p> 648 <a class="citerefentry" href="eglDestroySurface.html"><span class="citerefentry"><span class="refentrytitle">eglDestroySurface</span></span></a>, 649 <a class="citerefentry" href="eglChooseConfig.html"><span class="citerefentry"><span class="refentrytitle">eglChooseConfig</span></span></a>, 650 <a class="citerefentry" href="eglCreatePbufferSurface.html"><span class="citerefentry"><span class="refentrytitle">eglCreatePbufferSurface</span></span></a>, 651 <a class="citerefentry" href="eglGetConfigs.html"><span class="citerefentry"><span class="refentrytitle">eglGetConfigs</span></span></a>, 652 <a class="citerefentry" href="eglMakeCurrent.html"><span class="citerefentry"><span class="refentrytitle">eglMakeCurrent</span></span></a>, 653 <a class="citerefentry" href="eglQuerySurface.html"><span class="citerefentry"><span class="refentrytitle">eglQuerySurface</span></span></a> 654 </p> 655 </div> 656 <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p> 657Copyright © 2003-2014 The Khronos Group Inc. 658Permission is hereby granted, free of charge, to any person obtaining a 659copy of this software and/or associated documentation files (the 660"Materials"), to deal in the Materials without restriction, including 661without limitation the rights to use, copy, modify, merge, publish, 662distribute, sublicense, and/or sell copies of the Materials, and to 663permit persons to whom the Materials are furnished to do so, subject to 664the condition that this copyright notice and permission notice shall be included 665in all copies or substantial portions of the Materials. 666</div> 667 </div> 668 </body> 669</html> 670