Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

subset-A.html 138KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>Mini GLX Specification</title>
  5. </head>
  6. <body>
  7. <span style="font-style: italic;"></span><span
  8. style="font-weight: bold;"></span>
  9. <h1>
  10. <center>Mesa Subset Specification</center>
  11. </h1>
  12. <h2>
  13. <center>
  14. <h3>Tungsten Graphics, Inc.</h3>
  15. <h3>February 26, 2003<br>
  16. </h3>
  17. </center>
  18. </h2>
  19. <p> Copyright &copy; 2002-2003 by Tungsten Graphics, Inc.,
  20. Cedar Park, Texas. All Rights Reserved. <br>
  21. <br>
  22. Permission is granted to make and distribute verbatim copies of this
  23. document provided the copyright notice and this permission notice are
  24. preserved on all copies.<br>
  25. </p>
  26. <p> OpenGL is a trademark of <a href="http://www.sgi.com">Silicon
  27. Graphics, Inc.</a>.</p>
  28. <h1>1. Introduction</h1>
  29. This document describes a subset of the Mesa implemented by Tungsten
  30. Graphics, Inc. for embedded devices. &nbsp;Prior to reading this
  31. document the reader should be familiar with the OpenGL 1.2.1
  32. specification dated April 1, 1999 (available from <a
  33. href="http://www.opengl.org/developers/documentation/specs.html">http://www.opengl.org/developers/documentation/specs.html</a>.)
  34. &nbsp;Experience with OpenGL programming is highly advisable.<a
  35. href="http://www.opengl.org/developers/documentation/specs.html"><br>
  36. </a><br>
  37. Tungsten Graphics, Inc. is working with industry standards
  38. organizations +in an attempt to standardize this Mesa subset and any
  39. other possible subsets +as a result of this work. <br>
  40. <br>
  41. Appendix A contains a list of issues of which some may not be resolved.<br>
  42. <br>
  43. To summarize, the following major features of Mesa are omitted from the
  44. subset:<br>
  45. <ul>
  46. <li>Vertex arrays</li>
  47. <li>Texture coordinate generation</li>
  48. <li>Lighting</li>
  49. <li>Point size</li>
  50. <li>Polygon stipple</li>
  51. <li>DrawPixels, CopyPixels, PixelZoom</li>
  52. <li>1-D and 3-D textures</li>
  53. <li>CopyTex[Sub]Image</li>
  54. <li>Fog</li>
  55. <li>Depth test</li>
  56. <li>Color Index mode</li>
  57. <li>Accumulation buffer</li>
  58. <li>Feedback mode</li>
  59. <li>Evaluators</li>
  60. <li>Push/Pop attributes</li>
  61. <li>Display lists<br>
  62. </li>
  63. </ul>
  64. <p>Further reductions are made at a lower level of detail.<br>
  65. </p>
  66. <p>Mesa function names are printed in <span style="font-weight: bold;">bold
  67. face</span>. &nbsp;Function parameters are printed in <span
  68. style="font-style: italic;">italics</span>.<br>
  69. </p>
  70. <p>The Tungsten Graphics, Inc. Mesa subset library is hereafter
  71. referred to as <span style="font-style: italic;">the subset.</span><br>
  72. <br>
  73. </p>
  74. <h1>2. Primitive Specification</h1>
  75. <h2>2.1 glBegin, glEnd and glVertex Commands</h2>
  76. The basic rendering primitives are points, lines and triangles.
  77. &nbsp;Quadrilaterals and polygons are composed of triangles.
  78. &nbsp;Primitives are drawn with the <span style="font-weight: bold;">glBegin</span>
  79. and <span style="font-weight: bold;">glEnd</span> commands and a subset
  80. of the <span style="font-weight: bold;">glVertex</span> commands:<br>
  81. <br>
  82. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glBegin</span>(GLenum<span
  83. style="font-style: italic;">mode</span>)<br>
  84. void <span style="font-weight: bold;">glEnd</span>(void)<br>
  85. <br>
  86. void <span style="font-weight: bold;">glVertex2f</span>(GLfloat <span
  87. style="font-style: italic;">x</span>, GLfloat <span
  88. style="font-style: italic;">y</span>)<br>
  89. void <span style="font-weight: bold;">glVertex2fv</span>(const GLfloat
  90. *<span style="font-style: italic;">v</span>)<br>
  91. void <span style="font-weight: bold;">glVertex3f</span>(GLfloat <span
  92. style="font-style: italic;">x</span>, GLfloat <span
  93. style="font-style: italic;">y</span>, GLfloat <span
  94. style="font-style: italic;">z</span>)<br>
  95. void <span style="font-weight: bold;">glVertex3fv</span>(const GLfloat
  96. *<span style="font-style: italic;">v</span>)<br>
  97. </div>
  98. <br>
  99. The <span style="font-style: italic;">mode</span> parameter to <span
  100. style="font-weight: bold;">glBegin</span> may be one of the following<br>
  101. <br>
  102. <div style="margin-left: 40px;">GL_POINTS - a series of individual
  103. points<br>
  104. GL_LINES - a series of disjoint line segments<br>
  105. GL_LINE_STRIP - series of connected line segments<br>
  106. GL_LINE_LOOP - a closed loop of line segments<br>
  107. GL_TRIANGLES - a series of individual triangles<br>
  108. GL_TRIANGLE_STRIP - a connected strip of triangles<br>
  109. GL_TRIANGLE_FAN - a sequence of triangles all sharing a common vertex<br>
  110. GL_QUADS - a sequence of individual quadrilaterals<br>
  111. GL_QUAD_STRIP - a connected strip of quadrilaterals<br>
  112. GL_POLYGON - a closed, convex polygon<br>
  113. <br>
  114. </div>
  115. <br>
  116. The <span style="font-weight: bold;">glVertex</span> commands take two
  117. or three floating point coordinates, or a pointer to an array of two or
  118. three floating point coordinates. &nbsp;Vertices are actually 4-element
  119. homogeneous coordinates. &nbsp;The fourth component, unspecified by the
  120. subset's <span style="font-weight: bold;">glVertex</span> commands, is
  121. one.<br>
  122. <br>
  123. <span style="font-weight: bold;"></span>
  124. <h2>2.2 Other Per-vertex Commands<br>
  125. </h2>
  126. The <span style="font-weight: bold;">glColor</span> and <span
  127. style="font-weight: bold;">glTexCoord</span> commands may be used to
  128. specify colors and texture coordinates for each vertex:<br>
  129. <br>
  130. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glColor3f</span>(GLfloat<span
  131. style="font-style: italic;">red</span>, GLfloat <span
  132. style="font-style: italic;">green</span>, GLfloat <span
  133. style="font-style: italic;">blue</span>)<br>
  134. void <span style="font-weight: bold;">glColor3fv</span>(const GLfloat *<span
  135. style="font-style: italic;">rgb</span>)<br>
  136. void <span style="font-weight: bold;">glColor4f</span>(GLfloat <span
  137. style="font-style: italic;">red,</span> GLfloat <span
  138. style="font-style: italic;">green,</span> GLfloat <span
  139. style="font-style: italic;">blue,</span> GLfloat <span
  140. style="font-style: italic;">alpha</span>)<br>
  141. void <span style="font-weight: bold;">glColor4fv</span>(const GLfloat *<span
  142. style="font-style: italic;">rgba</span>)<br>
  143. void <span style="font-weight: bold;">glTexCoord2f</span>(GLfloat <span
  144. style="font-style: italic;">s</span>, GLfloat<span
  145. style="font-style: italic;"> t</span>)<br>
  146. void <span style="font-weight: bold;">glTexCoord2fv</span>(const
  147. GLfloat *<span style="font-style: italic;">c</span>)<br>
  148. <br>
  149. </div>
  150. The <span style="font-weight: bold;">glColor</span> commands specify
  151. the color and optionally, the alpha value, for subsequent vertices.
  152. &nbsp;For the <span style="font-weight: bold;">glColor3</span> commands,
  153. alpha is set to one.<br>
  154. <br>
  155. The <span style="font-weight: bold;">glTexCoord2</span> commands
  156. specify the texture coordinate for subsequent vertices. &nbsp;Texture
  157. coordinates are actually four-component coordinates: (s, t, r, q).
  158. &nbsp;The <span style="font-weight: bold;">glTexCoord2</span> commands
  159. set s and t explicitly. &nbsp;The r and q components are zero and one,
  160. respectively.<br>
  161. <br>
  162. <span style="font-weight: bold;"></span>Only <span
  163. style="font-weight: bold;">glVertex, glColor</span> and <span
  164. style="font-weight: bold;">glTexCoord</span> commands are allowed
  165. between <span style="font-weight: bold;">glBegin</span> and <span
  166. style="font-weight: bold;">glEnd.</span> &nbsp;Calling any other
  167. command between <span style="font-weight: bold;">glBegin</span> and <span
  168. style="font-weight: bold;">glEnd</span> will result in the error
  169. GL_INVALID_OPERATION.<br>
  170. <br>
  171. <h2>2.3 Unsupported Commands</h2>
  172. None of the following commands related to primitive specification are
  173. supported by the subset:<br>
  174. <br>
  175. <div style="margin-left: 40px;">Per-Vertex commands:<br>
  176. </div>
  177. <div style="margin-left: 40px;">
  178. <div style="margin-left: 40px;"><span style="font-weight: bold;">glVertex2d,
  179. glVertex2i, glVertex2s, glVertex3d, glVertex3i, glVertex3s, glVertex4d,
  180. glVertex4i, glVertex4s, glVertex2dv, glVertex2iv, glVertex2sv,
  181. glVertex3dv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4iv,
  182. glVertex4sv,<br>
  183. glNormal3b, glNormal3d, glNormal3f, glNormal3i, glNormal3s, </span><span
  184. style="font-weight: bold;">glNormal3bv, glNormal3dv, glNormal3fv,
  185. glNormal3iv, glNormal3sv,<br>
  186. glIndexd, glIndexf, glIndexi, glIndexs, glIndexub, glIndexdv,
  187. glIndexfv, glIndexiv, glIndexsv, glIndexubv,<br>
  188. glColor3b, glColor3d, glColor3i, glColor3s, glColor3ub, glColor3ui,
  189. glColor3us, </span><span style="font-weight: bold;">glColor3bv,
  190. glColor3dv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv,
  191. glColor3usv,</span><span style="font-weight: bold;"> lColor4b,
  192. glColor4d, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us, </span><span
  193. style="font-weight: bold;">glColor4bv, glColor4dv, glColor4iv,
  194. glColor4sv, glColor4ubv, glColor4uiv, glColor4usv,<br>
  195. </span><span style="font-weight: bold;">glTexCoord1d, glTexCoord1f,
  196. glTexCoord1i, glTexCoord1s, glTexCoord2d, glTexCoord2i, glTexCoord2s,
  197. glTexCoord3d, glTexCoord3f, glTexCoord3i, glTexCoord3s, glTexCoord4d,
  198. glTexCoord4f, glTexCoord4i, glTexCoord4s, glTexCoord1dv, glTexCoord1fv,
  199. glTexCoord1iv, glTexCoord1sv, glTexCoord2dv, glTexCoord2iv,
  200. glTexCoord2sv, glTexCoord3dv, glTexCoord3fv, glTexCoord3iv,
  201. glTexCoord3sv, glTexCoord4dv, glTexCoord4fv, glTexCoord4iv,
  202. glTexCoord4sv,<br>
  203. glEdgeFlag, glEdgeFlagv</span><br style="font-weight: bold;">
  204. <br>
  205. </div>
  206. Vertex array commands:<br>
  207. <div style="margin-left: 40px;"><span style="font-weight: bold;">glVertexPointer,
  208. glColorPointer, glIndexPointer, glTexCoordPointer, glEdgeFlagPointer,
  209. glNormalPointer, glInterleavedArrays, glArrayElement, glDrawArrays,
  210. glDrawElements, glDrawRangeElements, glEnableClientState,
  211. glDisableClientState</span><br>
  212. </div>
  213. </div>
  214. <div style="margin-left: 40px;"><br>
  215. Rectangle commands:<br>
  216. <div style="margin-left: 40px;"><span style="font-weight: bold;">glRects,
  217. glRecti, glRectf, glRectd, glRectsv, glRectiv, glRectfv, glRectdv,<br>
  218. <br>
  219. </span></div>
  220. </div>
  221. <div style="margin-left: 40px;">Lighting commands:<br>
  222. </div>
  223. <div style="margin-left: 80px;"><span style="font-weight: bold;">glMaterialf,
  224. glMateriali, glMaterialfv, glMaterialiv<br>
  225. </span><br>
  226. </div>
  227. <div style="margin-left: 40px;"> Evaluator commands:<br>
  228. <div style="margin-left: 40px;"><span style="font-weight: bold;">glEvalCoord1d,
  229. glEvalCoord1f, glEvalCoord1dv, glEvalCoord1fv,&nbsp;</span><span
  230. style="font-weight: bold;">glEvalCoord2d, glEvalCoord2f,
  231. glEvalCoord2dv, glEvalCoord2fv,<br>
  232. </span><span style="font-weight: bold;">glEvalPoint1, glEvalPoint2</span><br>
  233. <br>
  234. </div>
  235. </div>
  236. <h1>3. Coordinate Transformation</h1>
  237. <h2>3.1 Vertex Transformation</h2>
  238. Vertex coordinates are transformed by the current modelview and
  239. projection matrices then mapped to window coordinates as specified by
  240. the viewport. &nbsp;The following coordinate transformation commands are
  241. supported by the subset<br>
  242. <br>
  243. <div style="margin-left: 40px; font-weight: bold;">glMatrixMode<span
  244. style="font-weight: normal;">(GLenum <span style="font-style: italic;">mode</span>)</span><br>
  245. glLoadIdentity<span style="font-weight: normal;">(void)</span><br>
  246. glPushMatrix<span style="font-weight: normal;">(void)</span><br>
  247. glPopMatrix<span style="font-weight: normal;">(void)</span><br>
  248. glLoadMatrixf<span style="font-weight: normal;">(const GLfloat *<span
  249. style="font-style: italic;">m</span>)</span><br>
  250. glMultMatrixf<span style="font-weight: normal;">(const GLfloat *<span
  251. style="font-style: italic;">m</span>)</span><br>
  252. glRotatef<span style="font-weight: normal;">(GLfloat <span
  253. style="font-style: italic;">angle</span>, GLfloat <span
  254. style="font-style: italic;">x</span>, GLfloat <span
  255. style="font-style: italic;">y</span>, GLfloat <span
  256. style="font-style: italic;">z</span>)</span><br>
  257. glTranslatef<span style="font-weight: normal;">(GLfloat <span
  258. style="font-style: italic;">x</span>, GLfloat <span
  259. style="font-style: italic;">y</span>, GLfloat <span
  260. style="font-style: italic;">z</span>)</span><br>
  261. glScalef<span style="font-weight: normal;">(GLfloat <span
  262. style="font-style: italic;">x</span>, GLfloat <span
  263. style="font-style: italic;">y</span>, GLfloat <span
  264. style="font-style: italic;">z</span>)<br>
  265. <span style="font-weight: bold;">glFrustum(</span>GLdouble <span
  266. style="font-style: italic;">left,</span> GLdouble <span
  267. style="font-style: italic;">right,</span> GLdouble <span
  268. style="font-style: italic;">bottom,</span> GLdouble <span
  269. style="font-style: italic;">top,</span> GLdouble <span
  270. style="font-style: italic;">near,</span> GLdouble <span
  271. style="font-style: italic;">far</span>)</span><br>
  272. <span style="font-weight: normal;"><span style="font-weight: bold;">glOrtho(</span>GLdouble<span
  273. style="font-style: italic;"> left,</span> GLdouble <span
  274. style="font-style: italic;">right,</span> GLdouble <span
  275. style="font-style: italic;">bottom,</span> GLdouble <span
  276. style="font-style: italic;">top,</span> GLdouble <span
  277. style="font-style: italic;">near,</span> GLdouble <span
  278. style="font-style: italic;">far</span>)</span><br>
  279. glViewport<span style="font-weight: normal;">(GLint <span
  280. style="font-style: italic;">x</span>, GLint <span
  281. style="font-style: italic;">y</span>, GLsize <span
  282. style="font-style: italic;">width,</span> GLsizei <span
  283. style="font-style: italic;">height</span>)</span><br>
  284. </div>
  285. <br>
  286. The <span style="font-weight: bold;">glMatrixMode</span> command
  287. specifies the <span style="font-style: italic;">current matrix.</span>
  288. &nbsp;The mode parameter may be GL_MODELVIEW or GL_PROJECTION to specify
  289. the modelview matrix or projection matrix. &nbsp;Subsequent matrix
  290. commands will effect the current matrix. &nbsp;Also associated with the
  291. modelview and projection matrices are a modelview matrix stack and
  292. projection matrix stack.<br>
  293. <br>
  294. The <span style="font-weight: bold;">glLoadIdentity</span> command
  295. replaces the current matrix with the identity matrix. &nbsp;The matrix
  296. elements are specified in column-major order.<br>
  297. <br>
  298. The <span style="font-weight: bold;">glPushMatrix</span> command pushes
  299. a copy of the current matrix onto either the modelview matrix stack or
  300. the projection matrix stack. &nbsp;The <span style="font-weight: bold;">glPopMatrix</span>
  301. command replaces the current matrix with a copy of the top matrix off
  302. the modelview matrix stack or projection matrix stack, the pops the
  303. stack. &nbsp;Matrix stacks are useful for traversing and rendering
  304. hierarchical models.<br>
  305. <br>
  306. The <span style="font-weight: bold;">glMultMatrixf</span> command
  307. post-multiplies the current matrix by the specified matrix. &nbsp;The
  308. matrix elements are specified in column-major order.<br>
  309. <br>
  310. The <span style="font-weight: bold;">glRotatef</span> command
  311. post-multiplies the current matrix by a rotation matrix defined by the
  312. angle and rotation axis defined by x, y and z.<br>
  313. <br>
  314. The <span style="font-weight: bold;">glTranslatef</span> command
  315. post-multiplies the current matrix by a translation matrix defined by
  316. the <span style="font-style: italic;">x</span>, <span
  317. style="font-style: italic;">y</span> and <span
  318. style="font-style: italic;">z</span> translation parameters.<br>
  319. <span style="font-weight: bold;"></span><br>
  320. The <span style="font-weight: bold;">glScalef</span> command
  321. post-multiplies the current matrix by a scaling matrix defined by the <span
  322. style="font-style: italic;">x</span>, <span
  323. style="font-style: italic;">y</span> and <span
  324. style="font-style: italic;">z</span> scale factors.<br>
  325. <span style="font-weight: bold;"></span><br>
  326. The <span style="font-weight: bold;">glFrustum</span> command
  327. post-multiplies the current matrix by a perspective projection matrix.
  328. &nbsp;The <span style="font-style: italic;">near</span> and <span
  329. style="font-style: italic;">far</span> values specify the position of
  330. the hither and yon Z-axis clipping planes. &nbsp;The <span
  331. style="font-style: italic;">left, right, bottom</span> and <span
  332. style="font-style: italic;">top</span> parameters are the X and Y
  333. extents at the near clipping plane. &nbsp;<span
  334. style="font-weight: bold;">glFrustum</span> is normally used to modify
  335. the projection matrix.<br>
  336. <br>
  337. The <span style="font-weight: bold;">glOrtho</span> command
  338. post-multiplies the current matrix by an orthographic projection matrix.
  339. &nbsp;The <span style="font-style: italic;">near</span> and <span
  340. style="font-style: italic;">far</span> values specify the position of
  341. the hither and yon Z-axis clipping planes. &nbsp;The <span
  342. style="font-style: italic;">left, right, bottom</span> and <span
  343. style="font-style: italic;">top</span> parameters specify the X and
  344. Y-axis clipping planes. &nbsp;<span style="font-weight: bold;">glOrtho</span>
  345. is normally used to modify the projection matrix.<br>
  346. <br>
  347. The <span style="font-weight: bold;">glViewport</span> command
  348. specifies the mapping of coordinates from normalized device coordinates
  349. to window coordinates. &nbsp;The <span style="font-style: italic;">x</span>
  350. and <span style="font-style: italic;">y</span> parameters specify the
  351. viewport's lower-left corner in the window and the <span
  352. style="font-style: italic;">width</span> and <span
  353. style="font-style: italic;">height</span> parameters specify the size
  354. of the viewport. &nbsp;<span style="font-weight: bold;">glViewport</span>
  355. does not effect the current matrix.<br>
  356. <br>
  357. A coordinate transformed to window coordinates is hereafter known as (x<sub>w</sub>,
  358. y<sub>w</sub>, z<sub>w</sub>).<br>
  359. <br>
  360. <h2>3.2 Clipping</h2>
  361. View-volume clipping automatically discards or trims primitives which
  362. lie completely or partially outside of the view volume specified by <span
  363. style="font-weight: bold;">glFrustum</span> and <span
  364. style="font-weight: bold;">glOrtho</span>. &nbsp;Note that the <span
  365. style="font-weight: bold;">glViewport</span> command does not define a
  366. clipping region.<br>
  367. <br>
  368. Clipping occurs in <span style="font-style: italic;">clip coordinate
  369. space - </span>the coordinates produced after applying the projection
  370. matrix.<br>
  371. <br>
  372. <h2>3.3 Current Raster Position</h2>
  373. The current raster position specifies the location for drawing images
  374. with <span style="font-weight: bold;">glBitmap.</span> &nbsp;The current
  375. raster position is set with the commands:<br>
  376. <br>
  377. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glRasterPos2f</span>(GLfloat<span
  378. style="font-style: italic;">x</span>, GLfloat <span
  379. style="font-style: italic;">y</span>)<br>
  380. void <span style="font-weight: bold;">glRasterPos2fv</span>(const
  381. GLfloat *<span style="font-style: italic;">v</span>)<br>
  382. void <span style="font-weight: bold;">glRasterPos2i</span>(GLint <span
  383. style="font-style: italic;">x</span>, GLint <span
  384. style="font-style: italic;">y</span>)<br>
  385. void <span style="font-weight: bold;">glRasterPos2iv</span>(const
  386. GLint *<span style="font-style: italic;">v</span>)<br>
  387. </div>
  388. <br>
  389. <span style="font-weight: bold;">glRasterPos</span> specifies a
  390. 4-component coordinate (x, y, 0, 1). &nbsp;The coordinate is processed
  391. like a vertex; it is transformed by the modelview matrix, the projection
  392. matrix and mapped to the viewport. &nbsp;The resulting window coordinate
  393. is stored as the current raster position. &nbsp;The coordinate is
  394. clipped-tested against the frustum like a vertex. &nbsp;If the
  395. coordinate is clipped, then the current raster position becomes invalid
  396. and subsequent <span style="font-weight: bold;">glBitmap</span> commands
  397. have no effect.<br>
  398. <br>
  399. <span style="font-weight: bold;">glRasterPos</span> also updates the
  400. current raster color and current raster texture coordinates. &nbsp;The
  401. current raster color is updated (copied) from the current color (as
  402. specified by <span style="font-weight: bold;">glColor</span>).
  403. &nbsp;The current raster texture coordinate is updated (copied) from the
  404. current texture coordinate (as specified by <span
  405. style="font-weight: bold;">glTexCoord</span>).<br>
  406. <br>
  407. <h2>3.4 Unsupported Commands</h2>
  408. The following commands related to vertex transformation are not
  409. supported by the subset:<br>
  410. <br>
  411. <div style="margin-left: 40px;">User-defined clip plane commands:<br>
  412. <div style="margin-left: 40px;"><span style="font-weight: bold;">glClipPlane</span><br>
  413. </div>
  414. <span style="font-weight: bold;"></span></div>
  415. <br>
  416. <div style="margin-left: 40px;">Lighting and material commands:</div>
  417. <div style="margin-left: 80px;"><span style="font-weight: bold;">glLightModeli,
  418. glLightModelf,&nbsp;</span><span style="font-weight: bold;">glLightModeliv,
  419. glLightModelfv,</span><span style="font-weight: bold;"> glLightf,
  420. glLighti, glLightfv, glLightiv, glColorMaterial</span><br>
  421. </div>
  422. <br>
  423. <div style="margin-left: 40px;">Automatic texture coordinate generation
  424. commands:<br>
  425. </div>
  426. <div style="margin-left: 40px;">
  427. <div style="margin-left: 40px;"><span style="font-weight: bold;">glTexGend,
  428. glTexGenf, glTexGeni, </span><span style="font-weight: bold;">glTexGendv,
  429. glTexGenfv, glTexGeniv, </span><br>
  430. <br style="font-weight: bold;">
  431. </div>
  432. Double-valued commands:<br>
  433. <div style="margin-left: 40px;"><span style="font-weight: bold;">glLoadMatrixd,
  434. glMultMatrixd, glRotated, glTranslated, glScaled</span><br
  435. style="font-weight: bold;">
  436. </div>
  437. <br>
  438. Depth Range command:<br>
  439. <div style="margin-left: 40px;"><span style="font-weight: bold;">glDepthRange</span>
  440. (the near value is always 0.0 and the far value is always 1.0)<br>
  441. </div>
  442. <br>
  443. Extra RasterPos commands:<br>
  444. <div style="margin-left: 40px;"><span style="font-weight: bold;">glRasterPos2d,
  445. glRasterPos2s, glRasterPos3d, glRasterPos3f, glRasterPos3i,
  446. glRasterPos3s, glRasterPos4d, glRasterPos4f, glRasterPos4i,
  447. glRasterPos4s, glRasterPos2dv, glRasterPos2sv, glRasterPos3dv,
  448. glRasterPos3fv, glRasterPos3iv, glRasterPos3sv, glRasterPos4dv,
  449. glRasterPos4fv, glRasterPos4iv, glRasterPos4sv</span><br>
  450. </div>
  451. <br>
  452. <br>
  453. </div>
  454. <h1>4. Rasterization</h1>
  455. This section describes the commands and options for drawing points,
  456. lines, triangles and bitmaps. &nbsp;<span style="font-style: italic;">Rasterization</span>
  457. is the term for the process which produces fragments from the geometric
  458. description of a primitive (a point, line, polygon or bitmap). &nbsp;For
  459. example, given the two coordinates for the end-points of a line segment,
  460. rasterization determines which pixels in the frame buffer are modified
  461. to <span style="font-style: italic;">draw</span> the line. &nbsp;A
  462. fragment is a tuple which consists of a window coordinate, colors and
  463. texture coordinates. &nbsp;The fragments produced by rasterization are
  464. subsequently processed by the per-fragment operations described later.<br>
  465. <br>
  466. <h2>4.1 Point Rasterization</h2>
  467. Points are rendered with the command sequence <span
  468. style="font-weight: bold;">glBegin</span>(GL_POINTS), <span
  469. style="font-weight: bold;">glVertex</span>, ... <span
  470. style="font-weight: bold;">glEnd</span>. &nbsp;The window coordinate (x<sub>w</sub>,
  471. y<sub>w</sub>, z<sub>w</sub>) is truncated to rasterize the point.
  472. &nbsp;The truncated coordinate with its associated color and texture
  473. coordinate is sent as a single fragment to the per-fragment processing
  474. stages.<br>
  475. <br>
  476. The <span style="font-weight: bold;">glPointSize</span> command is not
  477. supported; only 1-pixel points are supported.<br>
  478. <br>
  479. Point smoothing (antialiasing) is also not supported.<br>
  480. <br>
  481. <h2>4.2 Line Rasterization</h2>
  482. Lines are rendered with the command sequence <span
  483. style="font-weight: bold;">glBegin</span>(<span
  484. style="font-style: italic;">mode</span>), <span
  485. style="font-weight: bold;">glVertex</span>, <span
  486. style="font-weight: bold;">glVertex</span>, ... <span
  487. style="font-weight: bold;">glEnd</span> where <span
  488. style="font-style: italic;">mode</span> is one of GL_LINES,
  489. GL_LINE_STRIP or GL_LINE_LOOP. &nbsp;Lines are rasterized as described
  490. in the OpenGL specification. &nbsp;Note that OpenGL specifies the <span
  491. style="font-style: italic;">half-open</span> convention for drawing
  492. lines: the last fragment in a line segment is omitted so that endpoint
  493. pixels shared by two line segments will only be drawn once instead of
  494. twice.<br>
  495. <br>
  496. <h3>4.2.1 Line Width</h3>
  497. The width of lines can be controlled by<br>
  498. <br>
  499. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glLineWidth</span>(GLfloat<span
  500. style="font-style: italic;">width</span>)<br>
  501. </div>
  502. <br>
  503. where <span style="font-style: italic;">width</span> is the line width
  504. in pixels. &nbsp;The width defaults to 1.0. &nbsp;Attempting to set the
  505. width to a value less than or equal to zero will raise the error
  506. GL_INVALID_VALUE.<br>
  507. <br>
  508. <h3>4.2.2 Line Stipple<br>
  509. </h3>
  510. Lines may be stippled (i.e. dashed) with the command<br>
  511. <br>
  512. <div style="margin-left: 40px;"><span style="font-weight: bold;">glLineStipple</span>(GLint<span
  513. style="font-style: italic;">factor</span>, GLushort <span
  514. style="font-style: italic;">pattern</span>)<br>
  515. </div>
  516. <br>
  517. <span style="font-style: italic;">pattern</span> describes an on/off
  518. pattern for the fragments produced by rasterization and <span
  519. style="font-style: italic;">factor</span> specifies how many subsequent
  520. fragments are kept or culled for each pattern bit. &nbsp;Line stippling
  521. can be enabled or disabled by the commands <span
  522. style="font-weight: bold;">glEnable</span>(GL_LINE_STIPPLE) and <span
  523. style="font-weight: bold;">glDisable</span>(GL_LINE_STIPPLE).<br>
  524. <br>
  525. <h3>4.2.3 Line Antialiasing</h3>
  526. Lines may be antialiased. &nbsp;For antialiased lines, each fragment
  527. produced by rasterization is assigned a <span
  528. style="font-style: italic;">coverage value</span> which describes how
  529. much of the fragment's area is considered to be <span
  530. style="font-style: italic;">inside</span> the line. &nbsp;Later, the
  531. alpha value of each fragment is multiplied by the coverage value.
  532. &nbsp;By blending the fragments into the frame buffer, the edges of
  533. lines appear smoothed.<br>
  534. <br>
  535. Line antialiasing can be enabled or disabled with the commands <span
  536. style="font-weight: bold;">glEnable</span>(GL_LINE_SMOOTH) and <span
  537. style="font-weight: bold;">glDisable</span>(GL_LINE_SMOOTH).<br>
  538. <br>
  539. <h2>4.3 Polygon Rasterization</h2>
  540. Polygons, quadrilaterals and triangles share the same polygon
  541. rasterization options. <br>
  542. <br>
  543. Triangles are rendered by the command sequence <span
  544. style="font-weight: bold;">glBegin</span><span
  545. style="font-style: italic;"><span style="font-style: italic;">(mode</span></span>),<span
  546. style="font-weight: bold;">glVertex</span>, <span
  547. style="font-weight: bold;">glVertex</span>, ... <span
  548. style="font-weight: bold;">glEnd</span> where <span
  549. style="font-style: italic;">mode</span> may be one of GL_TRIANGLES,
  550. GL_TRIANGLE_STRIP or GL_TRIANGLE_FAN.<span style="font-weight: bold;"></span>
  551. &nbsp;For GL_TRIANGLES mode, the number of vertices should be a multiple
  552. of three - extra vertices will be ignored. &nbsp;For GL_TRIANGLE_STRIP
  553. and GL_TRIANGLE_FAN, at least three vertices should be specified.
  554. &nbsp;If less than three are specified, nothing is drawn. &nbsp;<br>
  555. <br>
  556. Quadrilaterals are <span style="font-weight: bold;"></span>rendered by
  557. the command sequence <span style="font-weight: bold;">glBegin</span>(<span
  558. style="font-style: italic;"><span style="font-style: italic;">mode</span></span>),<span
  559. style="font-weight: bold;">glVertex</span>, <span
  560. style="font-weight: bold;">glVertex</span>, ... <span
  561. style="font-weight: bold;">glEnd</span> where <span
  562. style="font-style: italic;">mode</span> may be one of GL_QUADS or
  563. GL_QUAD_STRIP.<span style="font-weight: bold;"></span> &nbsp; For
  564. GL_QUADS, the number of vertices should be a multiple of four - extra
  565. vertices will be ignored. &nbsp;For GL_QUAD_STRIP, the number of
  566. vertices should be even and at least four. &nbsp;Extra vertices (one)
  567. will be ignored.<br>
  568. <br>
  569. Convex polygons are <span style="font-weight: bold;"></span>rendered
  570. by the command sequence <span style="font-weight: bold;">glBegin</span><span
  571. style="font-style: italic;"><span style="font-style: italic;"></span></span>(GL_POLYGON),<span
  572. style="font-weight: bold;">glVertex</span>, <span
  573. style="font-weight: bold;">glVertex</span>, ... <span
  574. style="font-weight: bold;">glEnd</span>.<span
  575. style="font-style: italic;"></span><span style="font-weight: bold;"></span>
  576. &nbsp;If less than three vertices are specified, nothing is drawn.<br>
  577. <br>
  578. <h3>4.3.1 Polygon Orientation</h3>
  579. The <span style="font-style: italic;">winding order</span> of vertices
  580. (clockwise or counter-clockwise) is significant. &nbsp;It is used to
  581. determine the <span style="font-style: italic;">front-facing</span> or <span
  582. style="font-style: italic;">back-facing</span> orientation of polygons.
  583. &nbsp;By default, a front-facing polygon's vertices are in
  584. counter-clockwise order (in window coordinates). &nbsp;Figures 2.4 and
  585. 2.5 of the OpenGL 1.2.1 specification illustrate the winding order for
  586. front-facing triangles and quadrilaterals, respectively.<br>
  587. <br>
  588. The command<br>
  589. <br>
  590. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glFrontFace</span>(GLenum<span
  591. style="font-style: italic;"> mode</span>)<br>
  592. </div>
  593. <br>
  594. specifies whether clockwise or counter-clockwise winding indicates a
  595. front-facing polygon. &nbsp;If <span style="font-style: italic;">mode</span>
  596. is GL_CW then polygons with clockwise winding are front-facing. &nbsp;If <span
  597. style="font-style: italic;">mode</span> is GL_CCW then polygons with
  598. counter-clockwise winding are front-facing. &nbsp;The default value is
  599. GL_CCW. &nbsp;If <span style="font-style: italic;">mode</span> is not
  600. GL_CCW or GL_CW then the error GL_INVALID_ENUM will be raised.<span
  601. style="font-style: italic;"></span><span style="font-style: italic;"></span><br>
  602. <br>
  603. <h3>4.3.2 Polygon Culling</h3>
  604. Polygons may be culled (discarded) depending on whether they are
  605. front-facing or back-facing. &nbsp;The command<br>
  606. <br>
  607. <div style="margin-left: 40px;">void<span style="font-weight: bold;">
  608. glCullFace</span>(GLenum <span style="font-style: italic;">mode</span>)<br>
  609. </div>
  610. <br>
  611. specifies whether front-facing, back-facing or all polygons should be
  612. culled. &nbsp;If <span style="font-style: italic;">mode</span> is
  613. GL_FRONT then front-facing polygons will be culled. &nbsp;If <span
  614. style="font-style: italic;">mode</span> is GL_BACK then back-facing
  615. polygons will be culled. Otherwise, if <span style="font-style: italic;">mode</span>
  616. is GL_FRONT_AND_BACK then all polygons will be culled. &nbsp;Any other
  617. value for <span style="font-style: italic;">mode</span> will raise the
  618. error GL_INVALID_ENUM.<br>
  619. <br>
  620. Polygon culling is enabled and disabled with the commands <span
  621. style="font-weight: bold;">glEnable</span>(GL_CULL_FACE) and <span
  622. style="font-weight: bold;">glDisable</span>(GL_CULL_FACE),
  623. respectively.<br>
  624. <br>
  625. <h3>4.3.3 Polygon Antialiasing</h3>
  626. Polygons may be antialiased in order to smooth their edges.
  627. &nbsp;Polygon antialiasing is enabled and disabled with the commands <span
  628. style="font-weight: bold;">glEnable</span>(GL_POLYGON_SMOOTH) and <span
  629. style="font-weight: bold;">glDisable</span>(GL_POLYGON_SMOOTH).<br>
  630. <br>
  631. When polygon antialiasing is enabled each fragment produced by polygon,
  632. triangle and quadrilateral rasterization will be given a <span
  633. style="font-style: italic;">coverage</span> value which indicates how
  634. much of the fragment is covered by the polygon. &nbsp;Fragments
  635. completely inside the polygon have coverage 1.0. &nbsp;Fragments
  636. completely outside the polygon have zero coverage (in theory).
  637. &nbsp;Fragments which intersect the polygon's edge have a coverage value
  638. in the range (0, 1).<br>
  639. <br>
  640. The fragment's alpha value is multiplied by the coverage value.
  641. &nbsp;By enabling the appropriate blending mode, polygon edges will
  642. appear smoothed.<br>
  643. <br>
  644. <h2>4.4 Shading</h2>
  645. The command<br>
  646. <br>
  647. <div style="margin-left: 40px;"> void <span style="font-weight: bold;">glShadeModel</span>(GLenum<span
  648. style="font-style: italic;">mode</span>)<br>
  649. </div>
  650. <br>
  651. determines whether colors are interpolated between vertices during
  652. rasterization. &nbsp;If <span style="font-style: italic;">mode</span> is
  653. GL_FLAT then vertex colors are not interpolated. &nbsp;The color used
  654. for drawing lines, triangles and quadrilaterals is that of the last
  655. vertex used to specify each primitive. &nbsp;For polygons, the color of
  656. the first vertex specifies the color for the entire polygon. &nbsp;If <span
  657. style="font-style: italic;">mode</span> is GL_SMOOTH then vertex colors
  658. are linearly interpolated to produce the fragment colors.<br>
  659. <br>
  660. <h2>4.5 Bitmap Rasterization</h2>
  661. A bitmap is a monochromatic, binary image in which each image element
  662. (or pixel) is represented by one bit. &nbsp;Fragments are only generated
  663. for the bits (pixels) which are set. &nbsp;Bitmaps are commonly used to
  664. draw text (glyphs) and markers.<br>
  665. <br>
  666. A bitmap is drawn with the command<br>
  667. <br>
  668. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glBitmap</span>(GLsizei<span
  669. style="font-style: italic;">width</span>, GLsizei <span
  670. style="font-style: italic;">height</span>, GLfloat <span
  671. style="font-style: italic;">xOrig</span>, GLfloat <span
  672. style="font-style: italic;">yOrig</span>, GLfloat <span
  673. style="font-style: italic;">xMove</span>, GLfloat <span
  674. style="font-style: italic;">yMove</span>, const &nbsp;GLubyte *<span
  675. style="font-style: italic;">image</span>)<br>
  676. </div>
  677. <br>
  678. <span style="font-style: italic;">width </span>and <span
  679. style="font-style: italic;">height</span> specify the image size in
  680. pixels. &nbsp;<span style="font-style: italic;">xOrig</span> and <span
  681. style="font-style: italic;">yOrig</span> specify the bitmap origin.
  682. &nbsp;<span style="font-style: italic;">xMove</span> and <span
  683. style="font-style: italic;">yMove</span> are added to the current
  684. raster position after the bitmap is rasterized. &nbsp;<span
  685. style="font-style: italic;">image</span> is a pointer to the bitmap
  686. data.<br>
  687. <br>
  688. If the current raster position is not valid, <span
  689. style="font-weight: bold;">glBitmap</span> has no effect.<br>
  690. <br>
  691. <h3>4.5.1 Bitmap Unpacking</h3>
  692. The first step in bitmap rendering is <span style="font-style: italic;">unpacking.
  693. &nbsp;</span>Unpacking is the process of extracting image data from
  694. client memory subject to byte swapping, non-default row strides, etc.
  695. &nbsp;The unpacking parameters are specified with the command<br>
  696. <br>
  697. <div style="margin-left: 40px;">void<span style="font-weight: bold;">
  698. glPixelStorei</span>(GLenum pname, GLint value)<br>
  699. </div>
  700. <span style="font-style: italic;"></span><br>
  701. The following unpacking parameters may be set:<br>
  702. <br>
  703. <table cellpadding="2" cellspacing="2" border="1"
  704. style="text-align: left; width: 90%; margin-left: auto; margin-right: auto;">
  705. <tbody>
  706. <tr>
  707. <td style="vertical-align: top;">Parameter (<span
  708. style="font-style: italic;">pname</span>)<br>
  709. </td>
  710. <td style="vertical-align: top;">Value (<span
  711. style="font-style: italic;">value</span>)<br>
  712. </td>
  713. <td style="vertical-align: top;">Default<br>
  714. </td>
  715. </tr>
  716. <tr>
  717. <td style="vertical-align: top;">GL_UNPACK_ROW_LENGTH<br>
  718. </td>
  719. <td style="vertical-align: top;">Width of the image in memory, in
  720. pixels.<br>
  721. </td>
  722. <td style="vertical-align: top;">0<br>
  723. </td>
  724. </tr>
  725. <tr>
  726. <td style="vertical-align: top;">GL_UNPACK_LSB_FIRST<br>
  727. </td>
  728. <td style="vertical-align: top;">GL_FALSE indicates that the most
  729. significant bit is unpacked first from each byte. &nbsp;GL_TRUE
  730. indicates that the least significant bit is unpacked first from each
  731. byte. <br>
  732. </td>
  733. <td style="vertical-align: top;">GL_FALSE<br>
  734. </td>
  735. </tr>
  736. </tbody>
  737. </table>
  738. <br>
  739. <br>
  740. The GL_UNPACK_ROW_LENGTH specifies the stride (in pixels) for advancing
  741. from one row of the image to the next.&nbsp; If it's zero, the <span
  742. style="font-style: italic;">width</span> parameter to <span
  743. style="font-weight: bold;">glBitmap</span> specifies the width of the
  744. image in memory.<br>
  745. <br>
  746. GL_UNPACK_LSB_FIRST determines whether the least significant or most
  747. significant bit in each byte is unpacked first. &nbsp;Unpacking occurs
  748. in left to right order (in image space).<br>
  749. <br>
  750. The value of bit (i, j) of the image (where i is the image row and j is
  751. the image column) is found as follows:<br>
  752. <br>
  753. <div style="margin-left: 40px;">rowLength = (GL_UNPACK_ROW_LENGTH != 0)
  754. ? GL_UNPACK_ROW_LENGTH : <span style="font-style: italic;">width</span>;<br>
  755. <br>
  756. byte = <span style="font-style: italic;">image</span>[((rowLength + 7)
  757. / 8) * i + j / 8];<br>
  758. <br>
  759. if (GL_UNPACK_LSB_FIRST != 0)<br>
  760. &nbsp;&nbsp;&nbsp; bitMask = 1 &lt;&lt; (j % 8);<br>
  761. else<br>
  762. &nbsp;&nbsp;&nbsp; bitMask = 128 &gt;&gt; (j % 8);<br>
  763. <br>
  764. if (byte &amp; bitMask)<br>
  765. &nbsp;&nbsp;&nbsp; bit = 1;<br>
  766. else<br>
  767. &nbsp;&nbsp;&nbsp; bit = 0;<br>
  768. <br>
  769. </div>
  770. <span style="font-style: italic;"><span style="font-style: italic;"></span></span>
  771. <h3>4.5.2 Rasterization</h3>
  772. If the current raster position is (x<sub>rp</sub>, y<sub>rp</sub>, z<sub>rp</sub>,
  773. w<sub>rp</sub>), then the bitmap is rasterized according to the
  774. following algorithm:<br>
  775. <br>
  776. for (j = 0; j &lt; <span style="font-style: italic;">height</span>;
  777. j++) {<br>
  778. &nbsp;&nbsp;&nbsp; for (i = 0; i &lt; <span style="font-style: italic;">width</span>;
  779. i++) {<br>
  780. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (bit(i,j)) {<br>
  781. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fragment.x =
  782. floor(x<sub>rp</sub> - <span style="font-style: italic;">xOrig</span>)
  783. + i;<br>
  784. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fragment.y =
  785. floor(y<sub>rp</sub> - <span style="font-style: italic;">yOrig</span>)
  786. + j;<br>
  787. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fragment.color
  788. = GL_CURRENT_RASTER_COLOR;<br>
  789. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
  790. fragment.texture = GL_CURRENT_RASTER_TEXTURE_COORDS;<br>
  791. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
  792. ProcessFragment(fragment)<br>
  793. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>
  794. &nbsp;&nbsp;&nbsp; }<br>
  795. }<br>
  796. <br>
  797. After the bitmap has been rendered the current raster position is
  798. updated as follows:<br>
  799. <br>
  800. <div style="margin-left: 40px;">x<sub>rp</sub> = x<sub>rp</sub> + <span
  801. style="font-style: italic;">xMove</span><br>
  802. y<sub>rp</sub> = y<sub>rp</sub> + <span style="font-style: italic;">yMove</span><br>
  803. </div>
  804. <br>
  805. <h3>4.5.3 Per-fragment Operations</h3>
  806. XXX supported? &nbsp;See issue in appendix A.<br>
  807. <br>
  808. <h2>4.6 Unsupported Commands</h2>
  809. The following commands related to rasterization are not supported by
  810. the subset.<br>
  811. <br>
  812. <div style="margin-left: 40px;">Point commands:<br>
  813. <div style="margin-left: 40px;"><span style="font-weight: bold;">glPointSize</span><br>
  814. </div>
  815. <br>
  816. Polygon commands:<br>
  817. <div style="margin-left: 40px; font-weight: bold;">glPolygonStipple<br>
  818. glPolygonOffset<br>
  819. glPolygonMode<br>
  820. <br>
  821. </div>
  822. </div>
  823. <div style="margin-left: 40px;">Pixel storage commands:<br>
  824. </div>
  825. <div style="font-weight: bold; margin-left: 80px;">glPixelStoref<br>
  826. </div>
  827. <br>
  828. <br>
  829. <h1>5. Texture Mapping<br>
  830. </h1>
  831. There are four elements to texture mapping: texture coordinate
  832. specification, texture image specification, texture sampling and texture
  833. application.<br>
  834. <br>
  835. Texture mapping is enabled and disabled with the commands <span
  836. style="font-weight: bold;">glEnable</span>(GL_TEXTURE_2D) and <span
  837. style="font-weight: bold;">glDisable</span>(GL_TEXTURE_2D).<br>
  838. <br>
  839. <h2>5.1 Texture Image Specification</h2>
  840. A texture image is specified with the command:<br>
  841. <br>
  842. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glTexImage2D</span>(GLenum<span
  843. style="font-style: italic;"> target</span>, GLint <span
  844. style="font-style: italic;">level</span>, GLint <span
  845. style="font-style: italic;">internalFormat,</span> GLsizei <span
  846. style="font-style: italic;">width,</span> GLsizei <span
  847. style="font-style: italic;">height,</span> GLint <span
  848. style="font-style: italic;">border,</span> GLenum <span
  849. style="font-style: italic;">format,</span> GLenum <span
  850. style="font-style: italic;">type,</span> const GLvoid *<span
  851. style="font-style: italic;">pixels</span> )<br>
  852. </div>
  853. <br>
  854. <span style="font-style: italic;">target</span> must be GL_TEXTURE_2D.
  855. &nbsp;<span style="font-style: italic;">level </span>indicates the
  856. mipmap level for mipmap textures. &nbsp;<span style="font-style: italic;">internalFormat</span>
  857. is a hint to indicate the preferred internal storage format for the
  858. texture. &nbsp;<span style="font-style: italic;">width</span> and <span
  859. style="font-style: italic;">height </span>indicate the image size in
  860. pixels (or texels). &nbsp;<span style="font-style: italic;">border </span>must
  861. be zero. &nbsp;<span style="font-style: italic;">format</span> and <span
  862. style="font-style: italic;">type</span> describe the pixel format and
  863. data type for the incoming image. &nbsp;<span style="font-style: italic;">pixels</span>
  864. points to the incoming texture image. &nbsp;These parameters are
  865. described in more detail below.<br>
  866. <br>
  867. <h3>5.1.1 Texture Image Size and Mipmaps</h3>
  868. <h3><span style="font-style: italic;"></span></h3>
  869. Texture images must have dimensions (width and height) that are powers
  870. of two. For example: 256 x 256, 32 x 1024, 1 x 8, etc. &nbsp;That is, it
  871. must be the case that <span style="font-style: italic;">width </span>=
  872. 2<sup>n</sup> and <span style="font-style: italic;">height</span> = 2<sup>m</sup>
  873. for some positive integers n and m.<br>
  874. <br>
  875. Mipmapping is a method of antialiasing or filtering textures to improve
  876. their appearance. &nbsp;A mipmap is a set of images consisting of a base
  877. image and a set of filtered, reduced-resolution images. &nbsp;If the
  878. base image (<span style="font-style: italic;">level</span>=0) is of
  879. width 2<sup>n</sup> and height 2<sup>m</sup> then the level 1 image must
  880. be of width 2<sup>n-1</sup> and height 2<sup>m-1</sup>. &nbsp;Each mipmap
  881. level is half the width and height of the previous level, or at least
  882. one. &nbsp;The last mipmap level has a width and height of one.<br>
  883. <br>
  884. The following is an example of a mipmap's image levels:<br>
  885. <br>
  886. <table cellpadding="2" cellspacing="2" border="1"
  887. style="text-align: left; width: 50%; margin-left: auto; margin-right: auto;">
  888. <tbody>
  889. <tr>
  890. <td style="vertical-align: top;">mipmap level<br>
  891. </td>
  892. <td style="vertical-align: top;">width<br>
  893. </td>
  894. <td style="vertical-align: top;">height<br>
  895. </td>
  896. </tr>
  897. <tr>
  898. <td style="vertical-align: top;">0<br>
  899. </td>
  900. <td style="vertical-align: top;">256<br>
  901. </td>
  902. <td style="vertical-align: top;">64<br>
  903. </td>
  904. </tr>
  905. <tr>
  906. <td style="vertical-align: top;">1<br>
  907. </td>
  908. <td style="vertical-align: top;">128<br>
  909. </td>
  910. <td style="vertical-align: top;">32<br>
  911. </td>
  912. </tr>
  913. <tr>
  914. <td style="vertical-align: top;">2<br>
  915. </td>
  916. <td style="vertical-align: top;">64<br>
  917. </td>
  918. <td style="vertical-align: top;">16<br>
  919. </td>
  920. </tr>
  921. <tr>
  922. <td style="vertical-align: top;">3<br>
  923. </td>
  924. <td style="vertical-align: top;">32<br>
  925. </td>
  926. <td style="vertical-align: top;">8<br>
  927. </td>
  928. </tr>
  929. <tr>
  930. <td style="vertical-align: top;">4<br>
  931. </td>
  932. <td style="vertical-align: top;">16<br>
  933. </td>
  934. <td style="vertical-align: top;">4<br>
  935. </td>
  936. </tr>
  937. <tr>
  938. <td style="vertical-align: top;">5<br>
  939. </td>
  940. <td style="vertical-align: top;">8<br>
  941. </td>
  942. <td style="vertical-align: top;">2<br>
  943. </td>
  944. </tr>
  945. <tr>
  946. <td style="vertical-align: top;">6<br>
  947. </td>
  948. <td style="vertical-align: top;">4<br>
  949. </td>
  950. <td style="vertical-align: top;">1<br>
  951. </td>
  952. </tr>
  953. <tr>
  954. <td style="vertical-align: top;">7<br>
  955. </td>
  956. <td style="vertical-align: top;">2<br>
  957. </td>
  958. <td style="vertical-align: top;">1<br>
  959. </td>
  960. </tr>
  961. <tr>
  962. <td style="vertical-align: top;">8<br>
  963. </td>
  964. <td style="vertical-align: top;">1<br>
  965. </td>
  966. <td style="vertical-align: top;">1<br>
  967. </td>
  968. </tr>
  969. </tbody>
  970. </table>
  971. <br>
  972. If the <span style="font-style: italic;">width</span> or <span
  973. style="font-style: italic;">height</span> parameters are not powers of
  974. two, the error GL_INVALID_VALUE is raised. &nbsp;If the image levels in
  975. a mipmap do not satisfy the restrictions listed above the texture is
  976. considered to be <span style="font-style: italic;">inconsistent</span>
  977. and the system will behave as if the texturing is disabled.<br>
  978. <br>
  979. <h3>5.1.2 Texture Image Formats and Unpacking</h3>
  980. The <span style="font-weight: bold;">glTexImage2D</span> command's <span
  981. style="font-style: italic;"><span style="font-weight: bold;"></span></span><span
  982. style="font-style: italic;">format</span> and <span
  983. style="font-style: italic;">type</span> parameters describe the format
  984. of the incoming texture image.&nbsp; Accepted values for <span
  985. style="font-style: italic;">format</span> are GL_INTENSITY, GL_RGB and
  986. GL_RGBA. &nbsp;The <span style="font-style: italic;">type</span>
  987. parameter must be GL_UNSIGNED_BYTE. &nbsp;Pixel component values are
  988. thus in the range 0 through 255.<br>
  989. <br>
  990. If <span style="font-style: italic;">format</span> is GL_INTENSITY then
  991. the image has one byte per pixel which specifies the pixel's red, green,
  992. blue and alpha values.<span style="font-style: italic;"></span><br>
  993. <br>
  994. If <span style="font-style: italic;">format</span> is GL_RGB then the
  995. image has three bytes per pixel which specify the pixel's red, green and
  996. blue values (in that order). &nbsp;The alpha value defaults to 255.<br>
  997. <br>
  998. If <span style="font-style: italic;">format</span> is GL_RGBA then the
  999. image has four bytes per pixel which specify the pixel's red, green,
  1000. blue and alpha values (in that order).<br>
  1001. <br>
  1002. The command<br>
  1003. <br>
  1004. <div style="margin-left: 40px;">void<span style="font-weight: bold;">
  1005. glPixelStorei</span>(GLenum <span style="font-style: italic;">pname</span>,
  1006. GLint <span style="font-style: italic;">value</span>)<br>
  1007. </div>
  1008. <br>
  1009. controls the unpacking of texture image data from client memory. &nbsp;<span
  1010. style="font-style: italic;">pname</span> may be GL_UNPACK_ROW_LENGTH to
  1011. indicate the stride, in pixels, between subsequent rows of the image in
  1012. client memory. &nbsp;If GL_UNPACK_ROW_LENGTH is zero (the default) then
  1013. the <span style="font-style: italic;">width</span> parameter to <span
  1014. style="font-weight: bold;">glTexImage2D </span>determines the stride.<span
  1015. style="font-style: italic;"></span><br>
  1016. <br>
  1017. <h3>5.1.3 Internal Texture Format</h3>
  1018. <span style="font-weight: bold;">glTexImage2D<span
  1019. style="font-style: italic;"> </span></span>converts the incoming
  1020. texture image to one of the supported internal texture formats.<br>
  1021. <br>
  1022. The <span style="font-style: italic;">internalFormat</span> parameter
  1023. indicates the desired internal format for the texture and may be either
  1024. GL_INTENSITY8, GL_RGB5 or GL_RGBA8.<br>
  1025. <br>
  1026. If <span style="font-style: italic;">internalFormat</span> is
  1027. GL_INTENSITY8 then the texture has one byte per texel (texture element)
  1028. which indicates the texel's intensity (or brightness). &nbsp;The
  1029. intensity is obtained from the incoming image's red channel.<br>
  1030. <br>
  1031. If <span style="font-style: italic;">internalFormat</span> is GL_RGB5
  1032. then the texture is stored with two bytes per texel: &nbsp;5 bits per
  1033. red value, 5 bits per green value and 5 bits per blue value.<br>
  1034. <br>
  1035. If <span style="font-style: italic;">internalFormat </span>is
  1036. GL_RGBA8 then the texture is stored with four bytes per texel: &nbsp;8
  1037. bits for each of the red, green, &nbsp;blue and alpha values.<br>
  1038. <br>
  1039. The internal format is also significant to texture application (see
  1040. section 5.4).<br>
  1041. <br>
  1042. <h2>5.2 Texture Coordinates</h2>
  1043. Texture coordinates control the mapping from local polygon space to
  1044. texture image space. &nbsp;Texture coordinates are set for each vertex
  1045. with the <span style="font-weight: bold;">glTexCoord</span> commands.
  1046. &nbsp;During line and polygon rasterization the vertex's texture
  1047. coordinates are interpolated across the primitive to produce a texture
  1048. coordinate for each fragment. &nbsp;The fragment texture coordinates are
  1049. used to sample the current texture image.<br>
  1050. <br>
  1051. Texture coordinates are normally in the range [0, 1]. &nbsp;Values
  1052. outside that range are processed according to the <span
  1053. style="font-style: italic;">texture wrap mode</span>. &nbsp;The
  1054. texture wrap mode is set with the command<br>
  1055. <br>
  1056. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glTexParameteri</span>(GLenum<span
  1057. style="font-style: italic;"> target</span>, GLenum <span
  1058. style="font-style: italic;">pname</span>, GLint <span
  1059. style="font-style: italic;">value</span>)<br>
  1060. <br>
  1061. </div>
  1062. <span style="font-style: italic;">target</span> must be GL_TEXTURE_2D.
  1063. &nbsp;If <span style="font-style: italic;">pname</span> is
  1064. GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T then <span
  1065. style="font-style: italic;">value</span> must be either
  1066. GL_CLAMP_TO_EDGE or GL_REPEAT.<br>
  1067. <br>
  1068. For GL_CLAMP_TO_EDGE, texture coordinates are effectively clamped to
  1069. the interval [0, 1].<br>
  1070. <br>
  1071. For GL_REPEAT, the integer part of texture coordinates is ignored; only
  1072. the fractional part of the texture coordinates is used. &nbsp;This
  1073. allows texture images to repeated or tiled across an object.<br>
  1074. <br>
  1075. <h2>5.3 Texture Sampling</h2>
  1076. Texture sampling is the process of using texture coordinates to extract
  1077. a color from the texture image. &nbsp;Multiple, weighted samples may be
  1078. taken from the texture and combined during the filtering step.<br>
  1079. <br>
  1080. During texture coordinate interpolation a <span
  1081. style="font-style: italic;">level of detail</span> value (lambda) is
  1082. computed for each fragment. &nbsp;For a mipmapped texture, lambda
  1083. determines which level (or levels) of the mipmap will be sampled to
  1084. obtain the texture color.<br>
  1085. <br>
  1086. If lambda indicates that multiple texels map to a single screen pixel,
  1087. then the texture <span style="font-style: italic;">minification</span>
  1088. filter will be used. &nbsp;Otherwise, if lambda indicates that a single
  1089. texel maps to multiple screen pixels, then the texture <span
  1090. style="font-style: italic;">magnification</span> filter will be used.<br>
  1091. <span style="font-weight: bold;"></span><span
  1092. style="font-style: italic;"></span><br>
  1093. <h3>5.3.1 Texture Minification</h3>
  1094. The texture minification filter is set with the <span
  1095. style="font-weight: bold;">glTexParameteri </span><span
  1096. style="font-style: italic;"></span><span style="font-weight: bold;"></span><span
  1097. style="font-style: italic;"></span> command by setting <span
  1098. style="font-style: italic;">target</span> to GL_TEXTURE_2D, setting <span
  1099. style="font-style: italic;">pname</span> to GL_TEXTURE_MIN_FILTER and
  1100. setting <span style="font-style: italic;">value</span> to GL_NEAREST,
  1101. GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST,&nbsp;
  1102. GL_NEAREST_MIPMAP_LINEAR,&nbsp; &nbsp;GL_LINEAR_MIPMAP_NEAREST or
  1103. GL_LINEAR_MIPMAP_LINEAR.<br>
  1104. <br>
  1105. GL_NEAREST samples the texel nearest the texture coordinate in the
  1106. level 0 texture image.<br>
  1107. <br>
  1108. GL_LINEAR samples the four texels around the texture coordinate in the
  1109. level 0 texture image. &nbsp;The four texels are linearly weighted to
  1110. compute the final texel value.<br>
  1111. <br>
  1112. GL_NEAREST_MIPMAP_NEAREST samples the texel nearest the texture
  1113. coordinate in the level N texture image. &nbsp;N is the level of detail
  1114. and is computed by the partial derivatives of the texture coordinates
  1115. with respect to the window coordinates.<br>
  1116. <br>
  1117. GL_NEAREST_MIPMAP_LINEAR samples two texels nearest the texture
  1118. coordinates in the level N and N+1 texture images. &nbsp;The two texels
  1119. are linearly weighted to compute the final texel value. &nbsp;N is the
  1120. level of detail and is computed by the partial derivatives of the
  1121. texture coordinates with respect to the window coordinates.<br>
  1122. <br>
  1123. GL_LINEAR_MIPMAP_NEAREST samples four texels around the texture
  1124. coordinate in the level N texture image. &nbsp;The four texels are
  1125. linearly weighted to compute the final texel value. &nbsp;N is the level
  1126. of detail and is computed by the partial derivatives of the texture
  1127. coordinates with respect to the window coordinates.<br>
  1128. <br>
  1129. GL_LINEAR_MIPMAP_LINEAR samples four texels around the texture
  1130. coordinate in the level N texture image and four texels around the
  1131. texture coordinate in the level N+1 texture image. &nbsp;The eight
  1132. texels are linearly weighted to compute the final texel value. &nbsp;N
  1133. is the level of detail and is computed by the partial derivatives of the
  1134. texture coordinates with respect to the window coordinates.<br>
  1135. <br>
  1136. Filter modes other than GL_LINEAR and GL_NEAREST requires that the
  1137. texture have a complete set of mipmaps. &nbsp;If the mipmap is
  1138. incomplete, it is as if texturing is disabled.<br>
  1139. &nbsp;<br>
  1140. <h3>5.3.2 Texture Magnification</h3>
  1141. The texture magnification filter is set with the <span
  1142. style="font-weight: bold;">glTexParameteri </span><span
  1143. style="font-style: italic;"></span><span style="font-weight: bold;"></span>command
  1144. by setting <span style="font-style: italic;">target</span> to
  1145. GL_TEXTURE_2D, setting <span style="font-style: italic;">pname</span> to
  1146. GL_TEXTURE_MAG_FILTER and setting <span style="font-style: italic;">value</span>
  1147. to GL_NEAREST or GL_LINEAR.<br>
  1148. <br>
  1149. GL_NEAREST samples the texel nearest the texture coordinate in the
  1150. level 0 texture image.<br>
  1151. <br>
  1152. GL_LINEAR samples the four texels around the texture coordinate in the
  1153. level 0 texture image. &nbsp;The four texels are linearly weighted to
  1154. compute the final texel value.<br>
  1155. <br>
  1156. <h2>5.4 Texture Application</h2>
  1157. The sampled texture value is combined with the incoming fragment color
  1158. to produce a new fragment color. &nbsp;The fragment and texture colors
  1159. are combined according to the texture environment mode and the current
  1160. texture's base internal format. &nbsp;The texture environment mode is
  1161. set with the command<br>
  1162. <br>
  1163. <div style="margin-left: 40px;">void<span style="font-weight: bold;">
  1164. glTexEnvi</span>(GLenum <span style="font-style: italic;">target</span>,
  1165. GLenum <span style="font-style: italic;">pname</span>, GLint <span
  1166. style="font-style: italic;">value</span>)<br>
  1167. </div>
  1168. <br>
  1169. <span style="font-style: italic;">target</span> must be GL_TEXTURE_ENV.
  1170. &nbsp;If <span style="font-style: italic;">pname</span> is
  1171. GL_TEXTURE_ENV_MODE then <span style="font-style: italic;">value</span>
  1172. must be one of GL_REPLACE, GL_MODULATE, GL_DECAL, or GL_BLEND.<br>
  1173. <br>
  1174. There is also a <span style="font-style: italic;">texture environment
  1175. color</span> that can factor into texture application. &nbsp;The texture
  1176. environment color can be set with the command<br>
  1177. <br>
  1178. <div style="margin-left: 40px;">void<span style="font-weight: bold;">
  1179. glTexEnvfv</span>(GLenum <span style="font-style: italic;">target</span>,
  1180. GLenum <span style="font-style: italic;">pname</span>, const GLfloat *<span
  1181. style="font-style: italic;">value</span>)<br>
  1182. </div>
  1183. <span style="font-style: italic;"></span><br>
  1184. <span style="font-style: italic;">target</span> must be GL_TEXTURE_ENV.
  1185. &nbsp;If <span style="font-style: italic;">pname</span> is
  1186. GL_TEXTURE_ENV_COLOR then <span style="font-style: italic;">value </span>must
  1187. point to an array of four values which specify the red, green, blue,
  1188. and alpha values of the texture environment color. &nbsp;The values are
  1189. clamped to the range [0, 1]. &nbsp;The default color is (0, 0, 0, 0).<br>
  1190. <span style="font-style: italic;"></span><br>
  1191. The following table describes the arithmetic used for each combination
  1192. of environment mode and base internal format. &nbsp;(Rf, Gf, Bf, Af) is
  1193. the incoming fragment color. &nbsp;(Rt, Gt, Bt, At) is the sampled
  1194. texture color. &nbsp;Lt is the sampled texture luminance. &nbsp;<span
  1195. style="font-style: italic;"></span>'It' is the sampled texture
  1196. intensity. &nbsp;(Rc, Gc, Bc, Ac) is the texture environment color.
  1197. &nbsp;(Rv, Gv, Bv, Av) is the resulting value.<br>
  1198. <br>
  1199. <br>
  1200. <table cellpadding="2" cellspacing="2" border="1"
  1201. style="text-align: left; width: 90%; margin-left: auto; margin-right: auto;">
  1202. <tbody>
  1203. <tr>
  1204. <td style="vertical-align: top;">Base Internal Format<br>
  1205. </td>
  1206. <td style="vertical-align: top;">GL_REPLACE<br>
  1207. </td>
  1208. <td style="vertical-align: top;">GL_MODULATE<br>
  1209. </td>
  1210. <td style="vertical-align: top;">GL_DECAL<br>
  1211. </td>
  1212. <td style="vertical-align: top;">GL_BLEND<br>
  1213. </td>
  1214. </tr>
  1215. <tr>
  1216. <td style="vertical-align: top;">GL_INTENSITY<br>
  1217. </td>
  1218. <td style="vertical-align: top;">Rv = It<br>
  1219. Gv = It<br>
  1220. Bv = It<br>
  1221. Bf = It<br>
  1222. </td>
  1223. <td style="vertical-align: top;">Rv = Rf * It<br>
  1224. Gv = Gf * It<br>
  1225. Bv = Bf * It<br>
  1226. Av = Af * It</td>
  1227. <td style="vertical-align: top;">undefined<br>
  1228. </td>
  1229. <td style="vertical-align: top;">Rv = Rf*(1-It) + Rc*It<br>
  1230. Gv = Gf*(1-It) + Gc*It<br>
  1231. Bv = Bf*(1-It) + Bc*It<br>
  1232. Av = Af*(1-It) + Ac*It</td>
  1233. </tr>
  1234. <tr>
  1235. <td style="vertical-align: top;">GL_RGB<br>
  1236. </td>
  1237. <td style="vertical-align: top;">Rv = Rt<br>
  1238. Gv = Gt<br>
  1239. Bv = Bt<br>
  1240. Av = Af<br>
  1241. </td>
  1242. <td style="vertical-align: top;">Rv = Rf * Rt<br>
  1243. Gv = Gf * Gt<br>
  1244. Bv = Bf * Bt<br>
  1245. Av = Af<br>
  1246. </td>
  1247. <td style="vertical-align: top;">Rv = Rt<br>
  1248. Gv = Gt<br>
  1249. Bv = Bt<br>
  1250. Av = Af</td>
  1251. <td style="vertical-align: top;">Rv = Rf*(1-Rt) + Rc*Rt<br>
  1252. Gv = Gf*(1-Gt) + Gc*Gt<br>
  1253. Bv = Bf*(1-Bt) + Bc*Bt<br>
  1254. Av = Af</td>
  1255. </tr>
  1256. <tr>
  1257. <td style="vertical-align: top;">GL_RGBA<br>
  1258. </td>
  1259. <td style="vertical-align: top;">Rv = Rt<br>
  1260. Gv = Gt<br>
  1261. Bv = Bt<br>
  1262. Av = At<br>
  1263. </td>
  1264. <td style="vertical-align: top;">Rv = Rf * Rt<br>
  1265. Gv = Gf * Gt<br>
  1266. Bv = Bf * Bt<br>
  1267. Av = Af * At</td>
  1268. <td style="vertical-align: top;">Rv = Rf*(1-At) + Rt*At<br>
  1269. Gv = Gf*(1-At) + Gt*At<br>
  1270. Bv = Bf*(1-At) + Bt*At<br>
  1271. Av = Af<br>
  1272. </td>
  1273. <td style="vertical-align: top;">Rv = Rf*(1-Rt) + Rc*Rt<br>
  1274. Gv = Gf*(1-Gt) + Gc*Gt<br>
  1275. Bv = Bf*(1-Bt) + Bc*Bt<br>
  1276. Av = Af*At</td>
  1277. </tr>
  1278. </tbody>
  1279. </table>
  1280. <br>
  1281. <br>
  1282. <br>
  1283. <h2>5.5 Texture Objects</h2>
  1284. Texture objects encapsulate a set of texture images (mipmap) and
  1285. related state into a named object. &nbsp;This facilitates use of
  1286. multiple textures in an application. &nbsp;Texture objects are named
  1287. with GLuints (unsigned integers). &nbsp;There is a default texture
  1288. object with the name/identifier zero which can never be deleted.<br>
  1289. <br>
  1290. <h3>5.5.1 Creating Texture Objects</h3>
  1291. A texture object is created by binding a new GLuint identifier to the
  1292. GL_TEXTURE_2D target with the command:<br>
  1293. <br>
  1294. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glBindTexture</span>(GLenum<span
  1295. style="font-style: italic;"> target</span>, GLuint <span
  1296. style="font-style: italic;">textureID</span>)<br>
  1297. </div>
  1298. <br>
  1299. <span style="font-style: italic;">target</span> must be GL_TEXTURE_2D.
  1300. &nbsp;<span style="font-style: italic;">textureID</span> may be any
  1301. unsigned integer. &nbsp;If <span style="font-style: italic;">textureID</span>
  1302. does not name an existing texture object, a new texture object with that
  1303. ID will be created, initialized to the default state. &nbsp;Whether the
  1304. ID is new or existed previously, that named texture object is bound as
  1305. the <span style="font-style: italic;">current texture object</span>.
  1306. &nbsp;Subsequent <span style="font-weight: bold;">glTexParameter </span>and<span
  1307. style="font-weight: bold;">glTexImage2D<span
  1308. style="font-style: italic;"> </span></span>calls will effect the
  1309. current texture object.<br>
  1310. <span style="font-style: italic;"></span><span
  1311. style="font-weight: bold;"><span style="font-style: italic;"> </span></span><br>
  1312. <h3>5.5.2 Deleting Texture Objects</h3>
  1313. One or more texture objects may be deleted with the command:<br>
  1314. <br>
  1315. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glDeleteTextures</span>(GLsizei<span
  1316. style="font-style: italic;">n</span>, const GLuint *<span
  1317. style="font-style: italic;">textureIDs</span>)<br>
  1318. </div>
  1319. <br>
  1320. <span style="font-style: italic;">textureIDs</span> is an array of <span
  1321. style="font-style: italic;">n</span> texture IDs. &nbsp;The named
  1322. texture objects will be deleted. &nbsp;If the current texture object is
  1323. deleted the default texture object (number 0) will be bound as the
  1324. current texture object.<br>
  1325. <br>
  1326. <h3>5.5.3 Allocating Texture Object Identifiers</h3>
  1327. A list of new, unused texture IDs can be obtained by calling the command<br>
  1328. <br>
  1329. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glGenTextures</span>(GLsizei<span
  1330. style="font-style: italic;"> n</span>, GLuint *<span
  1331. style="font-style: italic;">textureIDs</span>)<br>
  1332. </div>
  1333. <br>
  1334. An array of <span style="font-style: italic;">n</span> unused texture
  1335. IDs will be returned in the <span style="font-style: italic;">textureIDs</span>
  1336. array.<br>
  1337. <br>
  1338. <br>
  1339. <h1>6. Per-fragment Operations</h1>
  1340. The fragments produced by rasterization are subjected to a number of
  1341. operations which either modify the fragment or test the fragment
  1342. (discarding the fragment if the test fails.) &nbsp;This chapter
  1343. describes the per-fragment operations. &nbsp;They are presented in the
  1344. order in which they're performed. &nbsp;If a fragment fails a test it is
  1345. discarded and not subjected to subsequent tests or modifications.<br>
  1346. <br>
  1347. <h2>6.1 Scissor Test</h2>
  1348. The scissor test limits rendering to a 2-D rectangular region of the
  1349. framebuffer. &nbsp;The command<br>
  1350. <br>
  1351. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glScissor</span>(GLint<span
  1352. style="font-style: italic;">x</span>, GLint <span
  1353. style="font-style: italic;">y</span>, GLsizei <span
  1354. style="font-style: italic;">width</span>, GLsizei<span
  1355. style="font-style: italic;"> height</span>)<br>
  1356. </div>
  1357. <br>
  1358. defines a clipping region with the lower-left corner at (<span
  1359. style="font-style: italic;">x, y</span>) and the given <span
  1360. style="font-style: italic;">width</span> and <span
  1361. style="font-style: italic;">height</span>. &nbsp;The scissor test is
  1362. enabled and disabled with the command <span style="font-weight: bold;">glEnable</span>(GL_SCISSOR_TEST)
  1363. and <span style="font-weight: bold;">glDisable</span>(GL_SCISSOR_TEST).<br>
  1364. <br>
  1365. If the incoming fragment's position is (x<sub>f</sub>, y<sub>f</sub>)
  1366. then the fragment will pass the test if <span
  1367. style="font-style: italic;">x</span> &lt;= x<sub>f</sub> &lt; <span
  1368. style="font-style: italic;">x</span> + <span
  1369. style="font-style: italic;">width</span> and <span
  1370. style="font-style: italic;">y</span> &lt;= y<sub>f</sub> &lt; <span
  1371. style="font-style: italic;">y</span> + <span
  1372. style="font-style: italic;">height. &nbsp;</span>Otherwise, the
  1373. fragment is discarded.<br>
  1374. <br>
  1375. If <span style="font-style: italic;">width</span> or <span
  1376. style="font-style: italic;">height</span> is less than zero the error
  1377. GL_INVALID_VALUE is raised. &nbsp;The default scissor rectangle bounds
  1378. are (0, 0, w, h) where w is the initial window width and h is the
  1379. initial window height. &nbsp;The scissor test is disabled by default.<br>
  1380. <br>
  1381. <h2>6.2 Alpha Test</h2>
  1382. The alpha test compares the fragment's alpha value against a reference
  1383. value and discards the fragment if the comparison fails. &nbsp;The test
  1384. is specified by the command<br>
  1385. <br>
  1386. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glAlphaFunc</span>(GLenum<span
  1387. style="font-style: italic;">mode</span>, GLclampf <span
  1388. style="font-style: italic;">reference</span>)<br>
  1389. </div>
  1390. <br>
  1391. <span style="font-style: italic;">mode</span> specifies an inequality
  1392. and <span style="font-style: italic;">reference</span> specifies a value
  1393. to compare against. &nbsp;The following table lists all possible
  1394. modes&nbsp;<span style="font-style: italic;"></span>and the
  1395. corresponding test:<br>
  1396. <br>
  1397. <table cellpadding="2" cellspacing="2" border="1"
  1398. style="text-align: left; width: 50%; margin-left: auto; margin-right: auto;">
  1399. <tbody>
  1400. <tr>
  1401. <td style="vertical-align: top;">Comparison mode<br>
  1402. </td>
  1403. <td style="vertical-align: top;">The test passes if<br>
  1404. </td>
  1405. </tr>
  1406. <tr>
  1407. <td style="vertical-align: top;">GL_LESS<br>
  1408. </td>
  1409. <td style="vertical-align: top;">alpha &lt; <span
  1410. style="font-style: italic;">reference</span><br>
  1411. </td>
  1412. </tr>
  1413. <tr>
  1414. <td style="vertical-align: top;">GL_LEQUAL<br>
  1415. </td>
  1416. <td style="vertical-align: top;">alpha &lt;= <span
  1417. style="font-style: italic;">reference</span></td>
  1418. </tr>
  1419. <tr>
  1420. <td style="vertical-align: top;">GL_GREATER<br>
  1421. </td>
  1422. <td style="vertical-align: top;">alpha &gt; <span
  1423. style="font-style: italic;">reference</span></td>
  1424. </tr>
  1425. <tr>
  1426. <td style="vertical-align: top;">GL_GEQUAL<br>
  1427. </td>
  1428. <td style="vertical-align: top;">alpha &gt;= <span
  1429. style="font-style: italic;">reference</span></td>
  1430. </tr>
  1431. <tr>
  1432. <td style="vertical-align: top;">GL_EQUAL<br>
  1433. </td>
  1434. <td style="vertical-align: top;">alpha == <span
  1435. style="font-style: italic;">reference</span></td>
  1436. </tr>
  1437. <tr>
  1438. <td style="vertical-align: top;">GL_NOTEQUAL<br>
  1439. </td>
  1440. <td style="vertical-align: top;">alpha != <span
  1441. style="font-style: italic;">reference</span></td>
  1442. </tr>
  1443. <tr>
  1444. <td style="vertical-align: top;">GL_NEVER<br>
  1445. </td>
  1446. <td style="vertical-align: top;">never pass<br>
  1447. </td>
  1448. </tr>
  1449. <tr>
  1450. <td style="vertical-align: top;">GL_ALWAYS<br>
  1451. </td>
  1452. <td style="vertical-align: top;">always passes<br>
  1453. </td>
  1454. </tr>
  1455. </tbody>
  1456. </table>
  1457. <br>
  1458. The <span style="font-style: italic;">reference</span> parameter is
  1459. clamped to the range [0, 1].<br>
  1460. <br>
  1461. The alpha test is enabled and disabled with the commands <span
  1462. style="font-weight: bold;">glEnable</span>(GL_ALPHA_TEST) and <span
  1463. style="font-weight: bold;">glDisable</span>(GL_ALPHA_TEST).<br>
  1464. <br>
  1465. The default mode is GL_ALWAYS and the default reference value is 0.<br>
  1466. <br>
  1467. <h2>6.3 Stencil Test</h2>
  1468. The stencil buffer stores an N-bit integer value for each pixel in the
  1469. frame buffer. &nbsp;The stencil test compares the stencil buffer value
  1470. at the fragment's position to a reference value and possibly discards
  1471. the fragment based on the outcome. &nbsp;Furthermore, the stencil buffer
  1472. value may be updated or modified depending on the outcome. &nbsp;If
  1473. there is no stencil buffer the stencil test is bypassed.<br>
  1474. <br>
  1475. Stenciling is controlled by the commands<br>
  1476. <br>
  1477. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glStencilFunc</span>(GLenum<span
  1478. style="font-style: italic;">func</span>, GLint <span
  1479. style="font-style: italic;">ref</span>, GLuint <span
  1480. style="font-style: italic;">mask</span>)<br>
  1481. void <span style="font-weight: bold;">glStencilOp</span>(GLenum <span
  1482. style="font-style: italic;">stencilFail</span>, GLenum <span
  1483. style="font-style: italic;">depthTestFail</span>, GLenum <span
  1484. style="font-style: italic;">depthTestPass</span>)<br>
  1485. </div>
  1486. <br>
  1487. The <span style="font-weight: bold;">glStencilFunc<span
  1488. style="font-style: italic;"> </span></span>command controls the
  1489. stencil test while <span style="font-weight: bold;">glStencilOp</span>
  1490. command controls the how the stencil buffer is updated/modified after
  1491. the test.<br>
  1492. <br>
  1493. <span style="font-style: italic;">ref</span> is clamped to the range [0,
  1494. 2<sup>N</sup>-1] where N is the number of bits per stencil value in the
  1495. stencil buffer.<span style="font-style: italic;"></span><br>
  1496. <br>
  1497. The following table lists all possible values for the <span
  1498. style="font-style: italic;">func</span> parameter and when the stencil
  1499. test will pass. &nbsp;Both the stencil buffer value and the stencil
  1500. reference value are bit-wise ANDed with the <span
  1501. style="font-style: italic;">mask</span> parameter before the test.<br>
  1502. <br>
  1503. <span style="font-style: italic;"></span><span
  1504. style="font-style: italic;"></span><span style="font-style: italic;"></span>
  1505. <table
  1506. style="text-align: left; margin-left: auto; margin-right: auto; width: 70%;"
  1507. border="1" cellspacing="2" cellpadding="2">
  1508. <tbody>
  1509. <tr>
  1510. <td style="vertical-align: top;">Stencil <span
  1511. style="font-style: italic;">func</span> value<br>
  1512. </td>
  1513. <td style="vertical-align: top;">Stencil test passes if<br>
  1514. </td>
  1515. </tr>
  1516. <tr>
  1517. <td style="vertical-align: top;">GL_LESS<br>
  1518. </td>
  1519. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>&amp;<span
  1520. style="font-style: italic;">mask)</span> &lt; (stencil buffer value
  1521. &amp; <span style="font-style: italic;">mask)</span><br>
  1522. </td>
  1523. </tr>
  1524. <tr>
  1525. <td style="vertical-align: top;">GL_LEQUAL<br>
  1526. </td>
  1527. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>
  1528. &amp; <span style="font-style: italic;">mask) </span>&lt;= (stencil
  1529. buffer value &amp; <span style="font-style: italic;">mask)</span></td>
  1530. </tr>
  1531. <tr>
  1532. <td style="vertical-align: top;">GL_GREATER<br>
  1533. </td>
  1534. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>
  1535. &amp; <span style="font-style: italic;">mask) </span>&gt; (stencil
  1536. buffer value &amp; <span style="font-style: italic;">mask)</span></td>
  1537. </tr>
  1538. <tr>
  1539. <td style="vertical-align: top;">GL_GEQUAL<br>
  1540. </td>
  1541. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>
  1542. &amp; <span style="font-style: italic;">mask) </span>&gt;= (stencil
  1543. buffer value &amp; <span style="font-style: italic;">mask)</span></td>
  1544. </tr>
  1545. <tr>
  1546. <td style="vertical-align: top;">GL_EQUAL<br>
  1547. </td>
  1548. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>
  1549. &amp; <span style="font-style: italic;">mask) </span>== (stencil
  1550. buffer value &amp; <span style="font-style: italic;">mask)</span></td>
  1551. </tr>
  1552. <tr>
  1553. <td style="vertical-align: top;">GL_NOTEQUAL<br>
  1554. </td>
  1555. <td style="vertical-align: top;"><span style="font-style: italic;">(ref</span>
  1556. &amp; <span style="font-style: italic;">mask) </span>!= (stencil
  1557. buffer value &amp; <span style="font-style: italic;">mask)</span></td>
  1558. </tr>
  1559. <tr>
  1560. <td style="vertical-align: top;">GL_NEVER<br>
  1561. </td>
  1562. <td style="vertical-align: top;">never passes<br>
  1563. </td>
  1564. </tr>
  1565. <tr>
  1566. <td style="vertical-align: top;">GL_ALWAYS<br>
  1567. </td>
  1568. <td style="vertical-align: top;">always passes<br>
  1569. </td>
  1570. </tr>
  1571. </tbody>
  1572. </table>
  1573. <br>
  1574. <span style="font-style: italic;"></span><br>
  1575. If the stencil test passes, the fragment is passed to the next
  1576. per-fragment operation. &nbsp;Otherwise, if the stencil test fails, the
  1577. value in the stencil buffer is updated according to the value of the <span
  1578. style="font-style: italic;">stencilFail</span> parameter to <span
  1579. style="font-weight: bold;">glStencilOp</span>.<br>
  1580. <br>
  1581. <table cellpadding="2" cellspacing="2" border="1"
  1582. style="text-align: left; width: 70%; margin-left: auto; margin-right: auto;">
  1583. <tbody>
  1584. <tr>
  1585. <td style="vertical-align: top;"><span style="font-style: italic;">stencilFail</span>
  1586. value<br>
  1587. </td>
  1588. <td style="vertical-align: top;">New stencil buffer value<br>
  1589. </td>
  1590. </tr>
  1591. <tr>
  1592. <td style="vertical-align: top;">GL_KEEP<br>
  1593. </td>
  1594. <td style="vertical-align: top;">originalValue<br>
  1595. </td>
  1596. </tr>
  1597. <tr>
  1598. <td style="vertical-align: top;">GL_ZERO<br>
  1599. </td>
  1600. <td style="vertical-align: top;">0<br>
  1601. </td>
  1602. </tr>
  1603. <tr>
  1604. <td style="vertical-align: top;">GL_INVERT<br>
  1605. </td>
  1606. <td style="vertical-align: top;">BitWiseInvert(originalValue)
  1607. i.e. ~originalValue<br>
  1608. </td>
  1609. </tr>
  1610. <tr>
  1611. <td style="vertical-align: top;">GL_REPLACE<br>
  1612. </td>
  1613. <td style="vertical-align: top;"><span style="font-style: italic;">ref</span><br>
  1614. </td>
  1615. </tr>
  1616. <tr>
  1617. <td style="vertical-align: top;">GL_INCR<br>
  1618. </td>
  1619. <td style="vertical-align: top;">originalValue + 1, clamped to
  1620. [0, 2<sup>N</sup>-1]</td>
  1621. </tr>
  1622. <tr>
  1623. <td style="vertical-align: top;">GL_DECR<br>
  1624. </td>
  1625. <td style="vertical-align: top;">originalValue - 1, clamped to
  1626. [0, 2<sup>N</sup>-1]</td>
  1627. </tr>
  1628. </tbody>
  1629. </table>
  1630. <span style="font-style: italic;"></span><span
  1631. style="font-style: italic;"></span><br>
  1632. <br>
  1633. The <span style="font-style: italic;">depthTestFail</span> and <span
  1634. style="font-style: italic;">depthTestPass</span> parameters to <span
  1635. style="font-weight: bold;">glStencilOp</span> are ignored. &nbsp;Values
  1636. for <span style="font-style: italic;">func</span> and <span
  1637. style="font-style: italic;">stencilFail</span> other than those listed
  1638. in the table will cause the error GL_INVALID_ENUM to be raised.<br>
  1639. <br>
  1640. The stencil test is enabled and disabled with the commands <span
  1641. style="font-weight: bold;">glEnable</span>(GL_STENCIL_TEST) and <span
  1642. style="font-weight: bold;">glDisable</span>(GL_STENCIL_TEST).<br>
  1643. <br>
  1644. The default stencil function is GL_ALWAYS. &nbsp;The default stencil
  1645. reference value is 0. &nbsp;The default stencil mask is ~0. &nbsp;The
  1646. default stencil fail operation is GL_KEEP.<br>
  1647. <br>
  1648. Values written into the stencil buffer are masked with the command<br>
  1649. <br>
  1650. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glStencilMask</span>(GLuint<span
  1651. style="font-style: italic;">mask</span>)<br>
  1652. </div>
  1653. <br>
  1654. Only the bits which are set in <span style="font-style: italic;">mask</span>
  1655. will be modified in the stencil buffer when written to. &nbsp;If each
  1656. stencil buffer value has N bits, only the least significant N bits of <span
  1657. style="font-style: italic;">mask</span> are relevant. &nbsp;The default
  1658. stencil mask is ~0.<br>
  1659. <br>
  1660. <h2>6.4 Blending and Logicop</h2>
  1661. Blending or a logic operation combines the incoming fragment color with
  1662. the destination frame buffer color according to a blending equation or
  1663. bit-wise Boolean logical operation.<br>
  1664. <br>
  1665. Blending is enabled and disabled with the commands <span
  1666. style="font-weight: bold;">glEnable</span>(GL_BLEND) and <span
  1667. style="font-weight: bold;">glDisable</span>(GL_BLEND).<br>
  1668. <br>
  1669. The logic operation is enabled and disabled with the commands <span
  1670. style="font-weight: bold;">glEnable</span>(GL_LOGIC_OP) and <span
  1671. style="font-weight: bold;">glDisable</span>(GL_LOGIC_OP).<br>
  1672. <br>
  1673. If both blending and the logic operation are enabled, the logic
  1674. operation has higher priority; blending is bypassed.<br>
  1675. <br>
  1676. <h3>6.4.1 Logic Op</h3>
  1677. The command<br>
  1678. <br>
  1679. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glLogicop</span>(GLenum<span
  1680. style="font-style: italic;">mode</span>)<br>
  1681. <br>
  1682. </div>
  1683. Specifies the Boolean logic operation for combining the incoming
  1684. fragment color with the destination frame buffer color. &nbsp;Both the
  1685. incoming fragment color and destination frame buffer colors are
  1686. interpreted as four-tuples of unsigned integer color components in the
  1687. range [0, 2<sup>N</sup>-1] where N is the number of bits per color
  1688. channel. &nbsp;N may not be the same for all color channels.<br>
  1689. <br>
  1690. The following table lists all values for <span
  1691. style="font-style: italic;">mode</span> and the boolean arithmetic used
  1692. to combine the incoming fragment color value (src)<span
  1693. style="font-style: italic;"></span><span style="font-style: italic;"></span><span
  1694. style="font-style: italic;"></span><span style="font-style: italic;"></span><span
  1695. style="font-style: italic;"></span> with the destination framebuffer
  1696. color value (dst). &nbsp;Standard ANSI C operators used.<br>
  1697. <br>
  1698. <table cellpadding="2" cellspacing="2" border="1"
  1699. style="text-align: left; width: 50%; margin-left: auto; margin-right: auto;">
  1700. <tbody>
  1701. <tr>
  1702. <td style="vertical-align: top;">LogicOp <span
  1703. style="font-style: italic;">mode</span><br>
  1704. </td>
  1705. <td style="vertical-align: top;">Resulting channel value<br>
  1706. </td>
  1707. </tr>
  1708. <tr>
  1709. <td style="vertical-align: top;">GL_CLEAR<br>
  1710. </td>
  1711. <td style="vertical-align: top;">0<br>
  1712. </td>
  1713. </tr>
  1714. <tr>
  1715. <td style="vertical-align: top;">GL_SET<br>
  1716. </td>
  1717. <td style="vertical-align: top;">~0<br>
  1718. </td>
  1719. </tr>
  1720. <tr>
  1721. <td style="vertical-align: top;">GL_COPY<br>
  1722. </td>
  1723. <td style="vertical-align: top;">src<br>
  1724. </td>
  1725. </tr>
  1726. <tr>
  1727. <td style="vertical-align: top;">GL_COPY_INVERTED<br>
  1728. </td>
  1729. <td style="vertical-align: top;">~s<br>
  1730. </td>
  1731. </tr>
  1732. <tr>
  1733. <td style="vertical-align: top;">GL_NOOP<br>
  1734. </td>
  1735. <td style="vertical-align: top;">dst<br>
  1736. </td>
  1737. </tr>
  1738. <tr>
  1739. <td style="vertical-align: top;">GL_INVERT<br>
  1740. </td>
  1741. <td style="vertical-align: top;">~dst<br>
  1742. </td>
  1743. </tr>
  1744. <tr>
  1745. <td style="vertical-align: top;">GL_AND<br>
  1746. </td>
  1747. <td style="vertical-align: top;">src &amp; dst<br>
  1748. </td>
  1749. </tr>
  1750. <tr>
  1751. <td style="vertical-align: top;">GL_NAND<br>
  1752. </td>
  1753. <td style="vertical-align: top;">~(src &amp; dst)<br>
  1754. </td>
  1755. </tr>
  1756. <tr>
  1757. <td style="vertical-align: top;">GL_AND_REVERSE<br>
  1758. </td>
  1759. <td style="vertical-align: top;">src &amp; ~dst<br>
  1760. </td>
  1761. </tr>
  1762. <tr>
  1763. <td style="vertical-align: top;">GL_AND_INVERTED<br>
  1764. </td>
  1765. <td style="vertical-align: top;">~src &amp; dst<br>
  1766. </td>
  1767. </tr>
  1768. <tr>
  1769. <td style="vertical-align: top;">GL_OR<br>
  1770. </td>
  1771. <td style="vertical-align: top;">src | dst<br>
  1772. </td>
  1773. </tr>
  1774. <tr>
  1775. <td style="vertical-align: top;">GL_NOR<br>
  1776. </td>
  1777. <td style="vertical-align: top;">~(src | dst)<br>
  1778. </td>
  1779. </tr>
  1780. <tr>
  1781. <td style="vertical-align: top;">GL_OR_REVERSE<br>
  1782. </td>
  1783. <td style="vertical-align: top;">src | ~dst<br>
  1784. </td>
  1785. </tr>
  1786. <tr>
  1787. <td style="vertical-align: top;">GL_OR_INVERTED<br>
  1788. </td>
  1789. <td style="vertical-align: top;">~src | dst<br>
  1790. </td>
  1791. </tr>
  1792. <tr>
  1793. <td style="vertical-align: top;">GL_XOR<br>
  1794. </td>
  1795. <td style="vertical-align: top;">src ^ dst<br>
  1796. </td>
  1797. </tr>
  1798. <tr>
  1799. <td style="vertical-align: top;">GL_EQUIV<br>
  1800. </td>
  1801. <td style="vertical-align: top;">~(src ^ dst)<br>
  1802. </td>
  1803. </tr>
  1804. </tbody>
  1805. </table>
  1806. <br>
  1807. The fragment's color is replaced by the result of the logic operation.<br>
  1808. <br>
  1809. Specifying any value for <span style="font-style: italic;">mode</span>
  1810. other than those listed in the above table will cause the error
  1811. GL_INVALID_ENUM to be raised.<br>
  1812. <br>
  1813. The default value for <span style="font-style: italic;">mode</span> is
  1814. GL_COPY. &nbsp;The logic operation is disabled by default.<br>
  1815. <br>
  1816. <h3>6.4.2 Blending</h3>
  1817. The command<br>
  1818. <br>
  1819. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glBlendFunc</span>(GLenum<span
  1820. style="font-style: italic;">srcTerm</span>, GLenum <span
  1821. style="font-style: italic;">dstTerm</span>)<br>
  1822. </div>
  1823. <br>
  1824. specifies the terms of the blending equation. &nbsp;If Cf = (Rf, Gf,
  1825. Bf, Af) is the incoming fragment color and Cb = (Rb, Gb, Bb, Ab) is the
  1826. frame buffer color, then the resulting color Cv = (Rv, Gv, Bv, Av) is
  1827. computed by:<br>
  1828. <br>
  1829. <div style="margin-left: 40px;">Cv = Cf * <span
  1830. style="font-style: italic;">srcTerm</span> + Cb * <span
  1831. style="font-style: italic;">dstTerm</span><br>
  1832. <span style="font-style: italic;"></span></div>
  1833. <span style="font-style: italic;"> </span><br>
  1834. All possible values for <span style="font-style: italic;">srcTerm</span>
  1835. and the corresponding arithmetic term are listed in the following table:<br>
  1836. <br>
  1837. <table cellpadding="2" cellspacing="2" border="1"
  1838. style="text-align: left; width: 70%; margin-left: auto; margin-right: auto;">
  1839. <tbody>
  1840. <tr>
  1841. <td style="vertical-align: top;"><span style="font-style: italic;">srcTerm</span><br>
  1842. </td>
  1843. <td style="vertical-align: top;"><span style="font-style: italic;">srcTerm</span>Arithmetic<br>
  1844. </td>
  1845. </tr>
  1846. <tr>
  1847. <td style="vertical-align: top;">GL_ZERO<br>
  1848. </td>
  1849. <td style="vertical-align: top;">(0, 0, 0, 0)<br>
  1850. </td>
  1851. </tr>
  1852. <tr>
  1853. <td style="vertical-align: top;">GL_ONE<br>
  1854. </td>
  1855. <td style="vertical-align: top;">(1, 1, 1, 1)<br>
  1856. </td>
  1857. </tr>
  1858. <tr>
  1859. <td style="vertical-align: top;">GL_DST_COLOR<br>
  1860. </td>
  1861. <td style="vertical-align: top;">(Rb, Gb, Bb, Ab)<br>
  1862. </td>
  1863. </tr>
  1864. <tr>
  1865. <td style="vertical-align: top;">GL_ONE_MINUS_DST_COLOR<br>
  1866. </td>
  1867. <td style="vertical-align: top;">(1-Rb, 1-Gb, 1-Bb, 1-Ab)<br>
  1868. </td>
  1869. </tr>
  1870. <tr>
  1871. <td style="vertical-align: top;">GL_SRC_ALPHA<br>
  1872. </td>
  1873. <td style="vertical-align: top;">(Af, Af, Af, AF)<br>
  1874. </td>
  1875. </tr>
  1876. <tr>
  1877. <td style="vertical-align: top;">GL_ONE_MINUS_SRC_ALPHA<br>
  1878. </td>
  1879. <td style="vertical-align: top;">(1-Af, 1-Af, 1-Af, 1-Af)<br>
  1880. </td>
  1881. </tr>
  1882. <tr>
  1883. <td style="vertical-align: top;">GL_DST_ALPHA<br>
  1884. </td>
  1885. <td style="vertical-align: top;">(Ab, Ab, Ab, Ab)<br>
  1886. </td>
  1887. </tr>
  1888. <tr>
  1889. <td style="vertical-align: top;">GL_ONE_MINUS_DST_ALPHA<br>
  1890. </td>
  1891. <td style="vertical-align: top;">(1-Ab, 1-Ab, 1-Ab, 1-Ab)<br>
  1892. </td>
  1893. </tr>
  1894. <tr>
  1895. <td style="vertical-align: top;">GL_SRC_ALPHA_SATURATE<br>
  1896. </td>
  1897. <td style="vertical-align: top;">(m, m, m, 1) where m = MIN(Af,
  1898. 1-Ab)<br>
  1899. </td>
  1900. </tr>
  1901. </tbody>
  1902. </table>
  1903. <br>
  1904. All possible values for <span style="font-style: italic;">srcTerm</span>
  1905. and the corresponding arithmetic term are listed in the following table:<br>
  1906. <br>
  1907. <table cellpadding="2" cellspacing="2" border="1"
  1908. style="text-align: left; width: 70%; margin-left: auto; margin-right: auto;">
  1909. <tbody>
  1910. <tr>
  1911. <td style="vertical-align: top;"><span style="font-style: italic;">dstTerm</span><br>
  1912. </td>
  1913. <td style="vertical-align: top;"><span style="font-style: italic;">dstTerm</span>Arithmetic<br>
  1914. </td>
  1915. </tr>
  1916. <tr>
  1917. <td style="vertical-align: top;">GL_ZERO<br>
  1918. </td>
  1919. <td style="vertical-align: top;">(0, 0, 0, 0)<br>
  1920. </td>
  1921. </tr>
  1922. <tr>
  1923. <td style="vertical-align: top;">GL_ONE<br>
  1924. </td>
  1925. <td style="vertical-align: top;">(1, 1, 1, 1)<br>
  1926. </td>
  1927. </tr>
  1928. <tr>
  1929. <td style="vertical-align: top;">GL_SRC_COLOR<br>
  1930. </td>
  1931. <td style="vertical-align: top;">(Rf, Gf, Bf, Af)<br>
  1932. </td>
  1933. </tr>
  1934. <tr>
  1935. <td style="vertical-align: top;">GL_ONE_MINUS_SRC_COLOR<br>
  1936. </td>
  1937. <td style="vertical-align: top;">(1-Rf, 1-Gf, 1-Bf, 1-Af)<br>
  1938. </td>
  1939. </tr>
  1940. <tr>
  1941. <td style="vertical-align: top;">GL_SRC_ALPHA<br>
  1942. </td>
  1943. <td style="vertical-align: top;">(Af, Af, Af, AF)<br>
  1944. </td>
  1945. </tr>
  1946. <tr>
  1947. <td style="vertical-align: top;">GL_ONE_MINUS_SRC_ALPHA<br>
  1948. </td>
  1949. <td style="vertical-align: top;">(1-Af, 1-Af, 1-Af, 1-Af)<br>
  1950. </td>
  1951. </tr>
  1952. <tr>
  1953. <td style="vertical-align: top;">GL_DST_ALPHA<br>
  1954. </td>
  1955. <td style="vertical-align: top;">(Ab, Ab, Ab, Ab)<br>
  1956. </td>
  1957. </tr>
  1958. <tr>
  1959. <td style="vertical-align: top;">GL_ONE_MINUS_DST_ALPHA<br>
  1960. </td>
  1961. <td style="vertical-align: top;">(1-Ab, 1-Ab, 1-Ab, 1-Ab)<br>
  1962. </td>
  1963. </tr>
  1964. </tbody>
  1965. </table>
  1966. <br>
  1967. The fragment's color is replaced by the result of the blending equation.<br>
  1968. <br>
  1969. Values for <span style="font-style: italic;">srcTerm</span> and <span
  1970. style="font-style: italic;">dstTerm</span> other than those listed in
  1971. the table will cause the error GL_INVALID_ENUM to be raised.<br>
  1972. <br>
  1973. The default value for <span style="font-style: italic;">srcTerm</span>
  1974. is GL_ONE. &nbsp;The default value for <span style="font-style: italic;">dstTerm</span>
  1975. is GL_ZERO. &nbsp;Blending is disabled by default.<br>
  1976. <br>
  1977. <h2>6.5 Color Mask</h2>
  1978. The final fragment color is written into the current color buffer at
  1979. the end of the per-fragment operations. &nbsp;Normally, all color
  1980. channels in the frame buffer are replaced with the final fragment color.
  1981. &nbsp;However, the command<br>
  1982. <br>
  1983. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glColorMask</span>(GLboolean<span
  1984. style="font-style: italic;">redMask</span>, GLboolean <span
  1985. style="font-style: italic;">greenMask</span>, GLboolean <span
  1986. style="font-style: italic;">blueMask</span>, GLboolean <span
  1987. style="font-style: italic;">alphaMask</span>)<br>
  1988. </div>
  1989. <br>
  1990. allows selective writing to individual color channels. &nbsp;If <span
  1991. style="font-style: italic;">redMask</span> is GL_TRUE then writing to
  1992. the red color channel is enabled, otherwise it's disabled.
  1993. &nbsp;Similarly, the green, blue and alpha channels can also be masked.<br>
  1994. <br>
  1995. Initially all four mask values are GL_TRUE.<br>
  1996. <br>
  1997. Color masking is not enabled/disabled with the <span
  1998. style="font-weight: bold;">glEnable</span>/<span
  1999. style="font-weight: bold;">glDisable</span> commands.<br>
  2000. <br>
  2001. <h1>7. Frame Buffer Operations</h1>
  2002. The frame buffer is considered to be a two-dimensional array of pixels.
  2003. &nbsp;The frame buffer is also organized into layers or logical buffers.
  2004. &nbsp;There may be a front color buffer, back color buffer and stencil
  2005. buffer. &nbsp;A double-buffered frame buffer has both a front color
  2006. buffer and back color buffer. &nbsp;A single-buffered framebuffer only
  2007. has a front color buffer. &nbsp;Each pixel in a color buffer has a red,
  2008. green and blue value and an optional alpha value.<br>
  2009. <br>
  2010. <h2>7.1 Clearing Buffers</h2>
  2011. Buffers are cleared (set to uniform values) with the command<br>
  2012. <br>
  2013. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glClear</span>(GLbitfield<span
  2014. style="font-style: italic;">buffers</span>)<br>
  2015. </div>
  2016. <br>
  2017. <span style="font-style: italic;">buffers</span> is a bitmask for which
  2018. the value may be the bitwise-OR of the values GL_COLOR_BUFFER_BIT and
  2019. GL_STENCIL_BUFFER_BIT. &nbsp;If the GL_COLOR_BUFFER_BIT bit is
  2020. specified, the current color buffer will be cleared. &nbsp;If the
  2021. GL_STENCIL_BUFFER_BIT bit is specified, the stencil buffer will be
  2022. cleared.<br>
  2023. <br>
  2024. The current color buffer is specified with the command<br>
  2025. <br>
  2026. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glDrawBuffer</span>(GLenum<span
  2027. style="font-style: italic;"> buffer</span>)<br>
  2028. </div>
  2029. <br>
  2030. <span style="font-style: italic;">buffer</span> may be either GL_FRONT,
  2031. GL_BACK or GL_NONE. &nbsp;GL_FRONT indicates that the front color buffer
  2032. will be modified by <span style="font-weight: bold;">glClear</span> and
  2033. any drawing command. &nbsp;GL_BACK indicates that the back color buffer
  2034. will be modified by <span style="font-weight: bold;">glClear</span> and
  2035. any drawing command. &nbsp;GL_NONE indicates that neither color buffer
  2036. will be modified by <span style="font-weight: bold;">glClear</span> or
  2037. any drawing command. &nbsp;GL_BACK is only valid for double-buffered
  2038. frame buffers.<br>
  2039. <br>
  2040. The current scissor rectangle, set by the <span
  2041. style="font-weight: bold;">glScissor</span> command, effects <span
  2042. style="font-weight: bold;">glClear</span><span
  2043. style="font-style: italic;">,</span><span style="font-style: italic;"> </span>limiting
  2044. the clear to the scissor rectangle, if it's enabled. &nbsp;Furthermore, <span
  2045. style="font-weight: bold;"></span>only the color channels enabled by <span
  2046. style="font-weight: bold;">glColorMask</span> will be effected by <span
  2047. style="font-weight: bold;">glClear</span>(GL_COLOR_BUFFER_BIT).
  2048. &nbsp;Likewise, only the stencil bits enabled by <span
  2049. style="font-weight: bold;">glStencilMask</span> will be effected by <span
  2050. style="font-weight: bold;">glClear</span>(GL_STENCIL_BUFFER_BIT).<br>
  2051. <br>
  2052. The current clear color is set with the command<br>
  2053. <br>
  2054. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glClearColor</span>(GLclampf<span
  2055. style="font-style: italic;">red</span>, GLclampf <span
  2056. style="font-style: italic;">green</span>, GLclampf <span
  2057. style="font-style: italic;">blue</span>, GLclampf <span
  2058. style="font-style: italic;">alpha</span>)<br>
  2059. </div>
  2060. <br>
  2061. Subsequent calls to <span style="font-weight: bold;">glClear</span>
  2062. will use the color (<span style="font-style: italic;">red, green, blue,
  2063. alpha</span>) to clear the front or back color buffers.<br>
  2064. <span style="font-style: italic;"></span><br>
  2065. The current stencil clear value is set with the command<br>
  2066. <br>
  2067. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glClearStencil</span>(GLint<span
  2068. style="font-style: italic;">clearValue</span>)<br>
  2069. </div>
  2070. <br>
  2071. If the stencil buffer is N bits deep, the least significant N bits of <span
  2072. style="font-style: italic;">clearValue</span> will be used to clear the
  2073. stencil buffer.<br>
  2074. <br>
  2075. <br>
  2076. <h1>8. Other Features</h1>
  2077. <h2>8.1 Frame Buffer Readback</h2>
  2078. A rectangular region of pixels can be read from the frame buffer and
  2079. placed in client memory with the command<br>
  2080. <br>
  2081. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glReadPixels</span>(GLint<span
  2082. style="font-style: italic;">x</span>, GLint <span
  2083. style="font-style: italic;">y</span>, GLsizei <span
  2084. style="font-style: italic;">width</span>, GLsizei <span
  2085. style="font-style: italic;">height</span>, GLenum <span
  2086. style="font-style: italic;">format</span>, GLenum <span
  2087. style="font-style: italic;">type</span>, GLvoid *<span
  2088. style="font-style: italic;">data</span>)<br>
  2089. </div>
  2090. <br>
  2091. <span style="font-style: italic;">x</span> and <span
  2092. style="font-style: italic;">y</span> specify the coordinate of the
  2093. lower-left corner of the region to read and <span
  2094. style="font-style: italic;">width</span> and <span
  2095. style="font-style: italic;">height</span> specify the size of the
  2096. rectangular region to read. &nbsp;<span style="font-style: italic;">format</span>
  2097. specifies the format of image data and must be either GL_RGB or
  2098. GL_RGBA.&nbsp; <span style="font-style: italic;">type</span> specify the
  2099. data type of the image data and must be either GL_UNSIGNED_BYTE or
  2100. GL_FLOAT. &nbsp;Other values for <span style="font-style: italic;">format</span>
  2101. or <span style="font-style: italic;">type</span> will cause the error
  2102. GL_INVALID_ENUM to be raised.<br>
  2103. <br>
  2104. The framebuffer may contain 3-component colors (red, green, blue) or
  2105. 4-component colors (red, green, blue, alpha). &nbsp;If an alpha channel
  2106. is not present, alpha values default to 1.0.<br>
  2107. <br>
  2108. The frame buffer color components (red, green, blue, alpha) are either
  2109. converted to 8-bit unsigned integers in the range[0, 255] if <span
  2110. style="font-style: italic;">type </span>is GL_UNSIGNED_BYTE or
  2111. converted to floating point values in the range [0, 1] if <span
  2112. style="font-style: italic;">type</span> is GL_FLOAT. &nbsp;The (red,
  2113. green, blue, alpha) tuples are then stored as GL_RGB triplets (by
  2114. dropping the alpha component) or GL_RGBA quadruples in client memory.<br>
  2115. <br>
  2116. Image data is <span style="font-style: italic;">packed</span> into
  2117. client memory according to the pixel packing parameters which are set by
  2118. the command<br>
  2119. <br>
  2120. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glPixelStorei</span>(GLenum<span
  2121. style="font-style: italic;"> pname</span>, GLint <span
  2122. style="font-style: italic;">value</span>)<br>
  2123. </div>
  2124. <br>
  2125. <span style="font-style: italic;">pname</span> must be
  2126. GL_PACK_ROW_LENGTH. &nbsp;<span style="font-style: italic;">value</span>
  2127. indicates the stride (in pixels) between subsequent rows in the
  2128. destination image. &nbsp;If GL_PACK_ROW_LENGTH is zero (the default)
  2129. then the <span style="font-style: italic;">width</span> parameter to <span
  2130. style="font-weight: bold;">glReadPixels</span> indicates the row stride.<br>
  2131. <br>
  2132. Pixel readback takes place as follows:<br>
  2133. <br>
  2134. <div style="margin-left: 40px;">if (GL_PACK_ROW_LENGTH == 0)<br>
  2135. &nbsp;&nbsp;&nbsp; rowLength = <span style="font-style: italic;">width</span>;<br>
  2136. else<br>
  2137. &nbsp;&nbsp;&nbsp; rowLength = GL_PACK_ROW_LENGTH<br>
  2138. <br>
  2139. if (<span style="font-style: italic;">format</span> == GL_RGB) {<br>
  2140. &nbsp;&nbsp;&nbsp; for (i = 0; i &lt; <span style="font-style: italic;">height</span>;
  2141. i++) {<br>
  2142. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j = 0; j &lt; <span
  2143. style="font-style: italic;">width</span>; j++) {<br>
  2144. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; k = (i *
  2145. rowLength + j) * 3;<br>
  2146. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
  2147. style="font-style: italic;">data</span>[k+0] = FrameBuffer(<span
  2148. style="font-style: italic;">x</span> + j, <span
  2149. style="font-style: italic;">y</span> + i).red;<br>
  2150. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; <span
  2151. style="font-style: italic;">data</span>[k+1] = FrameBuffer(<span
  2152. style="font-style: italic;">x</span> + j, <span
  2153. style="font-style: italic;">y</span> + i).green;<br>
  2154. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
  2155. style="font-style: italic;">data</span>[k+2] = FrameBuffer(<span
  2156. style="font-style: italic;">x</span> + j, <span
  2157. style="font-style: italic;">y</span> + i).blue;<span
  2158. style="font-style: italic;"></span><br>
  2159. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
  2160. &nbsp;&nbsp;&nbsp; }<br>
  2161. }<br>
  2162. else {<br>
  2163. &nbsp;&nbsp;&nbsp; for (i = 0; i &lt; <span style="font-style: italic;">height</span>;
  2164. i++) {<br>
  2165. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (j = 0; j &lt; <span
  2166. style="font-style: italic;">width</span>; j++) {<br>
  2167. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; k = (i *
  2168. rowLength + j) * 4;<br>
  2169. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
  2170. style="font-style: italic;">data</span>[k+0] = FrameBuffer(<span
  2171. style="font-style: italic;">x</span> + j, <span
  2172. style="font-style: italic;">y</span> + i).red;<br>
  2173. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; <span
  2174. style="font-style: italic;">data</span>[k+1] = FrameBuffer(<span
  2175. style="font-style: italic;">x</span> + j, <span
  2176. style="font-style: italic;">y</span> + i).green;<br>
  2177. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
  2178. style="font-style: italic;">data</span>[k+2] = FrameBuffer(<span
  2179. style="font-style: italic;">x</span> + j, <span
  2180. style="font-style: italic;">y</span> + i).blue;<span
  2181. style="font-style: italic;"></span><br>
  2182. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
  2183. style="font-style: italic;">data</span>[k+3] = FrameBuffer(<span
  2184. style="font-style: italic;">x</span> + j, <span
  2185. style="font-style: italic;">y</span> + i).alpha;<span
  2186. style="font-style: italic;"></span><br>
  2187. &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
  2188. &nbsp;&nbsp;&nbsp; }<br>
  2189. }<br>
  2190. </div>
  2191. <br>
  2192. The function FrameBuffer(<span style="font-style: italic;">c, r</span>)
  2193. returns the pixel in the frame buffer at column <span
  2194. style="font-style: italic;">c</span> of row <span
  2195. style="font-style: italic;">r. &nbsp;</span><span
  2196. style="font-style: italic;">data</span> is considered to be either a
  2197. GLubyte pointer or a GLfloat pointer, depending on the <span
  2198. style="font-style: italic;">type</span> parameter. &nbsp;Similarly, the
  2199. FrameBuffer function returns either GLubyte values in the range [0, 255]
  2200. or GLfloat values in the range [0,1], depending on the <span
  2201. style="font-style: italic;">type</span> parameter.<br>
  2202. <br>
  2203. Pixels may be read from either the front or back color buffer.
  2204. &nbsp;The command<br>
  2205. <br>
  2206. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glReadBuffer</span>(GLenum<span
  2207. style="font-style: italic;">buffer</span>)<br>
  2208. </div>
  2209. <br>
  2210. specifies the source for reading images with <span
  2211. style="font-weight: bold;">glReadPixels</span>. &nbsp;If <span
  2212. style="font-style: italic;">buffer</span> is GL_FRONT then front color
  2213. buffer is the source. &nbsp;If <span style="font-style: italic;">buffer</span>
  2214. is GL_BACK then the back color buffer is the source. &nbsp;It is illegal
  2215. to specify GL_BACK when the color buffer is not double buffered.
  2216. &nbsp;Any invalid value for <span style="font-style: italic;">buffer</span>
  2217. will raise the error GL_INVALID_ENUM.<br>
  2218. <br>
  2219. The default read source is GL_BACK if the frame buffer is double
  2220. buffered. &nbsp;Otherwise, the default read source is GL_FRONT.<br>
  2221. <br>
  2222. <h2>8.2 Selection Mode</h2>
  2223. Selection mode is typically used to implement <span
  2224. style="font-style: italic;">picking</span>: determining which
  2225. primitive(s) are present at particular window positions. &nbsp;The
  2226. command<br>
  2227. <br>
  2228. <div style="margin-left: 40px;">GLint <span style="font-weight: bold;">glRenderMode</span>(GLenum<span
  2229. style="font-style: italic;">mode</span>)<br>
  2230. </div>
  2231. <br>
  2232. is used to enable selection mode. &nbsp;If <span
  2233. style="font-style: italic;">mode</span> is GL_SELECTION the graphics
  2234. library is put into selection mode. &nbsp;If <span
  2235. style="font-style: italic;">mode</span> is GL_RENDER the graphic
  2236. library is put into normal rendering mode. &nbsp;Any other value for <span
  2237. style="font-style: italic;">mode</span> will raise the error
  2238. GL_INVALID_ENUM.<br>
  2239. <br>
  2240. When in selection mode rendering commands will not effect the
  2241. framebuffer. &nbsp;Instead, a record of the primitives that would have
  2242. been drawn is placed in the <span style="font-style: italic;">selection</span> <span
  2243. style="font-style: italic;">buffer</span>. &nbsp;The selection buffer
  2244. is specified with the command<br>
  2245. <br>
  2246. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glSelectionBuffer</span>(GLsizei<span
  2247. style="font-style: italic;">n</span>, GLuint *<span
  2248. style="font-style: italic;">buffer</span>)<br>
  2249. </div>
  2250. <span style="font-style: italic;"></span><span
  2251. style="font-style: italic;"><br>
  2252. buffer</span> is an array of <span style="font-style: italic;">n</span>
  2253. unsigned integers. &nbsp;No more than <span style="font-style: italic;">n</span>
  2254. values will be placed in the buffer.<br>
  2255. <br>
  2256. The <span style="font-style: italic;">name stack</span> is a stack
  2257. (LIFO) of unsigned integer names. &nbsp;The following commands
  2258. manipulate the name stack:<br>
  2259. <br>
  2260. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glInitNames</span>(void)<br>
  2261. void <span style="font-weight: bold;">glPushName</span>(GLuint <span
  2262. style="font-style: italic;">name</span>)<br>
  2263. void <span style="font-weight: bold;">glPopName</span>(void)<br>
  2264. void <span style="font-weight: bold;">glLoadName</span>(GLuint <span
  2265. style="font-style: italic;">name</span>)<br>
  2266. </div>
  2267. <br>
  2268. <span style="font-weight: bold;">glInitNames</span> resets the name
  2269. stack to an empty state. &nbsp;<span style="font-weight: bold;">glPushName<span
  2270. style="font-style: italic;"> </span></span>pushes the given <span
  2271. style="font-style: italic;">name</span> value onto the stack. &nbsp;<span
  2272. style="font-weight: bold;">glPopName</span> pops the top name from the
  2273. stack. &nbsp;<span style="font-weight: bold;">glLoadName<span
  2274. style="font-style: italic;"> </span></span>replaces the top value on
  2275. the stack with the specified <span style="font-style: italic;">name</span>.
  2276. &nbsp;Stack underflow and overflow conditions cause the errors
  2277. GL_STACK_OVERFLOW and GL_STACK_UNDERFLOW to be raised.<br>
  2278. <br>
  2279. While in selection mode, primitives (points, lines, polygons) are
  2280. transformed and clip-tested normally. &nbsp;Primitives which aren't
  2281. discarded by clipping cause the <span style="font-style: italic;">hit</span> <span
  2282. style="font-style: italic;">data</span> to be updated. &nbsp;The hit
  2283. data consists of three pieces of information: a hit flag, a minimum Z
  2284. value and a maximum Z value. &nbsp;First, the hit flag is set.
  2285. &nbsp;Then, for each of the primitive's vertices, the vertex Z value is
  2286. compared to the minimum and maximum Z values. &nbsp;The minimum Z value
  2287. is updated if the vertex's Z value is less than the minimum Z value.
  2288. &nbsp;The maximum Z value is updated if the vertex's Z value is greater
  2289. than the maximum Z value.<br>
  2290. <br>
  2291. When any of <span style="font-weight: bold;">glInitNames</span><span
  2292. style="font-style: italic;"><span style="font-style: italic;">, </span></span><span
  2293. style="font-weight: bold;">glPushName</span>, <span
  2294. style="font-weight: bold;">glPopName</span>, <span
  2295. style="font-weight: bold;">glLoadName</span> or <span
  2296. style="font-weight: bold;">glRenderMode</span> are called and the hit
  2297. flag is set, a <span style="font-style: italic;">hit record</span> is
  2298. written to the selection buffer.<br>
  2299. <br>
  2300. A hit record consists of a sequence of unsigned integers. &nbsp;The
  2301. first value is the size of the name stack. &nbsp;The second value is the
  2302. minimum Z value multiplied by 2<sup>32</sup>-1. &nbsp;The third value is
  2303. the maximum Z value multiplied by 2<sup>32</sup>-1. &nbsp;The remaining
  2304. values are the values in the name stack, in bottom to top order.
  2305. &nbsp;The hit flag is cleared after a hit record is written to the
  2306. selection buffer. &nbsp;Hit records are places sequentially into the
  2307. selection buffer until it is full or selection mode is terminated.<br>
  2308. <br>
  2309. Selection mode is terminated by calling <span
  2310. style="font-weight: bold;">glRenderMode</span>(GL_RENDER). &nbsp; The
  2311. return value of <span style="font-weight: bold;">glRenderMode</span>
  2312. will be -1 if the selection buffer overflowed. &nbsp;Otherwise, the
  2313. return value will indicate the number of values written into the
  2314. selection buffer.<br>
  2315. <br>
  2316. <h2>8.3 Synchronization</h2>
  2317. The command<br>
  2318. <br>
  2319. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glFlush</span>(void)<br>
  2320. </div>
  2321. <br>
  2322. makes the graphics library to flush all pending graphics commands.
  2323. &nbsp;The command<br>
  2324. <div style="margin-left: 40px;"><br>
  2325. void <span style="font-weight: bold;">glFinish</span>(void)<br>
  2326. </div>
  2327. <br>
  2328. makes the graphics library flush the command queue and wait until those
  2329. commands are completed. &nbsp;<span style="font-weight: bold;">glFlush</span>
  2330. will not return until all previous graphics commands have been fully
  2331. completed.<br>
  2332. <br>
  2333. These commands are typically used to force completion of rendering to
  2334. the front color buffer. &nbsp;Otherwise, rendering to the front color
  2335. buffer may not appear. &nbsp;The <span style="font-style: italic;">swapbuffers</span>
  2336. command (part of the window system binding library) does an implicit
  2337. flush before swapping the front and back color buffers. &nbsp;The <span
  2338. style="font-weight: bold;">glReadPixels</span> command also does an
  2339. implicit flush before reading pixel data from the frame buffer.<br>
  2340. <br>
  2341. <h1>9. State Queries</h1>
  2342. The current value of nearly all library state variables can be queried.
  2343. &nbsp;This chapter describes the commands used for querying the value of
  2344. state variables.<br>
  2345. <br>
  2346. <h2>9.1 General State Queries</h2>
  2347. The command<br>
  2348. <br>
  2349. <div style="margin-left: 40px;">void <span style="font-weight: bold;">glGetFloatv</span>(GLenum<span
  2350. style="font-style: italic;">pname</span>, GLfloat *<span
  2351. style="font-style: italic;">values</span>)<br>
  2352. </div>
  2353. <br>
  2354. returns the value(s) of the state variable specified by <span
  2355. style="font-style: italic;">pname</span>. &nbsp;The following table
  2356. lists all accepted values for <span style="font-style: italic;">pname</span>
  2357. and a description of the value(s). &nbsp;Specifying any other value for <span
  2358. style="font-style: italic;">pname</span> causes the error
  2359. GL_INVALID_ENUM to be raised.<br>
  2360. <br>
  2361. <table cellpadding="2" cellspacing="2" border="1"
  2362. style="text-align: left; width: 90%; margin-left: auto; margin-right: auto;">
  2363. <tbody>
  2364. <tr>
  2365. <td style="vertical-align: top;">Variable (<span
  2366. style="font-style: italic;">pname)</span><br>
  2367. </td>
  2368. <td style="vertical-align: top;">Number of values<br>
  2369. </td>
  2370. <td style="vertical-align: top;">Value(s) Description<br>
  2371. </td>
  2372. </tr>
  2373. <tr>
  2374. <td style="vertical-align: top;">GL_ALPHA_BITS<br>
  2375. </td>
  2376. <td style="vertical-align: top;">1<br>
  2377. </td>
  2378. <td style="vertical-align: top;">Number of bits per alpha value
  2379. in the frame buffer.<br>
  2380. </td>
  2381. </tr>
  2382. <tr>
  2383. <td style="vertical-align: top;">GL_ALPHA_TEST<br>
  2384. </td>
  2385. <td style="vertical-align: top;">1<br>
  2386. </td>
  2387. <td style="vertical-align: top;">Zero if the alpha test is
  2388. disabled.<br>
  2389. One if the alpha test is enabled.<br>
  2390. </td>
  2391. </tr>
  2392. <tr>
  2393. <td style="vertical-align: top;">GL_ALPHA_TEST_FUNC<br>
  2394. </td>
  2395. <td style="vertical-align: top;">1<br>
  2396. </td>
  2397. <td style="vertical-align: top;">The alpha test function.<br>
  2398. </td>
  2399. </tr>
  2400. <tr>
  2401. <td style="vertical-align: top;">GL_BLEND<br>
  2402. </td>
  2403. <td style="vertical-align: top;">1<br>
  2404. </td>
  2405. <td style="vertical-align: top;">Zero if blending is disabled.<br>
  2406. One if blending is enabled.<br>
  2407. </td>
  2408. </tr>
  2409. <tr>
  2410. <td style="vertical-align: top;">GL_BLEND_DST<br>
  2411. </td>
  2412. <td style="vertical-align: top;">1<br>
  2413. </td>
  2414. <td style="vertical-align: top;">Blend destination function/term.<br>
  2415. </td>
  2416. </tr>
  2417. <tr>
  2418. <td style="vertical-align: top;">GL_BLEND_SRC<br>
  2419. </td>
  2420. <td style="vertical-align: top;">1<br>
  2421. </td>
  2422. <td style="vertical-align: top;">Blend source function/term.<br>
  2423. </td>
  2424. </tr>
  2425. <tr>
  2426. <td style="vertical-align: top;">GL_BLUE_BITS<br>
  2427. </td>
  2428. <td style="vertical-align: top;">1<br>
  2429. </td>
  2430. <td style="vertical-align: top;">Number of bits per blue value in
  2431. the frame buffer.<br>
  2432. </td>
  2433. </tr>
  2434. <tr>
  2435. <td style="vertical-align: top;">GL_COLOR_CLEAR_VALUE<br>
  2436. </td>
  2437. <td style="vertical-align: top;">4<br>
  2438. </td>
  2439. <td style="vertical-align: top;">Clear color (red, green, blue,
  2440. alpha).<br>
  2441. </td>
  2442. </tr>
  2443. <tr>
  2444. <td style="vertical-align: top;">GL_COLOR_WRITE_MASK<br>
  2445. </td>
  2446. <td style="vertical-align: top;">4<br>
  2447. </td>
  2448. <td style="vertical-align: top;">Color buffer writemask (red,
  2449. green, blue, alpha).<br>
  2450. Zero if writing is disabled.<br>
  2451. One if writing is enabled.<br>
  2452. </td>
  2453. </tr>
  2454. <tr>
  2455. <td style="vertical-align: top;">GL_CULL_FACE<br>
  2456. </td>
  2457. <td style="vertical-align: top;">1<br>
  2458. </td>
  2459. <td style="vertical-align: top;">Zero if polygon culling is
  2460. disabled.<br>
  2461. One if polygon culling is enabled.<br>
  2462. </td>
  2463. </tr>
  2464. <tr>
  2465. <td style="vertical-align: top;">GL_CULL_FACE_MODE<br>
  2466. </td>
  2467. <td style="vertical-align: top;">1<br>
  2468. </td>
  2469. <td style="vertical-align: top;">Polygon cull mode: GL_FRONT,
  2470. GL_BACK or GL_FRONT_AND_BACK.<br>
  2471. </td>
  2472. </tr>
  2473. <tr>
  2474. <td style="vertical-align: top;">GL_CURRENT_COLOR<br>
  2475. </td>
  2476. <td style="vertical-align: top;">4<br>
  2477. </td>
  2478. <td style="vertical-align: top;">Current color (red, green, blue,
  2479. alpha).<br>
  2480. </td>
  2481. </tr>
  2482. <tr>
  2483. <td style="vertical-align: top;">GL_CURRENT_RASTER_COLOR<br>
  2484. </td>
  2485. <td style="vertical-align: top;">4<br>
  2486. </td>
  2487. <td style="vertical-align: top;">Current raster position color
  2488. (red, green, blue, alpha).<br>
  2489. </td>
  2490. </tr>
  2491. <tr>
  2492. <td style="vertical-align: top;">GL_CURRENT_RASTER_TEXTURE_COORDS<br>
  2493. </td>
  2494. <td style="vertical-align: top;">4<br>
  2495. </td>
  2496. <td style="vertical-align: top;">Current raster position texture
  2497. coordinates (s, t, r, q).<br>
  2498. </td>
  2499. </tr>
  2500. <tr>
  2501. <td style="vertical-align: top;">GL_CURRENT_RASTER_POSITION<br>
  2502. </td>
  2503. <td style="vertical-align: top;">4<br>
  2504. </td>
  2505. <td style="vertical-align: top;">Current raster position (x, y,
  2506. z, w).<br>
  2507. </td>
  2508. </tr>
  2509. <tr>
  2510. <td style="vertical-align: top;">GL_CURRENT_POSITION_VALID<br>
  2511. </td>
  2512. <td style="vertical-align: top;">1<br>
  2513. </td>
  2514. <td style="vertical-align: top;">Zero if current raster position
  2515. is invalid.<br>
  2516. One if current raster position is valid.<br>
  2517. </td>
  2518. </tr>
  2519. <tr>
  2520. <td style="vertical-align: top;">GL_CURRENT_TEXTURE_COORDS<br>
  2521. </td>
  2522. <td style="vertical-align: top;">4<br>
  2523. </td>
  2524. <td style="vertical-align: top;">Current texture coordinates (s,
  2525. t, r, q)<br>
  2526. </td>
  2527. </tr>
  2528. <tr>
  2529. <td style="vertical-align: top;">GL_DOUBLEBUFFER<br>
  2530. </td>
  2531. <td style="vertical-align: top;">1<br>
  2532. </td>
  2533. <td style="vertical-align: top;">Zero if color buffer is
  2534. single-buffered.<br>
  2535. One if color buffer is double-buffered.<br>
  2536. </td>
  2537. </tr>
  2538. <tr>
  2539. <td style="vertical-align: top;">GL_DRAW_BUFFER<br>
  2540. </td>
  2541. <td style="vertical-align: top;">1<br>
  2542. </td>
  2543. <td style="vertical-align: top;">Current color draw buffer:
  2544. GL_FRONT or GL_BACK.<br>
  2545. </td>
  2546. </tr>
  2547. <tr>
  2548. <td style="vertical-align: top;">GL_FRONT_FACE</td>
  2549. <td style="vertical-align: top;">1<br>
  2550. </td>
  2551. <td style="vertical-align: top;">Polygon front-face winding:
  2552. GL_CW or GL_CCW.<br>
  2553. </td>
  2554. </tr>
  2555. <tr>
  2556. <td style="vertical-align: top;">GL_GREEN_BITS<br>
  2557. </td>
  2558. <td style="vertical-align: top;">1<br>
  2559. </td>
  2560. <td style="vertical-align: top;">Number of bits per green value
  2561. in the frame buffer.<br>
  2562. </td>
  2563. </tr>
  2564. <tr>
  2565. <td style="vertical-align: top;">GL_LINE_SMOOTH<br>
  2566. </td>
  2567. <td style="vertical-align: top;">1<br>
  2568. </td>
  2569. <td style="vertical-align: top;">Zero if line smoothing is
  2570. disabled.<br>
  2571. One if line smoothing is enabled.<br>
  2572. </td>
  2573. </tr>
  2574. <tr>
  2575. <td style="vertical-align: top;">GL_LINE_STIPPLE<br>
  2576. </td>
  2577. <td style="vertical-align: top;">1<br>
  2578. </td>
  2579. <td style="vertical-align: top;">Zero if line stippling is
  2580. disabled.<br>
  2581. One if line stippling is enabled.<br>
  2582. </td>
  2583. </tr>
  2584. <tr>
  2585. <td style="vertical-align: top;">GL_LINE_STIPPLE_PATTERN<br>
  2586. </td>
  2587. <td style="vertical-align: top;">1<br>
  2588. </td>
  2589. <td style="vertical-align: top;">Line stipple pattern.<br>
  2590. </td>
  2591. </tr>
  2592. <tr>
  2593. <td style="vertical-align: top;">GL_LINE_STIPPLE_REPEAT<br>
  2594. </td>
  2595. <td style="vertical-align: top;">1<br>
  2596. </td>
  2597. <td style="vertical-align: top;">Line stipple repeat factor.<br>
  2598. </td>
  2599. </tr>
  2600. <tr>
  2601. <td style="vertical-align: top;">GL_LINE_WIDTH<br>
  2602. </td>
  2603. <td style="vertical-align: top;">1<br>
  2604. </td>
  2605. <td style="vertical-align: top;">Line width in pixels.<br>
  2606. </td>
  2607. </tr>
  2608. <tr>
  2609. <td style="vertical-align: top;">GL_LINE_WIDTH_GRANULARITY<br>
  2610. </td>
  2611. <td style="vertical-align: top;">1<br>
  2612. </td>
  2613. <td style="vertical-align: top;">Aliased line width granularity.<br>
  2614. </td>
  2615. </tr>
  2616. <tr>
  2617. <td style="vertical-align: top;">GL_LINE_WIDTH_RANGE<br>
  2618. </td>
  2619. <td style="vertical-align: top;">2<br>
  2620. </td>
  2621. <td style="vertical-align: top;">Minimum and maximum aliased line
  2622. widths.<br>
  2623. </td>
  2624. </tr>
  2625. <tr>
  2626. <td style="vertical-align: top;">GL_ALIASED_LINE_WIDTH_RANGE<br>
  2627. </td>
  2628. <td style="vertical-align: top;">2<br>
  2629. </td>
  2630. <td style="vertical-align: top;">Minimum and maximum antialiased
  2631. line widths.</td>
  2632. </tr>
  2633. <tr>
  2634. <td style="vertical-align: top;">GL_COLOR_LOGIC_OP<br>
  2635. </td>
  2636. <td style="vertical-align: top;">1<br>
  2637. </td>
  2638. <td style="vertical-align: top;">Zero if logicop is disabled.<br>
  2639. One if logicop is enabled.<br>
  2640. </td>
  2641. </tr>
  2642. <tr>
  2643. <td style="vertical-align: top;">GL_LOGIC_OP_MODE<br>
  2644. </td>
  2645. <td style="vertical-align: top;">1<br>
  2646. </td>
  2647. <td style="vertical-align: top;">Logicop function.<br>
  2648. </td>
  2649. </tr>
  2650. <tr>
  2651. <td style="vertical-align: top;">GL_MATRIX_MODE<br>
  2652. </td>
  2653. <td style="vertical-align: top;">1<br>
  2654. </td>
  2655. <td style="vertical-align: top;">Matrix mode: GL_MODELVIEW or
  2656. GL_PROJECTION.<br>
  2657. </td>
  2658. </tr>
  2659. <tr>
  2660. <td style="vertical-align: top;">GL_MAX_MODELVIEW_STACK_DEPTH<br>
  2661. </td>
  2662. <td style="vertical-align: top;">1<br>
  2663. </td>
  2664. <td style="vertical-align: top;">Maximum size of the modelview
  2665. matrix stack.<br>
  2666. </td>
  2667. </tr>
  2668. <tr>
  2669. <td style="vertical-align: top;">GL_MAX_NAME_STACK_DEPTH<br>
  2670. </td>
  2671. <td style="vertical-align: top;">1<br>
  2672. </td>
  2673. <td style="vertical-align: top;">Maximum size of the selection
  2674. name stack.<br>
  2675. </td>
  2676. </tr>
  2677. <tr>
  2678. <td style="vertical-align: top;">GL_MAX_PROJECTION_STACK_DEPTH<br>
  2679. </td>
  2680. <td style="vertical-align: top;">1<br>
  2681. </td>
  2682. <td style="vertical-align: top;">Maximum size of the projection
  2683. matrix stack.<br>
  2684. </td>
  2685. </tr>
  2686. <tr>
  2687. <td style="vertical-align: top;">GL_MAX_TEXTURE_SIZE<br>
  2688. </td>
  2689. <td style="vertical-align: top;">1<br>
  2690. </td>
  2691. <td style="vertical-align: top;">Maximum 2D texture image width
  2692. and height.<br>
  2693. </td>
  2694. </tr>
  2695. <tr>
  2696. <td style="vertical-align: top;">GL_MAX_VIEWPORT_DIMS<br>
  2697. </td>
  2698. <td style="vertical-align: top;">2</td>
  2699. <td style="vertical-align: top;">Maximum viewport width and
  2700. height in pixels.<br>
  2701. </td>
  2702. </tr>
  2703. <tr>
  2704. <td style="vertical-align: top;">GL_MODELVIEW_MATRIX<br>
  2705. </td>
  2706. <td style="vertical-align: top;">16<br>
  2707. </td>
  2708. <td style="vertical-align: top;">Current/top modelview matrix
  2709. values.<br>
  2710. </td>
  2711. </tr>
  2712. <tr>
  2713. <td style="vertical-align: top;">GL_MODELVIEW_MATRIX_STACK_DEPTH<br>
  2714. </td>
  2715. <td style="vertical-align: top;">1<br>
  2716. </td>
  2717. <td style="vertical-align: top;">Current size of the modelview
  2718. matrix stack.<br>
  2719. </td>
  2720. </tr>
  2721. <tr>
  2722. <td style="vertical-align: top;">GL_NAME_STACK_DEPTH<br>
  2723. </td>
  2724. <td style="vertical-align: top;">1<br>
  2725. </td>
  2726. <td style="vertical-align: top;">Current size of the selection
  2727. name stack.<br>
  2728. </td>
  2729. </tr>
  2730. <tr>
  2731. <td style="vertical-align: top;">GL_PACK_ROW_LENGTH<br>
  2732. </td>
  2733. <td style="vertical-align: top;">1<br>
  2734. </td>
  2735. <td style="vertical-align: top;">Pixel packing row length.<br>
  2736. </td>
  2737. </tr>
  2738. <tr>
  2739. <td style="vertical-align: top;">GL_POLYGON_SMOOTH<br>
  2740. </td>
  2741. <td style="vertical-align: top;">1<br>
  2742. </td>
  2743. <td style="vertical-align: top;">Zero if polygon smoothing is
  2744. disabled.<br>
  2745. One if polygon smoothing is enabled.<br>
  2746. </td>
  2747. </tr>
  2748. <tr>
  2749. <td style="vertical-align: top;">GL_PROJECTION_MATRIX<br>
  2750. </td>
  2751. <td style="vertical-align: top;">16<br>
  2752. </td>
  2753. <td style="vertical-align: top;">Current/top projection matrix
  2754. values.<br>
  2755. </td>
  2756. </tr>
  2757. <tr>
  2758. <td style="vertical-align: top;">GL_PROJECTION_STACK_DEPTH<br>
  2759. </td>
  2760. <td style="vertical-align: top;">1<br>
  2761. </td>
  2762. <td style="vertical-align: top;">Current size of projection
  2763. matrix stack.<br>
  2764. </td>
  2765. </tr>
  2766. <tr>
  2767. <td style="vertical-align: top;">GL_READ_BUFFER<br>
  2768. </td>
  2769. <td style="vertical-align: top;">1<br>
  2770. </td>
  2771. <td style="vertical-align: top;">Current read buffer: GL_FRONT or
  2772. GL_BACK.<br>
  2773. </td>
  2774. </tr>
  2775. <tr>
  2776. <td style="vertical-align: top;">GL_RED_BITS<br>
  2777. </td>
  2778. <td style="vertical-align: top;">1<br>
  2779. </td>
  2780. <td style="vertical-align: top;">Number of bits per red value in
  2781. the frame buffer.<br>
  2782. </td>
  2783. </tr>
  2784. <tr>
  2785. <td style="vertical-align: top;">GL_RENDER_MODE<br>
  2786. </td>
  2787. <td style="vertical-align: top;">1<br>
  2788. </td>
  2789. <td style="vertical-align: top;">Current rendering mode:
  2790. GL_RENDER or GL_SELECTION.<br>
  2791. </td>
  2792. </tr>
  2793. <tr>
  2794. <td style="vertical-align: top;">GL_RGBA_MODE<br>
  2795. </td>
  2796. <td style="vertical-align: top;">1<br>
  2797. </td>
  2798. <td style="vertical-align: top;">Always one.<br>
  2799. </td>
  2800. </tr>
  2801. <tr>
  2802. <td style="vertical-align: top;">GL_SCISSOR_BOX<br>
  2803. </td>
  2804. <td style="vertical-align: top;">4<br>
  2805. </td>
  2806. <td style="vertical-align: top;">Scissor box (x, y, width,
  2807. height).<br>
  2808. </td>
  2809. </tr>
  2810. <tr>
  2811. <td style="vertical-align: top;">GL_SCISSOR_TEST<br>
  2812. </td>
  2813. <td style="vertical-align: top;">1<br>
  2814. </td>
  2815. <td style="vertical-align: top;">Zero if scissor test is disabled.<br>
  2816. One if scissor test is enabled.<br>
  2817. </td>
  2818. </tr>
  2819. <tr>
  2820. <td style="vertical-align: top;">GL_SELECTION_BUFFER_SIZE<br>
  2821. </td>
  2822. <td style="vertical-align: top;">1<br>
  2823. </td>
  2824. <td style="vertical-align: top;">Size of selection buffer.<br>
  2825. </td>
  2826. </tr>
  2827. <tr>
  2828. <td style="vertical-align: top;">GL_SHADE_MODEL<br>
  2829. </td>
  2830. <td style="vertical-align: top;">1<br>
  2831. </td>
  2832. <td style="vertical-align: top;">Shade model: GL_FLAT or
  2833. GL_SMOOTH.<br>
  2834. </td>
  2835. </tr>
  2836. <tr>
  2837. <td style="vertical-align: top;">GL_STENCIL_BITS<br>
  2838. </td>
  2839. <td style="vertical-align: top;">1<br>
  2840. </td>
  2841. <td style="vertical-align: top;">Number of bits per stencil value
  2842. in the frame buffer.<br>
  2843. </td>
  2844. </tr>
  2845. <tr>
  2846. <td style="vertical-align: top;">GL_STENCIL_CLEAR_VALUE<br>
  2847. </td>
  2848. <td style="vertical-align: top;">1<br>
  2849. </td>
  2850. <td style="vertical-align: top;">Stencil buffer clear value.<br>
  2851. </td>
  2852. </tr>
  2853. <tr>
  2854. <td style="vertical-align: top;">GL_STENCIL_FAIL<br>
  2855. </td>
  2856. <td style="vertical-align: top;">1<br>
  2857. </td>
  2858. <td style="vertical-align: top;">Stencil fail operation.<br>
  2859. </td>
  2860. </tr>
  2861. <tr>
  2862. <td style="vertical-align: top;">GL_STENCIL_FUNC<br>
  2863. </td>
  2864. <td style="vertical-align: top;">1<br>
  2865. </td>
  2866. <td style="vertical-align: top;">Stencil function.<br>
  2867. </td>
  2868. </tr>
  2869. <tr>
  2870. <td style="vertical-align: top;">GL_STENCIL_REF<br>
  2871. </td>
  2872. <td style="vertical-align: top;">1<br>
  2873. </td>
  2874. <td style="vertical-align: top;">Stencil reference value.<br>
  2875. </td>
  2876. </tr>
  2877. <tr>
  2878. <td style="vertical-align: top;">GL_STENCIL_TEST<br>
  2879. </td>
  2880. <td style="vertical-align: top;">1<br>
  2881. </td>
  2882. <td style="vertical-align: top;">Zero if stencil test is disabled.<br>
  2883. One if stencil test is enabled.<br>
  2884. </td>
  2885. </tr>
  2886. <tr>
  2887. <td style="vertical-align: top;">GL_STENCIL_VALUE_MASK<br>
  2888. </td>
  2889. <td style="vertical-align: top;">1<br>
  2890. </td>
  2891. <td style="vertical-align: top;">Stencil mask value.<br>
  2892. </td>
  2893. </tr>
  2894. <tr>
  2895. <td style="vertical-align: top;">GL_STENCIL_WRITE_MASK<br>
  2896. </td>
  2897. <td style="vertical-align: top;">1<br>
  2898. </td>
  2899. <td style="vertical-align: top;">Stencil buffer write mask.<br>
  2900. </td>
  2901. </tr>
  2902. <tr>
  2903. <td style="vertical-align: top;">GL_TEXTURE_2D<br>
  2904. </td>
  2905. <td style="vertical-align: top;">1<br>
  2906. </td>
  2907. <td style="vertical-align: top;">Zero if 2D texture mapping is
  2908. disabled.<br>
  2909. One if 2D texture mapping is enabled.<br>
  2910. </td>
  2911. </tr>
  2912. <tr>
  2913. <td style="vertical-align: top;">GL_TEXTURE_BINDING_2D</td>
  2914. <td style="vertical-align: top;">1<br>
  2915. </td>
  2916. <td style="vertical-align: top;">Name of currently bound 2D
  2917. texture object.<br>
  2918. </td>
  2919. </tr>
  2920. <tr>
  2921. <td style="vertical-align: top;">GL_TEXTURE_ENV_COLOR<br>
  2922. </td>
  2923. <td style="vertical-align: top;">4<br>
  2924. </td>
  2925. <td style="vertical-align: top;">Texture environment color (red,
  2926. green, blue, alpha).<br>
  2927. </td>
  2928. </tr>
  2929. <tr>
  2930. <td style="vertical-align: top;">GL_TEXTURE_ENV_MODE<br>
  2931. </td>
  2932. <td style="vertical-align: top;">1<br>
  2933. </td>
  2934. <td style="vertical-align: top;">Texture environment mode.<br>
  2935. </td>
  2936. </tr>
  2937. <tr>
  2938. <td style="vertical-align: top;">GL_UNPACK_ROW_LENGTH<br>
  2939. </td>
  2940. <td style="vertical-align: top;">1<br>
  2941. </td>
  2942. <td style="vertical-align: top;">Pixel unpacking row length.<br>
  2943. </td>
  2944. </tr>
  2945. <tr>
  2946. <td style="vertical-align: top;">GL_UNPACK_LSB_FIRST<br>
  2947. </td>
  2948. <td style="vertical-align: top;">1<br>
  2949. </td>
  2950. <td style="vertical-align: top;">Zero if most significant bit is
  2951. unpacked first for bitmaps.<br>
  2952. One if least significant bit is unpacked first for bitmaps.<br>
  2953. </td>
  2954. </tr>
  2955. <tr>
  2956. <td style="vertical-align: top;">GL_VIEWPORT<br>
  2957. </td>
  2958. <td style="vertical-align: top;">4<br>
  2959. </td>
  2960. <td style="vertical-align: top;">Current viewport (x, y, width,
  2961. height).<br>
  2962. </td>
  2963. </tr>
  2964. </tbody>
  2965. </table>
  2966. <br>
  2967. <br>
  2968. <h2>9.2 String Queries</h2>
  2969. The command<br>
  2970. <br>
  2971. <div style="margin-left: 40px;">const GLubyte *<span
  2972. style="font-weight: bold;">glGetString</span>(GLenum <span
  2973. style="font-style: italic;">name</span>)<br>
  2974. </div>
  2975. <br>
  2976. is used to query string-valued values. &nbsp;The legal values for <span
  2977. style="font-style: italic;">name</span> are described in the following
  2978. table:<br>
  2979. <br>
  2980. <table cellpadding="2" cellspacing="2" border="1"
  2981. style="text-align: left; width: 80%; margin-left: auto; margin-right: auto;">
  2982. <tbody>
  2983. <tr>
  2984. <td style="vertical-align: top;"><span style="font-style: italic;">name</span><br>
  2985. </td>
  2986. <td style="vertical-align: top;">Return value<br>
  2987. </td>
  2988. </tr>
  2989. <tr>
  2990. <td style="vertical-align: top;">GL_VERSION<br>
  2991. </td>
  2992. <td style="vertical-align: top;">The library version, such as
  2993. "1.2".<br>
  2994. </td>
  2995. </tr>
  2996. <tr>
  2997. <td style="vertical-align: top;">GL_RENDERER<br>
  2998. </td>
  2999. <td style="vertical-align: top;">The renderer, such as "Mesa DRI
  3000. Radeon".<br>
  3001. </td>
  3002. </tr>
  3003. <tr>
  3004. <td style="vertical-align: top;">GL_VENDOR<br>
  3005. </td>
  3006. <td style="vertical-align: top;">The vendor of this
  3007. implementation, such as "Tungsten Graphics, Inc."<br>
  3008. </td>
  3009. </tr>
  3010. <tr>
  3011. <td style="vertical-align: top;">GL_EXTENSIONS<br>
  3012. </td>
  3013. <td style="vertical-align: top;">A white-space separated list of
  3014. the supported extensions. </td>
  3015. </tr>
  3016. </tbody>
  3017. </table>
  3018. <br>
  3019. <h2>9.3 Error Queries</h2>
  3020. The command<br>
  3021. <br>
  3022. <div style="margin-left: 40px;">GLenum <span style="font-weight: bold;">glGetError</span>(void)<br>
  3023. </div>
  3024. <br>
  3025. returns the current error code. &nbsp;The current error code will be
  3026. set by a GL command when an error condition has been detected. &nbsp;If
  3027. the current error code is already set, subsequent errors will not be
  3028. recorded. &nbsp;The error code is reset/cleared to GL_NO_ERROR when <span
  3029. style="font-weight: bold;">glGetError</span> returns. &nbsp;The
  3030. following error codes are possible:<br>
  3031. <br>
  3032. <table cellpadding="2" cellspacing="2" border="1"
  3033. style="text-align: left; width: 80%; margin-left: auto; margin-right: auto;">
  3034. <tbody>
  3035. <tr>
  3036. <td style="vertical-align: top;">Error code<br>
  3037. </td>
  3038. <td style="vertical-align: top;">Meaning<br>
  3039. </td>
  3040. </tr>
  3041. <tr>
  3042. <td style="vertical-align: top;">GL_NO_ERROR<br>
  3043. </td>
  3044. <td style="vertical-align: top;">No error has been recorded.<br>
  3045. </td>
  3046. </tr>
  3047. <tr>
  3048. <td style="vertical-align: top;">GL_INVALID_ENUM<br>
  3049. </td>
  3050. <td style="vertical-align: top;">An enum parameter had an invalid
  3051. value.<br>
  3052. </td>
  3053. </tr>
  3054. <tr>
  3055. <td style="vertical-align: top;">GL_INVALID_VALUE<br>
  3056. </td>
  3057. <td style="vertical-align: top;">A numeric parameter had an
  3058. invalid value.<br>
  3059. </td>
  3060. </tr>
  3061. <tr>
  3062. <td style="vertical-align: top;">GL_INVALID_OPERATION<br>
  3063. </td>
  3064. <td style="vertical-align: top;">A function was called when not
  3065. legal to do so.<br>
  3066. </td>
  3067. </tr>
  3068. <tr>
  3069. <td style="vertical-align: top;">GL_STACK_OVERFLOW<br>
  3070. </td>
  3071. <td style="vertical-align: top;">The current transformation
  3072. matrix stack is full.<br>
  3073. </td>
  3074. </tr>
  3075. <tr>
  3076. <td style="vertical-align: top;">GL_STACK_UNDERFLOW<br>
  3077. </td>
  3078. <td style="vertical-align: top;">The current transformation
  3079. matrix stack is empty.<br>
  3080. </td>
  3081. </tr>
  3082. <tr>
  3083. <td style="vertical-align: top;">GL_OUT_OF_MEMORY<br>
  3084. </td>
  3085. <td style="vertical-align: top;">The system ran out of dynamic
  3086. memory.<br>
  3087. </td>
  3088. </tr>
  3089. </tbody>
  3090. </table>
  3091. <br>
  3092. <br>
  3093. <h1>10. Unsupported Features</h1>
  3094. This section lists other features and functions which are not supported
  3095. and not previously discussed.<br>
  3096. <br>
  3097. <h2>10.1 Feedback Mode</h2>
  3098. Feedback mode and the following related functions are not supported.<br>
  3099. <br>
  3100. <div style="margin-left: 40px;"><span style="font-weight: bold;">glFeedbackBuffer</span><br>
  3101. <span style="font-weight: bold;">glPassThrough</span><br>
  3102. </div>
  3103. <br>
  3104. <h2>10.2 1D and 3D Textures<br>
  3105. </h2>
  3106. Only 2D texture images are supported. &nbsp;The following functions
  3107. used to specify 1D and 3D texture images are not supported:<br>
  3108. <br>
  3109. <div style="margin-left: 40px;"><span style="font-weight: bold;">glTexImage1D</span><br
  3110. style="font-weight: bold;">
  3111. <span style="font-weight: bold;">glTexImage3D</span><br
  3112. style="font-weight: bold;">
  3113. <span style="font-weight: bold;">glTexSubImage1D</span><br
  3114. style="font-weight: bold;">
  3115. <span style="font-weight: bold;"> glTexSubImage3D</span><br
  3116. style="font-weight: bold;">
  3117. <span style="font-weight: bold;">glCopyTexImage1D</span><br
  3118. style="font-weight: bold;">
  3119. <span style="font-weight: bold;"> glCopyTexSubImage1D</span><br
  3120. style="font-weight: bold;">
  3121. <span style="font-weight: bold;"> glCopyTexSubImage3D</span><br>
  3122. </div>
  3123. <br>
  3124. <h2>10.3 Alternate Texture Image Commands<br>
  3125. </h2>
  3126. Texture images may only be specified with <span
  3127. style="font-weight: bold;">glTexImage2D</span>. &nbsp;The following
  3128. alternate texture image commands are not supported:<br>
  3129. <br>
  3130. <div style="margin-left: 40px; font-weight: bold;">glTexSubImage2D<br>
  3131. glCopyTexImage2D<br>
  3132. glCopyTexSubImage2D<br>
  3133. </div>
  3134. <br>
  3135. <h2>10.4 Proxy Textures</h2>
  3136. Proxy textures are not supported and the GL_PROXY_TEXTURE_2D token is
  3137. not supported by any function.<br>
  3138. <br>
  3139. <br>
  3140. <h2>10.5 Other Texture Commands</h2>
  3141. The following commands related to texture mapping are not supported by
  3142. the subset:<br>
  3143. <br>
  3144. <div style="margin-left: 40px; font-weight: bold;"> glPrioritizeTextures<br>
  3145. glAreTexturesResident<br>
  3146. glIsTexture<br>
  3147. glTexEnviv<br>
  3148. glTexEnvf<br>
  3149. glTexParameterf<br>
  3150. glTexParameteriv<br>
  3151. glTexParameterfv<br>
  3152. </div>
  3153. <br>
  3154. <br>
  3155. <h2>10.6 Copy and Draw Pixels<br>
  3156. </h2>
  3157. The following commands are not supported:<br>
  3158. <br>
  3159. <div style="margin-left: 40px;"><span style="font-weight: bold;">glDrawPixels<br>
  3160. glCopyPixels<br>
  3161. glPixelZoom<br>
  3162. <br>
  3163. </span></div>
  3164. <h2>10.7 Color Index Mode<br>
  3165. </h2>
  3166. Color index mode and the following related commands are not supported:<br>
  3167. <br>
  3168. <span style="font-weight: bold;"></span>
  3169. <div style="margin-left: 40px;"><span style="font-weight: bold;">glIndexub<br>
  3170. </span><span style="font-weight: bold;">glIndexi</span><br>
  3171. <span style="font-weight: bold;">glIndexs<br>
  3172. glIndexf<br>
  3173. glIndexd<br>
  3174. </span><span style="font-weight: bold;">glIndexubv<br>
  3175. </span><span style="font-weight: bold;">glIndexiv</span><br>
  3176. <span style="font-weight: bold;">glIndexsv<br>
  3177. glIndexfv<br>
  3178. glIndexdv</span><span style="font-weight: bold;"><br>
  3179. glIndexMask<br>
  3180. </span><span style="font-weight: bold;">glClearIndex<br>
  3181. glIndexPointer</span><br style="font-weight: bold;">
  3182. <br>
  3183. </div>
  3184. <h2>10.8 Pixel Transfer Operations</h2>
  3185. The pixel transfer operations (scale, bias, look-up table, etc) are not
  3186. supported and the following commands are omitted:<br>
  3187. <br style="font-weight: bold;">
  3188. <div style="margin-left: 40px;"><span style="font-weight: bold;">glPixelTransferf</span><br
  3189. style="font-weight: bold;">
  3190. <span style="font-weight: bold;">glPixelTransferi</span><br
  3191. style="font-weight: bold;">
  3192. <span style="font-weight: bold;">glPixelMapfv</span><br
  3193. style="font-weight: bold;">
  3194. <span style="font-weight: bold;">glPixelMapuiv</span><br
  3195. style="font-weight: bold;">
  3196. <span style="font-weight: bold;">glPixelMapusv</span><br
  3197. style="font-weight: bold;">
  3198. <span style="font-weight: bold;">glGetPixelMapfv</span><br
  3199. style="font-weight: bold;">
  3200. <span style="font-weight: bold;">glGetPixelMapuiv</span><br
  3201. style="font-weight: bold;">
  3202. <span style="font-weight: bold;">glGetPixelMapusv</span><br>
  3203. </div>
  3204. <br>
  3205. <h2>10.9 Hints</h2>
  3206. Hints and the following related command is not supported:<br>
  3207. <br>
  3208. <div style="margin-left: 40px;"><span style="font-weight: bold;">glHint<br>
  3209. </span><br>
  3210. </div>
  3211. <h2>10.10 State Query Commands<br>
  3212. </h2>
  3213. The following state query commands are not supported:<br>
  3214. <br>
  3215. <div style="margin-left: 40px; font-weight: bold;">glGetBooleanv<br>
  3216. glGetIntegerv<br>
  3217. glGetDoublev<br>
  3218. glGetPointerv<br>
  3219. glGetTexEnvi<br>
  3220. glGetTexEnvf<br>
  3221. glGetTexParameteriv<br>
  3222. glGetTexParameterfv<br>
  3223. glGetTexLevelParameteriv<br>
  3224. glGetTexLevelParameterfv<br>
  3225. glGetTexImage<br>
  3226. glGetClipPlane<br>
  3227. </div>
  3228. <br>
  3229. <h2>10.11 Attribute Stacks</h2>
  3230. State attribute stacks and the following related commands are not
  3231. supported:<br>
  3232. <br>
  3233. <div style="margin-left: 40px;"><span style="font-weight: bold;">glPushAttrib</span><br
  3234. style="font-weight: bold;">
  3235. <span style="font-weight: bold;">glPopAtttrib</span><br>
  3236. <br style="font-weight: bold;">
  3237. </div>
  3238. <h2>10.12 Double-Valued Functions</h2>
  3239. All functions which take double-precision floating point values, but
  3240. for which there is an equivalent single-precision valued function, are
  3241. omitted. &nbsp;This includes, but is not limited to:<br>
  3242. <br>
  3243. <div style="margin-left: 40px;"><span style="font-weight: bold;">glVertex2d</span><br
  3244. style="font-weight: bold;">
  3245. <span style="font-weight: bold;">glVertex2dv</span><br
  3246. style="font-weight: bold;">
  3247. <span style="font-weight: bold;">glVertex3d</span><br
  3248. style="font-weight: bold;">
  3249. <span style="font-weight: bold;"> glVertex3dv</span><br
  3250. style="font-weight: bold;">
  3251. <span style="font-weight: bold;">glVertex4d</span><br
  3252. style="font-weight: bold;">
  3253. <span style="font-weight: bold;"> glVertex4dv</span><br
  3254. style="font-weight: bold;">
  3255. <span style="font-weight: bold;">glColor3d</span><br
  3256. style="font-weight: bold;">
  3257. <span style="font-weight: bold;">glColor3d</span><span
  3258. style="font-weight: bold;">v</span><br style="font-weight: bold;">
  3259. <span style="font-weight: bold;">glColor4d</span><br
  3260. style="font-weight: bold;">
  3261. <span style="font-weight: bold;"> glColor4dv</span><br
  3262. style="font-weight: bold;">
  3263. <span style="font-weight: bold;">glTexCoord1d</span><br
  3264. style="font-weight: bold;">
  3265. <span style="font-weight: bold;">glTexCoord1d</span><span
  3266. style="font-weight: bold;">v</span><br style="font-weight: bold;">
  3267. <span style="font-weight: bold;">glTexCoord2d</span><br
  3268. style="font-weight: bold;">
  3269. <span style="font-weight: bold;"> glTexCoord2dv</span><br
  3270. style="font-weight: bold;">
  3271. <span style="font-weight: bold;">glTexCoord3d</span><br
  3272. style="font-weight: bold;">
  3273. <span style="font-weight: bold;"> glTexCoord3dv</span><br
  3274. style="font-weight: bold;">
  3275. <span style="font-weight: bold;">glTexCoord4d</span><br
  3276. style="font-weight: bold;">
  3277. <span style="font-weight: bold;"> glTexCoord4dv</span><br
  3278. style="font-weight: bold;">
  3279. <span style="font-weight: bold;">glRasterPos2d</span><br
  3280. style="font-weight: bold;">
  3281. <span style="font-weight: bold;"> glRasterPos2dv</span><br
  3282. style="font-weight: bold;">
  3283. <span style="font-weight: bold;">glRasterPos3d</span><br
  3284. style="font-weight: bold;">
  3285. <span style="font-weight: bold;"> glRasterPos3dv</span><br
  3286. style="font-weight: bold;">
  3287. <span style="font-weight: bold;">glRasterPos4d</span><br
  3288. style="font-weight: bold;">
  3289. <span style="font-weight: bold;"> glRasterPos4dv</span><br
  3290. style="font-weight: bold;">
  3291. <span style="font-weight: bold;">glLoadMatrixd</span><br
  3292. style="font-weight: bold;">
  3293. <span style="font-weight: bold;">glMultMatrixd</span><br
  3294. style="font-weight: bold;">
  3295. <span style="font-weight: bold;">glScaled</span><br
  3296. style="font-weight: bold;">
  3297. <span style="font-weight: bold;">glRotated</span><br
  3298. style="font-weight: bold;">
  3299. <span style="font-weight: bold;">glTranslated<br>
  3300. glRectd<br>
  3301. glRectdv<br>
  3302. </span> <span style="font-weight: bold;"><br>
  3303. </span> </div>
  3304. <h2>10.13 Evaluators</h2>
  3305. Evaluators and the following related commands are not supported:<br>
  3306. <br>
  3307. <div style="margin-left: 40px;"><span style="font-weight: bold;">glMap1f</span><br
  3308. style="font-weight: bold;">
  3309. <span style="font-weight: bold;">glMap2d</span><br
  3310. style="font-weight: bold;">
  3311. <span style="font-weight: bold;">glMap2f</span><br
  3312. style="font-weight: bold;">
  3313. <span style="font-weight: bold;">glGetMapdv</span><br
  3314. style="font-weight: bold;">
  3315. <span style="font-weight: bold;">glGetMapfv</span><br
  3316. style="font-weight: bold;">
  3317. <span style="font-weight: bold;">glGetMapiv</span><br
  3318. style="font-weight: bold;">
  3319. <span style="font-weight: bold;">glEvalCoord1d</span><br
  3320. style="font-weight: bold;">
  3321. <span style="font-weight: bold;">glEvalCoord1f</span><br
  3322. style="font-weight: bold;">
  3323. <span style="font-weight: bold;">glEvalCoord1dv</span><br
  3324. style="font-weight: bold;">
  3325. <span style="font-weight: bold;">glEvalCoord1fv</span><br
  3326. style="font-weight: bold;">
  3327. <span style="font-weight: bold;">glEvalCoord2d</span><br
  3328. style="font-weight: bold;">
  3329. <span style="font-weight: bold;">glEvalCoord2f</span><br
  3330. style="font-weight: bold;">
  3331. <span style="font-weight: bold;">glEvalCoord2dv</span><br
  3332. style="font-weight: bold;">
  3333. <span style="font-weight: bold;">glEvalCoord2fv</span><br
  3334. style="font-weight: bold;">
  3335. <span style="font-weight: bold;">glMapGrid1d</span><br
  3336. style="font-weight: bold;">
  3337. <span style="font-weight: bold;">glMapGrid1f</span><br
  3338. style="font-weight: bold;">
  3339. <span style="font-weight: bold;">glMapGrid2d</span><br
  3340. style="font-weight: bold;">
  3341. <span style="font-weight: bold;">glMapGrid2f</span><br
  3342. style="font-weight: bold;">
  3343. <span style="font-weight: bold;">glEvalPoint1</span><br
  3344. style="font-weight: bold;">
  3345. <span style="font-weight: bold;">glEvalPoint2</span><br
  3346. style="font-weight: bold;">
  3347. <span style="font-weight: bold;">glEvalMesh1</span><br
  3348. style="font-weight: bold;">
  3349. <span style="font-weight: bold;">glEvalMesh2</span><br
  3350. style="font-weight: bold;">
  3351. </div>
  3352. <br>
  3353. <h2>10.14 Display Lists</h2>
  3354. Display lists and the following related commands are not supported:<br>
  3355. <br>
  3356. <div style="margin-left: 40px; font-weight: bold;">glIsList<br>
  3357. glDeleteLists<br>
  3358. glGenLists<br>
  3359. glNewList<br>
  3360. glEndList<br>
  3361. glCallList<br>
  3362. glCallLists<br>
  3363. glListBase<br>
  3364. </div>
  3365. <br>
  3366. <h2>10.15 Accumulation Buffer</h2>
  3367. The accumulation buffer and the following related commands are not
  3368. supported:<br>
  3369. <br style="font-weight: bold;">
  3370. <div style="margin-left: 40px;"><span style="font-weight: bold;">glAccum</span><br
  3371. style="font-weight: bold;">
  3372. <span style="font-weight: bold;">glClearAccum</span><br>
  3373. </div>
  3374. <br>
  3375. <h2>10.16 Fog</h2>
  3376. Fog and the following related commands are not supported:<br>
  3377. <br>
  3378. <div style="margin-left: 40px; font-weight: bold;"> glFogi<br>
  3379. glFogf<br>
  3380. glFogiv<br>
  3381. glFogfv<br>
  3382. </div>
  3383. <br>
  3384. <h2>10.17 Depth Test</h2>
  3385. Depth testing and the following related commands are not supported:<br>
  3386. <br>
  3387. <div style="margin-left: 40px;"><span style="font-weight: bold;">glDepthFunc</span><br
  3388. style="font-weight: bold;">
  3389. <span style="font-weight: bold;">glDepthMask</span><br
  3390. style="font-weight: bold;">
  3391. <span style="font-weight: bold;">glDepthRange</span><br
  3392. style="font-weight: bold;">
  3393. <span style="font-weight: bold;">glClearDepth</span><br>
  3394. </div>
  3395. <br>
  3396. <h2>10.18 Imaging Subset</h2>
  3397. The OpenGL imaging subset (which implements features such as
  3398. convolution, histogram, min/max recording, color matrix and color
  3399. tables) is not supported.<br>
  3400. <br>
  3401. <br>
  3402. <h1>Appendix A: Issues</h1>
  3403. This appendix lists documentation and subset issues with their current
  3404. status. &nbsp;For items which are still open, the documentation (above)
  3405. follows the recommended solution.<br>
  3406. <br>
  3407. <h2>A.1 Vertex Arrays</h2>
  3408. Should vertex arrays be supported? &nbsp;Is there a performance
  3409. advantage?<br>
  3410. <br>
  3411. RESOLUTION: No, there isn't enough of a performance advantage to
  3412. justify them.<br>
  3413. <br>
  3414. <h2>A.2 Polygon Antialiasing and Edge Flags</h2>
  3415. Should edge flags be supported for antialiasing?<br>
  3416. <br>
  3417. Edge flags don't effect antialiasing, at least not normally. &nbsp;A
  3418. number of approaches to antialiasing have been summarized in email.<br>
  3419. <br>
  3420. RECOMMENDATION: don't support edge flags. &nbsp;They don't effect
  3421. polygon antialiasing.<br>
  3422. <br>
  3423. RESOLUTION: closed, as of 26 Feb 2003.<br>
  3424. <br>
  3425. <h2>A.3 glRasterPos vs. glWindowPos</h2>
  3426. Should glRasterPos and/or glWindowPos commands be supported?<br>
  3427. <br>
  3428. RESOLUTION: Closed: implement glRasterPos commands, but not glWindowPos
  3429. commands.<br>
  3430. <br>
  3431. <h2>A.4 GL_IBM_rasterpos_clip extension</h2>
  3432. Should the GL_IBM_rasterpos_clip extension be implemented?<br>
  3433. <br>
  3434. RESOLUTION: &nbsp;No. &nbsp;It's not required.<br>
  3435. <br>
  3436. <h2>A.5 Image Formats and Types</h2>
  3437. Which image formats and types should be supported for <span
  3438. style="font-weight: bold;">glTexImage2D</span> and <span
  3439. style="font-weight: bold;">glReadPixels</span>?<br>
  3440. <br>
  3441. OpenGL specifies a <span style="font-weight: bold;">large</span>
  3442. variety of image formats and data types. &nbsp;Only a few are commonly
  3443. used.<br>
  3444. <br>
  3445. RECOMMENDATION: &nbsp;we propose a subset:<br>
  3446. <br>
  3447. For <span style="font-weight: bold;">glTexImage2D</span> only allow <span
  3448. style="font-style: italic;">type</span>=GL_UNSIGNED_BYTE and <span
  3449. style="font-style: italic;">format</span>=GL_RGBA, GL_RGB,
  3450. GL_INTENSITY. &nbsp; Only allow <span style="font-style: italic;">internalFormat</span>
  3451. to be GL_RGBA, GL_RGB or GL_INTENSITY as well.&nbsp; Basically, only
  3452. support image formats/types that are directly supported by the Radeon
  3453. hardware. &nbsp;This will allow <span style="font-weight: bold;">glTexImage2D</span>
  3454. to basically just use <span style="font-weight: bold;">memcpy</span> to
  3455. copy texture images.<br>
  3456. <br>
  3457. For <span style="font-weight: bold;">glReadPixels</span>, only allow <span
  3458. style="font-style: italic;">type</span> = GL_UNSIGNED_BYTE or GL_FLOAT.
  3459. &nbsp;Only allow <span style="font-style: italic;">format</span> =
  3460. GL_RGB or GL_RGBA. &nbsp;This is just enough to support the OpenGL
  3461. conformance tests.<br>
  3462. <br>
  3463. RESOLUTION: open<br>
  3464. <br>
  3465. <h2>A.6 Texture Environment Modes</h2>
  3466. Which texture environment modes should be supported? &nbsp;OpenGL 1.2
  3467. has GL_REPLACE, GL_MODULATE, GL_DECAL and GL_BLEND. &nbsp;GL_DECAL isn't
  3468. defined for all base internal texture formats. &nbsp;GL_ADD is another
  3469. useful mode. &nbsp;Perhaps drop GL_DECAL mode and add GL_ADD mode.<br>
  3470. <br>
  3471. RECOMMENDATION: implement the standard modes GL_REPLACE, GL_MODULATE,
  3472. GL_DECAL and GL_BLEND.<br>
  3473. <br>
  3474. RESOLUTION: open<br>
  3475. <br>
  3476. <h2>A.7 Truncated Mipmaps and LOD Control</h2>
  3477. Should we support the GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_MAX_LEVEL,
  3478. GL_TEXTURE_MIN_LOD and GL_TEXTURE_MAX_LOD texture parameters?<br>
  3479. <br>
  3480. RECOMMENDATION: &nbsp;We propose omitting these features at this time,
  3481. in the interest of simplifying the driver.<br>
  3482. <br>
  3483. RESOLUTION: open<br>
  3484. <br>
  3485. <h2>A.8 Texture Priorities and Residency</h2>
  3486. Should the subset support texture priorities via <span
  3487. style="font-weight: bold;">glPrioritizeTextures</span> and the <span
  3488. style="font-weight: bold;">glAreTexturesResident</span> command?<br>
  3489. <br>
  3490. RECOMMENDATION: &nbsp;Few applications use these features and
  3491. functions. &nbsp;We propose omitting them to simplify the driver.<br>
  3492. <br>
  3493. RESOLUTION: open<br>
  3494. <br>
  3495. <h2>A.9 Pixel Pack/Unpack Alignment Control</h2>
  3496. Should we support the GL_PACK_ALIGNMENT and GL_UNPACK_ALIGNMENT options?<br>
  3497. <br>
  3498. These are used to align pixel data addresses to 1, 2 and 4-byte
  3499. multiples for <span style="font-weight: bold;">glBitmap, glTexImage2D</span>
  3500. and <span style="font-weight: bold;">glReadPixels</span>. &nbsp;These
  3501. aren't strictly needed since the user can provide a 1, 2 or 4-byte
  3502. aligned address and appropriate GL_PACK_ROW_LENGTH or
  3503. GL_UNPACK_ROW_LENGTH values instead.<br>
  3504. <br>
  3505. RECOMMENDATION: &nbsp;We recommend omitting them to simplify the driver.<br>
  3506. <br>
  3507. RESOLUTION: open<br>
  3508. <br>
  3509. <h2>A.10 Pixel Pack/Unpack Skip Rows/Pixels Control</h2>
  3510. Should we support the GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS,
  3511. GL_PACK_SKIP_PIXELS and GL_PACK_SKIP_ROWS options for pixel
  3512. unpacking/packing?<br>
  3513. <br>
  3514. These options aren't really needed since the user can adjust the start
  3515. address and GL_PACK/UNPACK_ROW_LENGTH parameters to achieve the same
  3516. effect.<br>
  3517. <br>
  3518. RECOMMENDATION: &nbsp;omit these parameters.<br>
  3519. <br>
  3520. RESOLUTION: open<br>
  3521. <br>
  3522. <h2>A.11 Texture State Queries</h2>
  3523. Should we support the command <span style="font-weight: bold;">glGetTexEnvi/fv,
  3524. glGetTexParameteri/fv</span> and <span style="font-weight: bold;">glGetTexLevelParameteri/fv</span>?<br>
  3525. <br>
  3526. RECOMMENDATION: &nbsp;No.&nbsp;They're seldom needed and their
  3527. implementation is several hundred lines of code in length.<br>
  3528. <br>
  3529. RESOLUTION: &nbsp;open<br>
  3530. <br>
  3531. <h2>A.12 glGetIntegerv, glGetBooleanv and glGetDoublev</h2>
  3532. Should we support the commands <span style="font-weight: bold;">glGetIntegerv,
  3533. glGetBooleanv </span>and <span style="font-weight: bold;">glGetDoublev</span>
  3534. in addition to <span style="font-weight: bold;">glGetFloatv</span>?<br>
  3535. <br>
  3536. RECOMMENDATION: &nbsp;Omit the boolean, integer and double-valued
  3537. functions. All state values which can be queried by these commands can
  3538. be expressed as floating point values and queried with <span
  3539. style="font-weight: bold;">glGetFloatv</span>. &nbsp;The
  3540. implementation of the other three commands involves many lines of code.<br>
  3541. <br>
  3542. RESOLUTION: &nbsp;open<br>
  3543. <br>
  3544. <h2>A.13 glBitmap and Per-Fragment Operations</h2>
  3545. Should bitmaps rendered with <span style="font-weight: bold;">glBitmap</span>
  3546. be subjected to the per-fragment operations?<br>
  3547. <br>
  3548. If bitmaps are implemented with points it will be easy to implement the
  3549. per-fragment operations. &nbsp;Otherwise, it could be difficult.<br>
  3550. <br>
  3551. RECOMMENDATION: &nbsp;Implement glBitmap by drawing points/pixels with
  3552. the hardware. &nbsp;This will make supporting the per-fragments
  3553. trivially easy. &nbsp;Also, it makes portrait-mode display relatively
  3554. easy.<br>
  3555. <br>
  3556. RESOLUTION: &nbsp;open<br>
  3557. <br>
  3558. <h2>A.14 Reduced gl.h Header File</h2>
  3559. Should we produce a reduced gl.h header file which only defines the
  3560. tokens and functions which are implemented by the subset?<br>
  3561. <br>
  3562. RECOMMENDATION: yes. &nbsp;It would be a useful reference to
  3563. programmers to quickly determine which functions and tokens are
  3564. supported.<br>
  3565. <br>
  3566. RESOLUTION: open<br>
  3567. <br>
  3568. <h2>A.15 glPolygonMode</h2>
  3569. Is <span style="font-weight: bold;">glPolygonMode</span> needed?<br>
  3570. <br>
  3571. RECOMMENDATION: No. &nbsp;Omit it.<br>
  3572. <br>
  3573. RESOLUTION: closed, as of 26 Feb 2003<br>
  3574. <br>
  3575. <br>
  3576. <p> </p>
  3577. </body>
  3578. </html>