home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / mesa / src / api2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-31  |  36.9 KB  |  1,778 lines

  1. /* $Id: api2.c,v 1.5 1997/11/02 20:19:04 brianp Exp $ */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  2.5
  6.  * Copyright (C) 1995-1997  Brian Paul
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Library General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2 of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Library General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Library General Public
  19.  * License along with this library; if not, write to the Free
  20.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22.  
  23.  
  24. /*
  25.  * $Log: api2.c,v $
  26.  * Revision 1.5  1997/11/02 20:19:04  brianp
  27.  * small changes to gl_TexSubImage[123]D()
  28.  *
  29.  * Revision 1.4  1997/10/29 02:24:29  brianp
  30.  * added glTexImage2D() hack for GLQuake (David Bucciarelli v20 3dfx)
  31.  *
  32.  * Revision 1.3  1997/10/29 01:29:09  brianp
  33.  * added GL_EXT_point_parameters extension from Daniel Barrero
  34.  *
  35.  * Revision 1.2  1997/09/27 00:15:05  brianp
  36.  * added GL_EXT_paletted_texture extension
  37.  *
  38.  * Revision 1.1  1997/08/22 01:42:18  brianp
  39.  * Initial revision
  40.  *
  41.  */
  42.  
  43.  
  44. #ifdef PC_HEADER
  45. #include "all.h"
  46. #else
  47. #include <stdio.h>
  48. #include <stdlib.h>
  49. #include "api.h"
  50. #include "bitmap.h"
  51. #include "context.h"
  52. #include "eval.h"
  53. #include "image.h"
  54. #include "macros.h"
  55. #include "matrix.h"
  56. #include "teximage.h"
  57. #include "types.h"
  58. #include "vb.h"
  59. #endif
  60.  
  61.  
  62.  
  63. void APIENTRY glOrtho( GLdouble left, GLdouble right,
  64.                GLdouble bottom, GLdouble top,
  65.                GLdouble nearval, GLdouble farval )
  66. {
  67.    GET_CONTEXT;
  68.    CHECK_CONTEXT;
  69.    (*CC->API.Ortho)(CC, left, right, bottom, top, nearval, farval);
  70. }
  71.  
  72.  
  73. void APIENTRY glPassThrough( GLfloat token )
  74. {
  75.    GET_CONTEXT;
  76.    CHECK_CONTEXT;
  77.    (*CC->API.PassThrough)(CC, token);
  78. }
  79.  
  80.  
  81. void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
  82. {
  83.    GET_CONTEXT;
  84.    CHECK_CONTEXT;
  85.    (*CC->API.PixelMapfv)( CC, map, mapsize, values );
  86. }
  87.  
  88.  
  89. void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values )
  90. {
  91.    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
  92.    GLuint i;
  93.    GET_CONTEXT;
  94.    CHECK_CONTEXT;
  95.  
  96.    if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
  97.       for (i=0;i<mapsize;i++) {
  98.      fvalues[i] = (GLfloat) values[i];
  99.       }
  100.    }
  101.    else {
  102.       for (i=0;i<mapsize;i++) {
  103.      fvalues[i] = UINT_TO_FLOAT( values[i] );
  104.       }
  105.    }
  106.    (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
  107. }
  108.  
  109.  
  110.  
  111. void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values )
  112. {
  113.    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
  114.    GLuint i;
  115.    GET_CONTEXT;
  116.    CHECK_CONTEXT;
  117.  
  118.    if (map==GL_PIXEL_MAP_I_TO_I || map==GL_PIXEL_MAP_S_TO_S) {
  119.       for (i=0;i<mapsize;i++) {
  120.      fvalues[i] = (GLfloat) values[i];
  121.       }
  122.    }
  123.    else {
  124.       for (i=0;i<mapsize;i++) {
  125.      fvalues[i] = USHORT_TO_FLOAT( values[i] );
  126.       }
  127.    }
  128.    (*CC->API.PixelMapfv)( CC, map, mapsize, fvalues );
  129. }
  130.  
  131.  
  132. void APIENTRY glPixelStoref( GLenum pname, GLfloat param )
  133. {
  134.    GET_CONTEXT;
  135.    CHECK_CONTEXT;
  136.    (*CC->API.PixelStorei)( CC, pname, (GLint) param );
  137. }
  138.  
  139.  
  140. void APIENTRY glPixelStorei( GLenum pname, GLint param )
  141. {
  142.    GET_CONTEXT;
  143.    CHECK_CONTEXT;
  144.    (*CC->API.PixelStorei)( CC, pname, param );
  145. }
  146.  
  147.  
  148. void APIENTRY glPixelTransferf( GLenum pname, GLfloat param )
  149. {
  150.    GET_CONTEXT;
  151.    CHECK_CONTEXT;
  152.    (*CC->API.PixelTransferf)(CC, pname, param);
  153. }
  154.  
  155.  
  156. void APIENTRY glPixelTransferi( GLenum pname, GLint param )
  157. {
  158.    GET_CONTEXT;
  159.    CHECK_CONTEXT;
  160.    (*CC->API.PixelTransferf)(CC, pname, (GLfloat) param);
  161. }
  162.  
  163.  
  164. void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor )
  165. {
  166.    GET_CONTEXT;
  167.    CHECK_CONTEXT;
  168.    (*CC->API.PixelZoom)(CC, xfactor, yfactor);
  169. }
  170.  
  171.  
  172. void APIENTRY glPointSize( GLfloat size )
  173. {
  174.    GET_CONTEXT;
  175.    CHECK_CONTEXT;
  176.    (*CC->API.PointSize)(CC, size);
  177. }
  178.  
  179.  
  180. void APIENTRY glPolygonMode( GLenum face, GLenum mode )
  181. {
  182.    GET_CONTEXT;
  183.    CHECK_CONTEXT;
  184.    (*CC->API.PolygonMode)(CC, face, mode);
  185. }
  186.  
  187.  
  188. void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units )
  189. {
  190.    GET_CONTEXT;
  191.    CHECK_CONTEXT;
  192.    (*CC->API.PolygonOffset)( CC, factor, units );
  193. }
  194.  
  195.  
  196. #ifdef GL_EXT_polygon_offset
  197. void APIENTRY glPolygonOffsetEXT( GLfloat factor, GLfloat bias )
  198. {
  199.    glPolygonOffset( factor, bias * DEPTH_SCALE );
  200. }
  201. #endif
  202.  
  203.  
  204. void APIENTRY glPolygonStipple( const GLubyte *mask )
  205. {
  206.    GET_CONTEXT;
  207.    CHECK_CONTEXT;
  208.    (*CC->API.PolygonStipple)(CC, mask);
  209. }
  210.  
  211.  
  212. void APIENTRY glPopAttrib( void )
  213. {
  214.    GET_CONTEXT;
  215.    CHECK_CONTEXT;
  216.    (*CC->API.PopAttrib)(CC);
  217. }
  218.  
  219.  
  220. void APIENTRY glPopClientAttrib( void )
  221. {
  222.    GET_CONTEXT;
  223.    CHECK_CONTEXT;
  224.    (*CC->API.PopClientAttrib)(CC);
  225. }
  226.  
  227.  
  228. void APIENTRY glPopMatrix( void )
  229. {
  230.    GET_CONTEXT;
  231.    CHECK_CONTEXT;
  232.    (*CC->API.PopMatrix)( CC );
  233. }
  234.  
  235.  
  236. void APIENTRY glPopName( void )
  237. {
  238.    GET_CONTEXT;
  239.    CHECK_CONTEXT;
  240.    (*CC->API.PopName)(CC);
  241. }
  242.  
  243.  
  244. void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures,
  245.                     const GLclampf *priorities )
  246. {
  247.    GET_CONTEXT;
  248.    CHECK_CONTEXT;
  249.    (*CC->API.PrioritizeTextures)(CC, n, textures, priorities);
  250. }
  251.  
  252.  
  253. void APIENTRY glPushMatrix( void )
  254. {
  255.    GET_CONTEXT;
  256.    CHECK_CONTEXT;
  257.    (*CC->API.PushMatrix)( CC );
  258. }
  259.  
  260.  
  261. void APIENTRY glRasterPos2d( GLdouble x, GLdouble y )
  262. {
  263.    GET_CONTEXT;
  264.    CHECK_CONTEXT;
  265.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  266. }
  267.  
  268.  
  269. void APIENTRY glRasterPos2f( GLfloat x, GLfloat y )
  270. {
  271.    GET_CONTEXT;
  272.    CHECK_CONTEXT;
  273.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  274. }
  275.  
  276.  
  277. void APIENTRY glRasterPos2i( GLint x, GLint y )
  278. {
  279.    GET_CONTEXT;
  280.    CHECK_CONTEXT;
  281.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  282. }
  283.  
  284.  
  285. void APIENTRY glRasterPos2s( GLshort x, GLshort y )
  286. {
  287.    GET_CONTEXT;
  288.    CHECK_CONTEXT;
  289.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  290. }
  291.  
  292.  
  293. void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z )
  294. {
  295.    GET_CONTEXT;
  296.    CHECK_CONTEXT;
  297.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  298. }
  299.  
  300.  
  301. void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z )
  302. {
  303.    GET_CONTEXT;
  304.    CHECK_CONTEXT;
  305.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  306. }
  307.  
  308.  
  309. void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z )
  310. {
  311.    GET_CONTEXT;
  312.    CHECK_CONTEXT;
  313.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  314. }
  315.  
  316.  
  317. void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z )
  318. {
  319.    GET_CONTEXT;
  320.    CHECK_CONTEXT;
  321.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  322. }
  323.  
  324.  
  325. void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  326. {
  327.    GET_CONTEXT;
  328.    CHECK_CONTEXT;
  329.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  330.                                (GLfloat) z, (GLfloat) w );
  331. }
  332.  
  333.  
  334. void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  335. {
  336.    GET_CONTEXT;
  337.    CHECK_CONTEXT;
  338.    (*CC->API.RasterPos4f)( CC, x, y, z, w );
  339. }
  340.  
  341.  
  342. void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w )
  343. {
  344.    GET_CONTEXT;
  345.    CHECK_CONTEXT;
  346.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  347.                (GLfloat) z, (GLfloat) w );
  348. }
  349.  
  350.  
  351. void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w )
  352. {
  353.    GET_CONTEXT;
  354.    CHECK_CONTEXT;
  355.    (*CC->API.RasterPos4f)( CC, (GLfloat) x, (GLfloat) y,
  356.                (GLfloat) z, (GLfloat) w );
  357. }
  358.  
  359.  
  360. void APIENTRY glRasterPos2dv( const GLdouble *v )
  361. {
  362.    GET_CONTEXT;
  363.    CHECK_CONTEXT;
  364.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  365. }
  366.  
  367.  
  368. void APIENTRY glRasterPos2fv( const GLfloat *v )
  369. {
  370.    GET_CONTEXT;
  371.    CHECK_CONTEXT;
  372.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  373. }
  374.  
  375.  
  376. void APIENTRY glRasterPos2iv( const GLint *v )
  377. {
  378.    GET_CONTEXT;
  379.    CHECK_CONTEXT;
  380.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  381. }
  382.  
  383.  
  384. void APIENTRY glRasterPos2sv( const GLshort *v )
  385. {
  386.    GET_CONTEXT;
  387.    CHECK_CONTEXT;
  388.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F );
  389. }
  390.  
  391.  
  392. /*** 3 element vector ***/
  393.  
  394. void APIENTRY glRasterPos3dv( const GLdouble *v )
  395. {
  396.    GET_CONTEXT;
  397.    CHECK_CONTEXT;
  398.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  399.                (GLfloat) v[2], 1.0F );
  400. }
  401.  
  402.  
  403. void APIENTRY glRasterPos3fv( const GLfloat *v )
  404. {
  405.    GET_CONTEXT;
  406.    CHECK_CONTEXT;
  407.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  408.                    (GLfloat) v[2], 1.0F );
  409. }
  410.  
  411.  
  412. void APIENTRY glRasterPos3iv( const GLint *v )
  413. {
  414.    GET_CONTEXT;
  415.    CHECK_CONTEXT;
  416.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  417.                (GLfloat) v[2], 1.0F );
  418. }
  419.  
  420.  
  421. void APIENTRY glRasterPos3sv( const GLshort *v )
  422. {
  423.    GET_CONTEXT;
  424.    CHECK_CONTEXT;
  425.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  426.                (GLfloat) v[2], 1.0F );
  427. }
  428.  
  429.  
  430. void APIENTRY glRasterPos4dv( const GLdouble *v )
  431. {
  432.    GET_CONTEXT;
  433.    CHECK_CONTEXT;
  434.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  435.                (GLfloat) v[2], (GLfloat) v[3] );
  436. }
  437.  
  438.  
  439. void APIENTRY glRasterPos4fv( const GLfloat *v )
  440. {
  441.    GET_CONTEXT;
  442.    CHECK_CONTEXT;
  443.    (*CC->API.RasterPos4f)( CC, v[0], v[1], v[2], v[3] );
  444. }
  445.  
  446.  
  447. void APIENTRY glRasterPos4iv( const GLint *v )
  448. {
  449.    GET_CONTEXT;
  450.    CHECK_CONTEXT;
  451.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  452.                (GLfloat) v[2], (GLfloat) v[3] );
  453. }
  454.  
  455.  
  456. void APIENTRY glRasterPos4sv( const GLshort *v )
  457. {
  458.    GET_CONTEXT;
  459.    CHECK_CONTEXT;
  460.    (*CC->API.RasterPos4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  461.                (GLfloat) v[2], (GLfloat) v[3] );
  462. }
  463.  
  464.  
  465. void APIENTRY glReadBuffer( GLenum mode )
  466. {
  467.    GET_CONTEXT;
  468.    CHECK_CONTEXT;
  469.    (*CC->API.ReadBuffer)( CC, mode );
  470. }
  471.  
  472.  
  473. void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
  474.            GLenum format, GLenum type, GLvoid *pixels )
  475. {
  476.    GET_CONTEXT;
  477.    CHECK_CONTEXT;
  478.    (*CC->API.ReadPixels)( CC, x, y, width, height, format, type, pixels );
  479. }
  480.  
  481.  
  482. void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 )
  483. {
  484.    GET_CONTEXT;
  485.    CHECK_CONTEXT;
  486.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  487.              (GLfloat) x2, (GLfloat) y2 );
  488. }
  489.  
  490.  
  491. void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
  492. {
  493.    GET_CONTEXT;
  494.    CHECK_CONTEXT;
  495.    (*CC->API.Rectf)( CC, x1, y1, x2, y2 );
  496. }
  497.  
  498.  
  499. void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 )
  500. {
  501.    GET_CONTEXT;
  502.    CHECK_CONTEXT;
  503.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  504.              (GLfloat) x2, (GLfloat) y2 );
  505. }
  506.  
  507.  
  508. void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 )
  509. {
  510.    GET_CONTEXT;
  511.    CHECK_CONTEXT;
  512.    (*CC->API.Rectf)( CC, (GLfloat) x1, (GLfloat) y1,
  513.              (GLfloat) x2, (GLfloat) y2 );
  514. }
  515.  
  516.  
  517. void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 )
  518. {
  519.    GET_CONTEXT;
  520.    CHECK_CONTEXT;
  521.    (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
  522.             (GLfloat) v2[0], (GLfloat) v2[1]);
  523. }
  524.  
  525.  
  526. void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 )
  527. {
  528.    GET_CONTEXT;
  529.    CHECK_CONTEXT;
  530.    (*CC->API.Rectf)(CC, v1[0], v1[1], v2[0], v2[1]);
  531. }
  532.  
  533.  
  534. void APIENTRY glRectiv( const GLint *v1, const GLint *v2 )
  535. {
  536.    GET_CONTEXT;
  537.    CHECK_CONTEXT;
  538.    (*CC->API.Rectf)( CC, (GLfloat) v1[0], (GLfloat) v1[1],
  539.              (GLfloat) v2[0], (GLfloat) v2[1] );
  540. }
  541.  
  542.  
  543. void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 )
  544. {
  545.    GET_CONTEXT;
  546.    CHECK_CONTEXT;
  547.    (*CC->API.Rectf)(CC, (GLfloat) v1[0], (GLfloat) v1[1],
  548.     (GLfloat) v2[0], (GLfloat) v2[1]);
  549. }
  550.  
  551.  
  552. void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height)
  553. {
  554.    GET_CONTEXT;
  555.    CHECK_CONTEXT;
  556.    (*CC->API.Scissor)(CC, x, y, width, height);
  557. }
  558.  
  559.  
  560. GLboolean APIENTRY glIsEnabled( GLenum cap )
  561. {
  562.    GET_CONTEXT;
  563.    CHECK_CONTEXT_RETURN(GL_FALSE);
  564.    return (*CC->API.IsEnabled)( CC, cap );
  565. }
  566.  
  567.  
  568.  
  569. void APIENTRY glPushAttrib( GLbitfield mask )
  570. {
  571.    GET_CONTEXT;
  572.    CHECK_CONTEXT;
  573.    (*CC->API.PushAttrib)(CC, mask);
  574. }
  575.  
  576.  
  577. void APIENTRY glPushClientAttrib( GLbitfield mask )
  578. {
  579.    GET_CONTEXT;
  580.    CHECK_CONTEXT;
  581.    (*CC->API.PushClientAttrib)(CC, mask);
  582. }
  583.  
  584.  
  585. void APIENTRY glPushName( GLuint name )
  586. {
  587.    GET_CONTEXT;
  588.    CHECK_CONTEXT;
  589.    (*CC->API.PushName)(CC, name);
  590. }
  591.  
  592.  
  593. GLint APIENTRY glRenderMode( GLenum mode )
  594. {
  595.    GET_CONTEXT;
  596.    CHECK_CONTEXT_RETURN(0);
  597.    return (*CC->API.RenderMode)(CC, mode);
  598. }
  599.  
  600.  
  601. void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
  602. {
  603.    GET_CONTEXT;
  604.    CHECK_CONTEXT;
  605.    (*CC->API.Rotatef)( CC, (GLfloat) angle,
  606.                (GLfloat) x, (GLfloat) y, (GLfloat) z );
  607. }
  608.  
  609.  
  610. void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
  611. {
  612.    GET_CONTEXT;
  613.    CHECK_CONTEXT;
  614.    (*CC->API.Rotatef)( CC, angle, x, y, z );
  615. }
  616.  
  617.  
  618. void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer )
  619. {
  620.    GET_CONTEXT;
  621.    CHECK_CONTEXT;
  622.    (*CC->API.SelectBuffer)(CC, size, buffer);
  623. }
  624.  
  625.  
  626. void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z )
  627. {
  628.    GET_CONTEXT;
  629.    CHECK_CONTEXT;
  630.    (*CC->API.Scalef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  631. }
  632.  
  633.  
  634. void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z )
  635. {
  636.    GET_CONTEXT;
  637.    CHECK_CONTEXT;
  638.    (*CC->API.Scalef)( CC, x, y, z );
  639. }
  640.  
  641.  
  642. void APIENTRY glShadeModel( GLenum mode )
  643. {
  644.    GET_CONTEXT;
  645.    CHECK_CONTEXT;
  646.    (*CC->API.ShadeModel)(CC, mode);
  647. }
  648.  
  649.  
  650. void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask )
  651. {
  652.    GET_CONTEXT;
  653.    CHECK_CONTEXT;
  654.    (*CC->API.StencilFunc)(CC, func, ref, mask);
  655. }
  656.  
  657.  
  658. void APIENTRY glStencilMask( GLuint mask )
  659. {
  660.    GET_CONTEXT;
  661.    CHECK_CONTEXT;
  662.    (*CC->API.StencilMask)(CC, mask);
  663. }
  664.  
  665.  
  666. void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass )
  667. {
  668.    GET_CONTEXT;
  669.    CHECK_CONTEXT;
  670.    (*CC->API.StencilOp)(CC, fail, zfail, zpass);
  671. }
  672.  
  673.  
  674. void APIENTRY glTexCoord1d( GLdouble s )
  675. {
  676.    GET_CONTEXT;
  677.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  678. }
  679.  
  680.  
  681. void APIENTRY glTexCoord1f( GLfloat s )
  682. {
  683.    GET_CONTEXT;
  684.    (*CC->API.TexCoord4f)( CC, s, 0.0, 0.0, 1.0 );
  685. }
  686.  
  687.  
  688. void APIENTRY glTexCoord1i( GLint s )
  689. {
  690.    GET_CONTEXT;
  691.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  692. }
  693.  
  694.  
  695. void APIENTRY glTexCoord1s( GLshort s )
  696. {
  697.    GET_CONTEXT;
  698.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, 0.0, 0.0, 1.0 );
  699. }
  700.  
  701.  
  702. void APIENTRY glTexCoord2d( GLdouble s, GLdouble t )
  703. {
  704.    GET_CONTEXT;
  705.    (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
  706. }
  707.  
  708.  
  709. void APIENTRY glTexCoord2f( GLfloat s, GLfloat t )
  710. {
  711.    GET_CONTEXT;
  712.    (*CC->API.TexCoord2f)( CC, s, t );
  713. }
  714.  
  715.  
  716. void APIENTRY glTexCoord2i( GLint s, GLint t )
  717. {
  718.    GET_CONTEXT;
  719.    (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
  720. }
  721.  
  722.  
  723. void APIENTRY glTexCoord2s( GLshort s, GLshort t )
  724. {
  725.    GET_CONTEXT;
  726.    (*CC->API.TexCoord2f)( CC, (GLfloat) s, (GLfloat) t );
  727. }
  728.  
  729.  
  730. void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r )
  731. {
  732.    GET_CONTEXT;
  733.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t, (GLfloat) r, 1.0 );
  734. }
  735.  
  736.  
  737. void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r )
  738. {
  739.    GET_CONTEXT;
  740.    (*CC->API.TexCoord4f)( CC, s, t, r, 1.0 );
  741. }
  742.  
  743.  
  744. void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r )
  745. {
  746.    GET_CONTEXT;
  747.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  748.                    (GLfloat) r, 1.0 );
  749. }
  750.  
  751.  
  752. void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r )
  753. {
  754.    GET_CONTEXT;
  755.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  756.                    (GLfloat) r, 1.0 );
  757. }
  758.  
  759.  
  760. void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
  761. {
  762.    GET_CONTEXT;
  763.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  764.                    (GLfloat) r, (GLfloat) q );
  765. }
  766.  
  767.  
  768. void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
  769. {
  770.    GET_CONTEXT;
  771.    (*CC->API.TexCoord4f)( CC, s, t, r, q );
  772. }
  773.  
  774.  
  775. void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q )
  776. {
  777.    GET_CONTEXT;
  778.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  779.                    (GLfloat) r, (GLfloat) q );
  780. }
  781.  
  782.  
  783. void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
  784. {
  785.    GET_CONTEXT;
  786.    (*CC->API.TexCoord4f)( CC, (GLfloat) s, (GLfloat) t,
  787.                    (GLfloat) r, (GLfloat) q );
  788. }
  789.  
  790.  
  791. void APIENTRY glTexCoord1dv( const GLdouble *v )
  792. {
  793.    GET_CONTEXT;
  794.    (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
  795. }
  796.  
  797.  
  798. void APIENTRY glTexCoord1fv( const GLfloat *v )
  799. {
  800.    GET_CONTEXT;
  801.    (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
  802. }
  803.  
  804.  
  805. void APIENTRY glTexCoord1iv( const GLint *v )
  806. {
  807.    GET_CONTEXT;
  808.    (*CC->API.TexCoord4f)( CC, *v, 0.0, 0.0, 1.0 );
  809. }
  810.  
  811.  
  812. void APIENTRY glTexCoord1sv( const GLshort *v )
  813. {
  814.    GET_CONTEXT;
  815.    (*CC->API.TexCoord4f)( CC, (GLfloat) *v, 0.0, 0.0, 1.0 );
  816. }
  817.  
  818.  
  819. void APIENTRY glTexCoord2dv( const GLdouble *v )
  820. {
  821.    GET_CONTEXT;
  822.    (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  823. }
  824.  
  825.  
  826. void APIENTRY glTexCoord2fv( const GLfloat *v )
  827. {
  828.    GET_CONTEXT;
  829.    (*CC->API.TexCoord2f)( CC, v[0], v[1] );
  830. }
  831.  
  832.  
  833. void APIENTRY glTexCoord2iv( const GLint *v )
  834. {
  835.    GET_CONTEXT;
  836.    (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  837. }
  838.  
  839.  
  840. void APIENTRY glTexCoord2sv( const GLshort *v )
  841. {
  842.    GET_CONTEXT;
  843.    (*CC->API.TexCoord2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  844. }
  845.  
  846.  
  847. void APIENTRY glTexCoord3dv( const GLdouble *v )
  848. {
  849.    GET_CONTEXT;
  850.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  851.                    (GLfloat) v[2], 1.0 );
  852. }
  853.  
  854.  
  855. void APIENTRY glTexCoord3fv( const GLfloat *v )
  856. {
  857.    GET_CONTEXT;
  858.    (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], 1.0 );
  859. }
  860.  
  861.  
  862. void APIENTRY glTexCoord3iv( const GLint *v )
  863. {
  864.    GET_CONTEXT;
  865.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  866.               (GLfloat) v[2], 1.0 );
  867. }
  868.  
  869.  
  870. void APIENTRY glTexCoord3sv( const GLshort *v )
  871. {
  872.    GET_CONTEXT;
  873.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  874.                    (GLfloat) v[2], 1.0 );
  875. }
  876.  
  877.  
  878. void APIENTRY glTexCoord4dv( const GLdouble *v )
  879. {
  880.    GET_CONTEXT;
  881.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  882.                    (GLfloat) v[2], (GLfloat) v[3] );
  883. }
  884.  
  885.  
  886. void APIENTRY glTexCoord4fv( const GLfloat *v )
  887. {
  888.    GET_CONTEXT;
  889.    (*CC->API.TexCoord4f)( CC, v[0], v[1], v[2], v[3] );
  890. }
  891.  
  892.  
  893. void APIENTRY glTexCoord4iv( const GLint *v )
  894. {
  895.    GET_CONTEXT;
  896.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  897.                    (GLfloat) v[2], (GLfloat) v[3] );
  898. }
  899.  
  900.  
  901. void APIENTRY glTexCoord4sv( const GLshort *v )
  902. {
  903.    GET_CONTEXT;
  904.    (*CC->API.TexCoord4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  905.                    (GLfloat) v[2], (GLfloat) v[3] );
  906. }
  907.  
  908.  
  909. void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride,
  910.             const GLvoid *ptr )
  911. {
  912.    GET_CONTEXT;
  913.    CHECK_CONTEXT;
  914.    (*CC->API.TexCoordPointer)(CC, size, type, stride, ptr);
  915. }
  916.  
  917.  
  918. void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param )
  919. {
  920.    GLfloat p = (GLfloat) param;
  921.    GET_CONTEXT;
  922.    CHECK_CONTEXT;
  923.    (*CC->API.TexGenfv)( CC, coord, pname, &p );
  924. }
  925.  
  926.  
  927. void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param )
  928. {
  929.    GET_CONTEXT;
  930.    CHECK_CONTEXT;
  931.    (*CC->API.TexGenfv)( CC, coord, pname, ¶m );
  932. }
  933.  
  934.  
  935. void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param )
  936. {
  937.    GLfloat p = (GLfloat) param;
  938.    GET_CONTEXT;
  939.    CHECK_CONTEXT;
  940.    (*CC->API.TexGenfv)( CC, coord, pname, &p );
  941. }
  942.  
  943.  
  944. void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params )
  945. {
  946.    GLfloat p[4];
  947.    GET_CONTEXT;
  948.    CHECK_CONTEXT;
  949.    p[0] = params[0];
  950.    p[1] = params[1];
  951.    p[2] = params[2];
  952.    p[3] = params[3];
  953.    (*CC->API.TexGenfv)( CC, coord, pname, p );
  954. }
  955.  
  956.  
  957. void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params )
  958. {
  959.    GLfloat p[4];
  960.    GET_CONTEXT;
  961.    CHECK_CONTEXT;
  962.    p[0] = params[0];
  963.    p[1] = params[1];
  964.    p[2] = params[2];
  965.    p[3] = params[3];
  966.    (*CC->API.TexGenfv)( CC, coord, pname, p );
  967. }
  968.  
  969.  
  970. void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
  971. {
  972.    GET_CONTEXT;
  973.    CHECK_CONTEXT;
  974.    (*CC->API.TexGenfv)( CC, coord, pname, params );
  975. }
  976.  
  977.  
  978.  
  979.  
  980. void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param )
  981. {
  982.    GET_CONTEXT;
  983.    CHECK_CONTEXT;
  984.    (*CC->API.TexEnvfv)( CC, target, pname, ¶m );
  985. }
  986.  
  987.  
  988.  
  989. void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param )
  990. {
  991. #ifndef __STORM__
  992.    GLfloat p[4];
  993.    p[0] = (GLfloat) param;
  994.    p[1] = p[2] = p[3] = 0.0;
  995.    GET_CONTEXT;
  996.    CHECK_CONTEXT;
  997.    (*CC->API.TexEnvfv)( CC, target, pname, p );
  998. #else
  999.    GLfloat p[4];
  1000.    GET_CONTEXT;
  1001.    CHECK_CONTEXT;
  1002.    p[0] = (GLfloat) param;
  1003.    p[1] = p[2] = p[3] = 0.0;
  1004.    (*CC->API.TexEnvfv)( CC, target, pname, p );
  1005. #endif
  1006. }
  1007.  
  1008.  
  1009.  
  1010. void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
  1011. {
  1012.    GET_CONTEXT;
  1013.    CHECK_CONTEXT;
  1014.    (*CC->API.TexEnvfv)( CC, target, pname, param );
  1015. }
  1016.  
  1017.  
  1018.  
  1019. void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *param )
  1020. {
  1021. #ifndef __STORM__
  1022.    GLfloat p[4];
  1023.    p[0] = INT_TO_FLOAT( param[0] );
  1024.    p[1] = INT_TO_FLOAT( param[1] );
  1025.    p[2] = INT_TO_FLOAT( param[2] );
  1026.    p[3] = INT_TO_FLOAT( param[3] );
  1027.    GET_CONTEXT;
  1028.    CHECK_CONTEXT;
  1029.    (*CC->API.TexEnvfv)( CC, target, pname, p );
  1030. #else
  1031.    GLfloat p[4];
  1032.    GET_CONTEXT;
  1033.    CHECK_CONTEXT;
  1034.    p[0] = INT_TO_FLOAT( param[0] );
  1035.    p[1] = INT_TO_FLOAT( param[1] );
  1036.    p[2] = INT_TO_FLOAT( param[2] );
  1037.    p[3] = INT_TO_FLOAT( param[3] );
  1038.    (*CC->API.TexEnvfv)( CC, target, pname, p );
  1039. #endif
  1040. }
  1041.  
  1042.  
  1043. void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalformat,
  1044.                 GLsizei width, GLint border,
  1045.                 GLenum format, GLenum type, const GLvoid *pixels )
  1046. {
  1047.    struct gl_image *teximage;
  1048.    GET_CONTEXT;
  1049.    CHECK_CONTEXT;
  1050.    teximage = gl_unpack_image( CC, width, 1, format, type, pixels );
  1051.    (*CC->API.TexImage1D)( CC, target, level, internalformat,
  1052.               width, border, format, type, teximage );
  1053. }
  1054.  
  1055.  
  1056.  
  1057. void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalformat,
  1058.                 GLsizei width, GLsizei height, GLint border,
  1059.                 GLenum format, GLenum type, const GLvoid *pixels )
  1060. {
  1061.   struct gl_image *teximage;
  1062. #if defined(FX) && defined(__WIN32__)
  1063.   GLvoid *newpixels=NULL;
  1064.   GLsizei newwidth,newheight;
  1065.   GLint x,y;
  1066.   static GLint leveldif=0;
  1067.   static GLuint lasttexobj=0xffffff;
  1068. #endif
  1069.   GET_CONTEXT;
  1070.   CHECK_CONTEXT;
  1071.  
  1072. #if defined(FX) && defined(__WIN32__)
  1073.   newpixels=NULL;
  1074.   
  1075.   /* AN HACK for WinGLQuake*/
  1076.   
  1077.   if(CC->Texture.Current2D->Name!=lasttexobj) {
  1078.     lasttexobj=CC->Texture.Current2D->Name;
  1079.     leveldif=0;
  1080.   }
  1081.   
  1082.   if((format==GL_COLOR_INDEX) && (internalformat==1))
  1083.     internalformat=GL_COLOR_INDEX8_EXT;
  1084.   
  1085.   if(width>256 || height >256) {
  1086.     while(width>256 || height >256) {
  1087.       newwidth=width/2;
  1088.       newheight=height/2;
  1089.       leveldif++;
  1090.       
  1091.       fprintf(stderr,"Scaling: %dx%d -> %dx%d\n",width,height,newwidth,newheight);
  1092.       
  1093.       newpixels=malloc((newwidth+4)*newheight*4);
  1094.       
  1095.       for(y=0;y<newheight;y++)
  1096.     for(x=0;x<newwidth;x++)
  1097.       ((GLubyte *)newpixels)[x+y*newwidth]=((GLubyte *)pixels)[x*2+y*width*2];
  1098.       
  1099.       if(newpixels)
  1100.     free(pixels);
  1101.       
  1102.       pixels=newpixels;
  1103.       width=newwidth;
  1104.       height=newheight;
  1105.     }
  1106.     
  1107.     level=0;
  1108.   } else
  1109.     level-=leveldif;
  1110. #endif
  1111.   teximage = gl_unpack_image( CC, width, height, format, type, pixels );
  1112.   (*CC->API.TexImage2D)( CC, target, level, internalformat,
  1113.              width, height, border, format, type, teximage );
  1114. #if defined(FX) && defined(__WIN32__)
  1115.   if(newpixels)
  1116.     free(newpixels);
  1117. #endif
  1118. }
  1119.  
  1120.  
  1121. void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param )
  1122. {
  1123.    GET_CONTEXT;
  1124.    CHECK_CONTEXT;
  1125.    (*CC->API.TexParameterfv)( CC, target, pname, ¶m );
  1126. }
  1127.  
  1128.  
  1129. void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param )
  1130. {
  1131. #ifndef __STORM__
  1132.    GLfloat fparam[4];
  1133.    fparam[0] = (GLfloat) param;
  1134.    fparam[1] = fparam[2] = fparam[3] = 0.0;
  1135.    GET_CONTEXT;
  1136.    CHECK_CONTEXT;
  1137.    (*CC->API.TexParameterfv)( CC, target, pname, fparam );
  1138. #else
  1139.    GLfloat fparam[4];
  1140.    GET_CONTEXT;
  1141.    CHECK_CONTEXT;
  1142.    fparam[0] = (GLfloat) param;
  1143.    fparam[1] = fparam[2] = fparam[3] = 0.0;
  1144.    (*CC->API.TexParameterfv)( CC, target, pname, fparam );
  1145. #endif
  1146. }
  1147.  
  1148.  
  1149. void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
  1150. {
  1151.    GET_CONTEXT;
  1152.    CHECK_CONTEXT;
  1153.    (*CC->API.TexParameterfv)( CC, target, pname, params );
  1154. }
  1155.  
  1156.  
  1157. void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params )
  1158. {
  1159.    GLfloat p[4];
  1160.    GET_CONTEXT;
  1161.    CHECK_CONTEXT;
  1162.    if (pname==GL_TEXTURE_BORDER_COLOR) {
  1163.       p[0] = INT_TO_FLOAT( params[0] );
  1164.       p[1] = INT_TO_FLOAT( params[1] );
  1165.       p[2] = INT_TO_FLOAT( params[2] );
  1166.       p[3] = INT_TO_FLOAT( params[3] );
  1167.    }
  1168.    else {
  1169.       p[0] = (GLfloat) params[0];
  1170.       p[1] = (GLfloat) params[1];
  1171.       p[2] = (GLfloat) params[2];
  1172.       p[3] = (GLfloat) params[3];
  1173.    }
  1174.    (*CC->API.TexParameterfv)( CC, target, pname, p );
  1175. }
  1176.  
  1177.  
  1178. void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset,
  1179.                    GLsizei width, GLenum format,
  1180.                    GLenum type, const GLvoid *pixels )
  1181. {
  1182.    struct gl_image *image;
  1183.    GET_CONTEXT;
  1184.    CHECK_CONTEXT;
  1185.    image = gl_unpack_texsubimage( CC, width, 1, 1, format, type, pixels );
  1186.    (*CC->API.TexSubImage1D)( CC, target, level, xoffset, width,
  1187.                  format, type, image );
  1188. }
  1189.  
  1190.  
  1191. void APIENTRY glTexSubImage2D( GLenum target, GLint level,
  1192.                    GLint xoffset, GLint yoffset,
  1193.                    GLsizei width, GLsizei height,
  1194.                    GLenum format, GLenum type,
  1195.                    const GLvoid *pixels )
  1196. {
  1197.    struct gl_image *image;
  1198.    GET_CONTEXT;
  1199.    CHECK_CONTEXT;
  1200.    image = gl_unpack_texsubimage( CC, width, height, 1, format, type, pixels );
  1201.    (*CC->API.TexSubImage2D)( CC, target, level, xoffset, yoffset,
  1202.                  width, height, format, type, image );
  1203. }
  1204.  
  1205.  
  1206. void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z )
  1207. {
  1208.    GET_CONTEXT;
  1209.    CHECK_CONTEXT;
  1210.    (*CC->API.Translatef)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  1211. }
  1212.  
  1213.  
  1214. void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z )
  1215. {
  1216.    GET_CONTEXT;
  1217.    CHECK_CONTEXT;
  1218.    (*CC->API.Translatef)( CC, x, y, z );
  1219. }
  1220.  
  1221.  
  1222. void APIENTRY glVertex2d( GLdouble x, GLdouble y )
  1223. {
  1224.    GET_CONTEXT;
  1225.    (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
  1226. }
  1227.  
  1228.  
  1229. void APIENTRY glVertex2f( GLfloat x, GLfloat y )
  1230. {
  1231.    GET_CONTEXT;
  1232.    (*CC->API.Vertex2f)( CC, x, y );
  1233. }
  1234.  
  1235.  
  1236. void APIENTRY glVertex2i( GLint x, GLint y )
  1237. {
  1238.    GET_CONTEXT;
  1239.    (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
  1240. }
  1241.  
  1242.  
  1243. void APIENTRY glVertex2s( GLshort x, GLshort y )
  1244. {
  1245.    GET_CONTEXT;
  1246.    (*CC->API.Vertex2f)( CC, (GLfloat) x, (GLfloat) y );
  1247. }
  1248.  
  1249.  
  1250. void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z )
  1251. {
  1252.    GET_CONTEXT;
  1253.    (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  1254. }
  1255.  
  1256.  
  1257. void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z )
  1258. {
  1259.    GET_CONTEXT;
  1260.    (*CC->API.Vertex3f)( CC, x, y, z );
  1261. }
  1262.  
  1263.  
  1264. void APIENTRY glVertex3i( GLint x, GLint y, GLint z )
  1265. {
  1266.    GET_CONTEXT;
  1267.    (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  1268. }
  1269.  
  1270.  
  1271. void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z )
  1272. {
  1273.    GET_CONTEXT;
  1274.    (*CC->API.Vertex3f)( CC, (GLfloat) x, (GLfloat) y, (GLfloat) z );
  1275. }
  1276.  
  1277.  
  1278. void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  1279. {
  1280.    GET_CONTEXT;
  1281.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1282.                 (GLfloat) z, (GLfloat) w );
  1283. }
  1284.  
  1285.  
  1286. void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  1287. {
  1288.    GET_CONTEXT;
  1289.    (*CC->API.Vertex4f)( CC, x, y, z, w );
  1290. }
  1291.  
  1292.  
  1293. void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w )
  1294. {
  1295.    GET_CONTEXT;
  1296.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1297.                 (GLfloat) z, (GLfloat) w );
  1298. }
  1299.  
  1300.  
  1301. void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
  1302. {
  1303.    GET_CONTEXT;
  1304.    (*CC->API.Vertex4f)( CC, (GLfloat) x, (GLfloat) y,
  1305.                 (GLfloat) z, (GLfloat) w );
  1306. }
  1307.  
  1308.  
  1309. void APIENTRY glVertex2dv( const GLdouble *v )
  1310. {
  1311.    GET_CONTEXT;
  1312.    (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  1313. }
  1314.  
  1315.  
  1316. void APIENTRY glVertex2fv( const GLfloat *v )
  1317. {
  1318.    GET_CONTEXT;
  1319.    (*CC->API.Vertex2f)( CC, v[0], v[1] );
  1320. }
  1321.  
  1322.  
  1323. void APIENTRY glVertex2iv( const GLint *v )
  1324. {
  1325.    GET_CONTEXT;
  1326.    (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  1327. }
  1328.  
  1329.  
  1330. void APIENTRY glVertex2sv( const GLshort *v )
  1331. {
  1332.    GET_CONTEXT;
  1333.    (*CC->API.Vertex2f)( CC, (GLfloat) v[0], (GLfloat) v[1] );
  1334. }
  1335.  
  1336.  
  1337. void APIENTRY glVertex3dv( const GLdouble *v )
  1338. {
  1339.    GET_CONTEXT;
  1340.    (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
  1341. }
  1342.  
  1343.  
  1344. void APIENTRY glVertex3fv( const GLfloat *v )
  1345. {
  1346.    GET_CONTEXT;
  1347.    (*CC->API.Vertex3fv)( CC, v );
  1348. }
  1349.  
  1350.  
  1351. void APIENTRY glVertex3iv( const GLint *v )
  1352. {
  1353.    GET_CONTEXT;
  1354.    (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
  1355. }
  1356.  
  1357.  
  1358. void APIENTRY glVertex3sv( const GLshort *v )
  1359. {
  1360.    GET_CONTEXT;
  1361.    (*CC->API.Vertex3f)( CC, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
  1362. }
  1363.  
  1364.  
  1365. void APIENTRY glVertex4dv( const GLdouble *v )
  1366. {
  1367.    GET_CONTEXT;
  1368.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1369.                 (GLfloat) v[2], (GLfloat) v[3] );
  1370. }
  1371.  
  1372.  
  1373. void APIENTRY glVertex4fv( const GLfloat *v )
  1374. {
  1375.    GET_CONTEXT;
  1376.    (*CC->API.Vertex4f)( CC, v[0], v[1], v[2], v[3] );
  1377. }
  1378.  
  1379.  
  1380. void APIENTRY glVertex4iv( const GLint *v )
  1381. {
  1382.    GET_CONTEXT;
  1383.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1384.                 (GLfloat) v[2], (GLfloat) v[3] );
  1385. }
  1386.  
  1387.  
  1388. void APIENTRY glVertex4sv( const GLshort *v )
  1389. {
  1390.    GET_CONTEXT;
  1391.    (*CC->API.Vertex4f)( CC, (GLfloat) v[0], (GLfloat) v[1],
  1392.                 (GLfloat) v[2], (GLfloat) v[3] );
  1393. }
  1394.  
  1395.  
  1396. void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride,
  1397.                    const GLvoid *ptr )
  1398. {
  1399.    GET_CONTEXT;
  1400.    (*CC->API.VertexPointer)(CC, size, type, stride, ptr);
  1401. }
  1402.  
  1403.  
  1404. void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height )
  1405. {
  1406.    GET_CONTEXT;
  1407.    (*CC->API.Viewport)( CC, x, y, width, height );
  1408. }
  1409.  
  1410.  
  1411.  
  1412. /**
  1413.  ** Extensions
  1414.  **
  1415.  ** Some of these are incorporated into the 1.1 API.  They also remain as
  1416.  ** extensions for backward compatibility.  May be removed in the future.
  1417.  **/
  1418.  
  1419.  
  1420. /* GL_EXT_blend_minmax */
  1421.  
  1422. void APIENTRY glBlendEquationEXT( GLenum mode )
  1423. {
  1424.    GET_CONTEXT;
  1425.    CHECK_CONTEXT;
  1426.    (*CC->API.BlendEquation)(CC, mode);
  1427. }
  1428.  
  1429.  
  1430. /* GL_EXT_blend_color */
  1431.  
  1432. void APIENTRY glBlendColorEXT( GLclampf red, GLclampf green,
  1433.                    GLclampf blue, GLclampf alpha )
  1434. {
  1435.    GET_CONTEXT;
  1436.    CHECK_CONTEXT;
  1437.    (*CC->API.BlendColor)(CC, red, green, blue, alpha);
  1438. }
  1439.  
  1440.  
  1441. /* GL_EXT_vertex_array */
  1442.  
  1443. void APIENTRY glVertexPointerEXT( GLint size, GLenum type, GLsizei stride,
  1444.                   GLsizei count, const GLvoid *ptr )
  1445. {
  1446.    GET_CONTEXT;
  1447.    CHECK_CONTEXT;
  1448.    (*CC->API.VertexPointer)(CC, size, type, stride, ptr);
  1449. }
  1450.  
  1451.  
  1452. void APIENTRY glNormalPointerEXT( GLenum type, GLsizei stride, GLsizei count,
  1453.                   const GLvoid *ptr )
  1454. {
  1455.    GET_CONTEXT;
  1456.    CHECK_CONTEXT;
  1457.    (*CC->API.NormalPointer)(CC, type, stride, ptr);
  1458. }
  1459.  
  1460.  
  1461. void APIENTRY glColorPointerEXT( GLint size, GLenum type, GLsizei stride,
  1462.                  GLsizei count, const GLvoid *ptr )
  1463. {
  1464.    GET_CONTEXT;
  1465.    CHECK_CONTEXT;
  1466.    (*CC->API.ColorPointer)(CC, size, type, stride, ptr);
  1467. }
  1468.  
  1469.  
  1470. void APIENTRY glIndexPointerEXT( GLenum type, GLsizei stride,
  1471.                  GLsizei count, const GLvoid *ptr )
  1472. {
  1473.    GET_CONTEXT;
  1474.    CHECK_CONTEXT;
  1475.    (*CC->API.IndexPointer)(CC, type, stride, ptr);
  1476. }
  1477.  
  1478.  
  1479. void APIENTRY glTexCoordPointerEXT( GLint size, GLenum type, GLsizei stride,
  1480.                     GLsizei count, const GLvoid *ptr )
  1481. {
  1482.    GET_CONTEXT;
  1483.    CHECK_CONTEXT;
  1484.    (*CC->API.TexCoordPointer)(CC, size, type, stride, ptr);
  1485. }
  1486.  
  1487.  
  1488. void APIENTRY glEdgeFlagPointerEXT( GLsizei stride, GLsizei count,
  1489.                     const GLboolean *ptr )
  1490. {
  1491.    GET_CONTEXT;
  1492.    CHECK_CONTEXT;
  1493.    (*CC->API.EdgeFlagPointer)(CC, stride, ptr);
  1494. }
  1495.  
  1496.  
  1497. void APIENTRY glGetPointervEXT( GLenum pname, GLvoid **params )
  1498. {
  1499.    GET_CONTEXT;
  1500.    CHECK_CONTEXT;
  1501.    (*CC->API.GetPointerv)(CC, pname, params);
  1502. }
  1503.  
  1504.  
  1505. void APIENTRY glArrayElementEXT( GLint i )
  1506. {
  1507.    GET_CONTEXT;
  1508.    CHECK_CONTEXT;
  1509.    (*CC->API.ArrayElement)(CC, i);
  1510. }
  1511.  
  1512.  
  1513. void APIENTRY glDrawArraysEXT( GLenum mode, GLint first, GLsizei count )
  1514. {
  1515.    GET_CONTEXT;
  1516.    CHECK_CONTEXT;
  1517.    (*CC->API.DrawArrays)(CC, mode, first, count);
  1518. }
  1519.  
  1520.  
  1521. /* GL_EXT_texture_object */
  1522.  
  1523. GLboolean glAreTexturesResidentEXT( GLsizei n, const GLuint *textures,
  1524.                     GLboolean *residences )
  1525. {
  1526.    return glAreTexturesResident( n, textures, residences );
  1527. }
  1528.  
  1529.  
  1530. void APIENTRY glBindTextureEXT( GLenum target, GLuint texture )
  1531. {
  1532.    glBindTexture( target, texture );
  1533. }
  1534.  
  1535.  
  1536. void APIENTRY glDeleteTexturesEXT( GLsizei n, const GLuint *textures)
  1537. {
  1538.    glDeleteTextures( n, textures );
  1539. }
  1540.  
  1541.  
  1542. void APIENTRY glGenTexturesEXT( GLsizei n, GLuint *textures )
  1543. {
  1544.    glGenTextures( n, textures );
  1545. }
  1546.  
  1547.  
  1548. GLboolean glIsTextureEXT( GLuint texture )
  1549. {
  1550.    return glIsTexture( texture );
  1551. }
  1552.  
  1553.  
  1554. void APIENTRY glPrioritizeTexturesEXT( GLsizei n, const GLuint *textures,
  1555.                        const GLclampf *priorities )
  1556. {
  1557.    glPrioritizeTextures( n, textures, priorities );
  1558. }
  1559.  
  1560.  
  1561.  
  1562. /* GL_EXT_texture3D */
  1563.  
  1564. void APIENTRY glCopyTexSubImage3DEXT( GLenum target, GLint level, GLint xoffset,
  1565.                       GLint yoffset, GLint zoffset,
  1566.                       GLint x, GLint y, GLsizei width,
  1567.                       GLsizei height )
  1568. {
  1569.    GET_CONTEXT;
  1570.    CHECK_CONTEXT;
  1571.    (*CC->API.CopyTexSubImage3DEXT)( CC, target, level, xoffset, yoffset,
  1572.                     zoffset, x, y, width, height );
  1573. }
  1574.  
  1575.  
  1576.  
  1577. void APIENTRY glTexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
  1578.                    GLsizei width, GLsizei height, GLsizei depth,
  1579.                    GLint border, GLenum format, GLenum type,
  1580.                    const GLvoid *pixels )
  1581. {
  1582.    struct gl_image *teximage;
  1583.    GET_CONTEXT;
  1584.    CHECK_CONTEXT;
  1585.    teximage = gl_unpack_image3D( CC, width, height, depth, format, type, pixels);
  1586.    (*CC->API.TexImage3DEXT)( CC, target, level, internalformat,
  1587.                  width, height, depth, border, format, type, 
  1588.                  teximage );
  1589. }
  1590.  
  1591.  
  1592. void APIENTRY glTexSubImage3DEXT( GLenum target, GLint level, GLint xoffset,
  1593.                   GLint yoffset, GLint zoffset, GLsizei width,
  1594.                   GLsizei height, GLsizei depth, GLenum format,
  1595.                   GLenum type, const GLvoid *pixels )
  1596. {
  1597.    struct gl_image *image;
  1598.    GET_CONTEXT;
  1599.    CHECK_CONTEXT;
  1600.    image = gl_unpack_texsubimage( CC, width, height, depth, format, type, pixels );
  1601.    (*CC->API.TexSubImage3DEXT)( CC, target, level, xoffset, yoffset, zoffset,
  1602.                 width, height, depth, format, type, image );
  1603. }
  1604.  
  1605.  
  1606.  
  1607. /* GL_EXT_point_parameters */
  1608.  
  1609. void APIENTRY glPointParameterfEXT( GLenum pname, GLfloat param )
  1610. {
  1611.    GLfloat params[3];
  1612.    GET_CONTEXT;
  1613.    CHECK_CONTEXT;
  1614.    params[0] = param;
  1615.    params[1] = 0.0;
  1616.    params[2] = 0.0;
  1617.    (*CC->API.PointParameterfvEXT)(CC, pname, params);
  1618. }
  1619.  
  1620.  
  1621. void APIENTRY glPointParameterfvEXT( GLenum pname, const GLfloat *params )
  1622. {
  1623.    GET_CONTEXT;
  1624.    CHECK_CONTEXT;
  1625.    (*CC->API.PointParameterfvEXT)(CC, pname, params);
  1626. }
  1627.  
  1628.  
  1629.  
  1630. #ifdef GL_MESA_window_pos
  1631. /*
  1632.  * Mesa implementation of glWindowPos*MESA()
  1633.  */
  1634. void APIENTRY glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
  1635. {
  1636.    GET_CONTEXT;
  1637.    CHECK_CONTEXT;
  1638.    (*CC->API.WindowPos4fMESA)( CC, x, y, z, w );
  1639. }
  1640. #else
  1641. /* Implementation in winpos.c is used */
  1642. #endif
  1643.  
  1644.  
  1645. void APIENTRY glWindowPos2iMESA( GLint x, GLint y )
  1646. {
  1647.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1648. }
  1649.  
  1650. void APIENTRY glWindowPos2sMESA( GLshort x, GLshort y )
  1651. {
  1652.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1653. }
  1654.  
  1655. void APIENTRY glWindowPos2fMESA( GLfloat x, GLfloat y )
  1656. {
  1657.    glWindowPos4fMESA( x, y, 0.0F, 1.0F );
  1658. }
  1659.  
  1660. void APIENTRY glWindowPos2dMESA( GLdouble x, GLdouble y )
  1661. {
  1662.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, 0.0F, 1.0F );
  1663. }
  1664.  
  1665. void APIENTRY glWindowPos2ivMESA( const GLint *p )
  1666. {
  1667.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1668. }
  1669.  
  1670. void APIENTRY glWindowPos2svMESA( const GLshort *p )
  1671. {
  1672.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1673. }
  1674.  
  1675. void APIENTRY glWindowPos2fvMESA( const GLfloat *p )
  1676. {
  1677.    glWindowPos4fMESA( p[0], p[1], 0.0F, 1.0F );
  1678. }
  1679.  
  1680. void APIENTRY glWindowPos2dvMESA( const GLdouble *p )
  1681. {
  1682.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], 0.0F, 1.0F );
  1683. }
  1684.  
  1685. void APIENTRY glWindowPos3iMESA( GLint x, GLint y, GLint z )
  1686. {
  1687.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1688. }
  1689.  
  1690. void APIENTRY glWindowPos3sMESA( GLshort x, GLshort y, GLshort z )
  1691. {
  1692.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1693. }
  1694.  
  1695. void APIENTRY glWindowPos3fMESA( GLfloat x, GLfloat y, GLfloat z )
  1696. {
  1697.    glWindowPos4fMESA( x, y, z, 1.0F );
  1698. }
  1699.  
  1700. void APIENTRY glWindowPos3dMESA( GLdouble x, GLdouble y, GLdouble z )
  1701. {
  1702.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F );
  1703. }
  1704.  
  1705. void APIENTRY glWindowPos3ivMESA( const GLint *p )
  1706. {
  1707.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1708. }
  1709.  
  1710. void APIENTRY glWindowPos3svMESA( const GLshort *p )
  1711. {
  1712.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1713. }
  1714.  
  1715. void APIENTRY glWindowPos3fvMESA( const GLfloat *p )
  1716. {
  1717.    glWindowPos4fMESA( p[0], p[1], p[2], 1.0F );
  1718. }
  1719.  
  1720. void APIENTRY glWindowPos3dvMESA( const GLdouble *p )
  1721. {
  1722.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1], (GLfloat) p[2], 1.0F );
  1723. }
  1724.  
  1725. void APIENTRY glWindowPos4iMESA( GLint x, GLint y, GLint z, GLint w )
  1726. {
  1727.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1728. }
  1729.  
  1730. void APIENTRY glWindowPos4sMESA( GLshort x, GLshort y, GLshort z, GLshort w )
  1731. {
  1732.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1733. }
  1734.  
  1735. void APIENTRY glWindowPos4dMESA( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
  1736. {
  1737.    glWindowPos4fMESA( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
  1738. }
  1739.  
  1740.  
  1741. void APIENTRY glWindowPos4ivMESA( const GLint *p )
  1742. {
  1743.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1744.               (GLfloat) p[2], (GLfloat) p[3] );
  1745. }
  1746.  
  1747. void APIENTRY glWindowPos4svMESA( const GLshort *p )
  1748. {
  1749.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1750.               (GLfloat) p[2], (GLfloat) p[3] );
  1751. }
  1752.  
  1753. void APIENTRY glWindowPos4fvMESA( const GLfloat *p )
  1754. {
  1755.    glWindowPos4fMESA( p[0], p[1], p[2], p[3] );
  1756. }
  1757.  
  1758. void APIENTRY glWindowPos4dvMESA( const GLdouble *p )
  1759. {
  1760.    glWindowPos4fMESA( (GLfloat) p[0], (GLfloat) p[1],
  1761.               (GLfloat) p[2], (GLfloat) p[3] );
  1762. }
  1763.  
  1764.  
  1765.  
  1766. /* GL_MESA_resize_buffers */
  1767.  
  1768. /*
  1769.  * Called by user application when window has been resized.
  1770.  */
  1771. void APIENTRY glResizeBuffersMESA( void )
  1772. {
  1773.    GET_CONTEXT;
  1774.    CHECK_CONTEXT;
  1775.    (*CC->API.ResizeBuffersMESA)( CC );
  1776. }
  1777.  
  1778.