Source code of Windows XP (NT5)
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.

593 lines
23 KiB

  1. #ifndef __glprocs_h_
  2. #define __glprocs_h_
  3. /*
  4. ** Copyright 1991-1993, Silicon Graphics, Inc.
  5. ** All Rights Reserved.
  6. **
  7. ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  8. ** the contents of this file may not be disclosed to third parties, copied or
  9. ** duplicated in any form, in whole or in part, without the prior written
  10. ** permission of Silicon Graphics, Inc.
  11. **
  12. ** RESTRICTED RIGHTS LEGEND:
  13. ** Use, duplication or disclosure by the Government is subject to restrictions
  14. ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  15. ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  16. ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  17. ** rights reserved under the Copyright Laws of the United States.
  18. */
  19. #include "types.h"
  20. /*
  21. ** These typedefs are used to normalize the calling conventions
  22. ** for the span procs. Some of the arguments are not used by
  23. ** many of the span procs, but the arguments are present so that
  24. ** the function pointers in the spanProcsRec can be interchanged.
  25. ** The idea is to move up in the calling sequence as high as possible
  26. ** the final "store" span proc.
  27. **
  28. ** The type __GLspanFunc returns GL_TRUE if it stippled the span while
  29. ** processing it. If it also stippled the span all black, it sets
  30. ** gc->polygon.shader.done to GL_TRUE.
  31. **
  32. ** The type __GLstippledSpanFunc return GL_TRUE if it stippled the span
  33. ** to all black, and GL_FALSE otherwise.
  34. */
  35. typedef GLboolean (FASTCALL *__GLspanFunc)(__GLcontext *gc);
  36. typedef GLboolean (FASTCALL *__GLstippledSpanFunc)(__GLcontext *gc);
  37. #define __GL_MAX_SPAN_FUNCS 15
  38. #define __GL_MAX_LINE_FUNCS 16
  39. typedef struct __GLspanProcsRec {
  40. /*
  41. ** First phase of span processing. Clip the span so that it won't
  42. ** render outside of the intersection of the window box and the
  43. ** scissor box. Then call the stipple proc to replicate the stipple
  44. ** (and rotate it) sufficient for rendering w pixels. If there is no
  45. ** active polygon stipple then the stipple proc is skipped, and the
  46. ** unstippled form of the next phase of procs is used until stippling
  47. ** becomes necessary.
  48. **
  49. ** Second phase of span processing. Apply the various test functions
  50. ** producing at the end a final stipple for the span.
  51. ** Each test procedure outputs a new stipple as
  52. ** needed, calling the stippled form of the next proc only if the
  53. ** test failed somewhere in the span.
  54. **
  55. ** Next phase of span processing. This phase is responsible for
  56. ** generating the final colors to be stored. The operations are
  57. ** applied in order as shown below, producing at the end the final
  58. ** color values. draw is used to replicate the span so that it
  59. ** properly renders to the correct number of destination buffers
  60. ** (e.g., when drawBuffer is FRONT_AND_BACK).
  61. **
  62. ** Final phase of span rendering. Apply blend function, dither
  63. ** operation, logic-op and writemask before calling the store
  64. ** proc. When blending, logic-oping, or writemasking is being done,
  65. ** the fetch proc will be used to read in the span (from the draw
  66. ** buffer) before proceeding furthur.
  67. */
  68. /*
  69. ** The 15 layers of the span procs are:
  70. **
  71. ** scissor, poly stipple, alpha test, stencil test, depth test, shading,
  72. ** texturing, fogging, FRONT_AND_BACK drawing, fetching, blending,
  73. ** dithering, logic op, masking, storing.
  74. */
  75. __GLspanFunc spanFuncs[__GL_MAX_SPAN_FUNCS];
  76. __GLstippledSpanFunc stippledSpanFuncs[__GL_MAX_SPAN_FUNCS];
  77. /*
  78. ** The number of procs stored in the span function arrays. n is
  79. ** the number applied prior to span replication (for drawing to both
  80. ** FRONT_AND_BACK buffers), and m is the total number applied.
  81. */
  82. GLint n, m;
  83. /*
  84. ** This is the root span function. It is called when a span needs
  85. ** processing.
  86. */
  87. __GLspanFunc processSpan;
  88. /*
  89. ** Assembly routine to depth test a single pixel. There is no prototype,
  90. ** since variables are passed in registers.
  91. */
  92. void (*depthTestPixel)(void);
  93. } __GLspanProcs;
  94. typedef struct __GLlineProcsRec {
  95. /*
  96. ** The line procs are very similar to the span procs. The biggest
  97. ** difference is that they iterate along a line instead of a span.
  98. **
  99. ** The prototypes for the line procs are identical to the prototypes
  100. ** to the poly span paths so that some of the leaves can be shared.
  101. **
  102. ** The layers of the line procs are as follows:
  103. **
  104. ** scissor, line stipple, alpha test, stencil test, depth test, shading,
  105. ** texturing, fogging, wide line duplication, FRONT_AND_BACK drawing,
  106. ** fetching, blending, dithering, logic op, masking, storing.
  107. */
  108. __GLspanFunc lineFuncs[__GL_MAX_LINE_FUNCS];
  109. __GLstippledSpanFunc stippledLineFuncs[__GL_MAX_LINE_FUNCS];
  110. /*
  111. ** The number of procs stored in the line function arrays. n is
  112. ** the number applied prior to wide line replication (for lines of
  113. ** width greater than 1), m is the total number applied prior to
  114. ** FRONT_AND_BACK line replication, and l is the total number applied
  115. ** altogether (l > m > n).
  116. */
  117. GLint n, m, l;
  118. /*
  119. ** This is the root line function. It is called when a line needs
  120. ** processing.
  121. */
  122. __GLspanFunc processLine;
  123. /*
  124. ** One of these procs is called after the first n procs have been
  125. ** completed. This proc is responsible for replicating a wide line
  126. ** numerous times.
  127. */
  128. __GLspanFunc wideLineRep;
  129. __GLstippledSpanFunc wideStippledLineRep;
  130. /*
  131. ** One of these procs is called after the first m procs have been
  132. ** completed. This proc is responsible for replication a line to
  133. ** be drawn to both the FRONT and BACK buffers.
  134. */
  135. __GLspanFunc drawLine;
  136. __GLstippledSpanFunc drawStippledLine;
  137. /*
  138. ** Assembly routine to depth test a single pixel. There is no prototype,
  139. ** since variables are passed in registers.
  140. **
  141. ** depthTestPixel is for unstippled lines,
  142. ** depthTestSPixel is for stippled lines,
  143. ** depthTestPixelSF is for unstippled lines with stenciling enabled
  144. ** depthTestSPixelSF is for stippled lines with stenciling enabled.
  145. */
  146. void (*depthTestPixel)(void);
  147. void (*depthTestSPixel)(void);
  148. void (*depthTestPixelSF)(void);
  149. void (*depthTestSPixelSF)(void);
  150. } __GLlineProcs;
  151. typedef struct __GLpixelSpanProcsRec {
  152. /*
  153. ** Pixel span reading routines. For examples of each, see pixel/px_read.c.
  154. **
  155. ** These routines read pixel spans for CI, RGBA, Stencil and Depth. The
  156. ** base versions perform pixel skipping, and the '2' versions simply read
  157. ** the span straight. The RGBA routines should produce outgoing scaled
  158. ** colors.
  159. */
  160. void (FASTCALL *spanReadCI)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  161. GLvoid *span);
  162. void (FASTCALL *spanReadCI2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  163. GLvoid *span);
  164. void (FASTCALL *spanReadRGBA)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  165. GLvoid *span);
  166. void (FASTCALL *spanReadRGBA2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  167. GLvoid *span);
  168. void (FASTCALL *spanReadDepth)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  169. GLvoid *span);
  170. void (FASTCALL *spanReadDepth2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  171. GLvoid *span);
  172. void (FASTCALL *spanReadStencil)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  173. GLvoid *span);
  174. void (FASTCALL *spanReadStencil2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  175. GLvoid *span);
  176. /*
  177. ** Pixel span rendering routines. For examples of each, see
  178. ** pixel/px_render.c.
  179. **
  180. ** These routines render pixel spans for CI, RGBA, Stencil and Depth. The
  181. ** base versions perform pixel replication, and the '2' versions simply
  182. ** render the span straight. The RGBA routines should take incoming
  183. ** scaled colors.
  184. */
  185. void (FASTCALL *spanRenderCI)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  186. GLvoid *span);
  187. void (FASTCALL *spanRenderCI2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  188. GLvoid *span);
  189. void (FASTCALL *spanRenderRGBA)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  190. GLvoid *span);
  191. void (FASTCALL *spanRenderRGBA2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  192. GLvoid *span);
  193. void (FASTCALL *spanRenderDepth)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  194. GLvoid *span);
  195. void (FASTCALL *spanRenderDepth2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  196. GLvoid *span);
  197. void (FASTCALL *spanRenderStencil)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  198. GLvoid *span);
  199. void (FASTCALL *spanRenderStencil2)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  200. GLvoid *span);
  201. } __GLpixelSpanProcs;
  202. /************************************************************************/
  203. /*
  204. ** Procedures required for phong shading.
  205. */
  206. #ifdef GL_WIN_phong_shading
  207. typedef struct __GLphongProcsRec {
  208. void (*InitSpanInterpolation) (__GLcontext *gc);
  209. void (*UpdateAlongSpan) (__GLcontext *gc);
  210. void (*ComputeRGBColor) (__GLcontext *gc, __GLcolor *outColor);
  211. void (*ComputeCIColor) (__GLcontext *gc, __GLcolor *outColor);
  212. void (*InitLineParams) (__GLcontext *gc, __GLvertex *v0, __GLvertex *v1,
  213. __GLfloat invDelta);
  214. #ifdef __JUNKED_CODE
  215. void (*InitInterpolation) (__GLcontext *gc, __GLvertex *v);
  216. void (*SetInitParams) (__GLcontext *gc, __GLvertex *a,
  217. __GLcoord *an, __GLfloat dx,
  218. __GLfloat dy);
  219. void (*UpdateAlongEdge) (__GLcontext *gc, __GLfloat dxLeft,
  220. GLboolean useBigStep);
  221. #endif //__JUNKED_CODE
  222. } __GLphongProcs;
  223. #endif //GL_WIN_phong_shading
  224. /************************************************************************/
  225. #ifdef unix
  226. typedef struct _XDisplay __GLdisplay;
  227. typedef unsigned long __GLdrawable;
  228. typedef unsigned long __GLfont;
  229. #endif
  230. #ifdef NT
  231. typedef void (FASTCALL *PFN_RENDER_LINE)(__GLcontext *gc, __GLvertex *v0,
  232. __GLvertex *v1, GLuint flags);
  233. typedef void (FASTCALL *PFN_VERTEX_CLIP_PROC)(__GLvertex*, const __GLvertex*,
  234. const __GLvertex*, __GLfloat);
  235. typedef void (FASTCALL *PFN_RENDER_TRIANGLE)(__GLcontext *gc, __GLvertex *v0,
  236. __GLvertex *v1, __GLvertex *v2);
  237. typedef void (FASTCALL *PFN_FILL_TRIANGLE)(__GLcontext *gc, __GLvertex *v0,
  238. __GLvertex *v1,
  239. __GLvertex *v2, GLboolean ccw);
  240. #endif
  241. typedef struct __GLprocsRec __GLprocs;
  242. struct __GLprocsRec {
  243. /**************************************************************/
  244. /*
  245. ** Context function pointer management procs.
  246. */
  247. /* Validate the context derived state */
  248. void (FASTCALL *validate)(__GLcontext *gc);
  249. /*
  250. ** Pick procs to choose the other procs in this structure. These
  251. ** default to procedures in pick.c (and elsewhere) but can be
  252. ** overriden by the machine dependent context code.
  253. */
  254. void (FASTCALL *pickBlendProcs)(__GLcontext *gc);
  255. void (FASTCALL *pickColorMaterialProcs)(__GLcontext *gc);
  256. void (FASTCALL *pickTextureProcs)(__GLcontext *gc);
  257. void (FASTCALL *pickFogProcs)(__GLcontext *gc);
  258. void (FASTCALL *pickPointProcs)(__GLcontext *gc);
  259. void (FASTCALL *pickLineProcs)(__GLcontext *gc);
  260. void (FASTCALL *pickTriangleProcs)(__GLcontext *gc);
  261. void (FASTCALL *pickRenderBitmapProcs)(__GLcontext *gc);
  262. void (FASTCALL *pickPixelProcs)(__GLcontext *gc);
  263. void (FASTCALL *pickClipProcs)(__GLcontext *gc);
  264. void (FASTCALL *pickParameterClipProcs)(__GLcontext *gc);
  265. void (FASTCALL *pickBufferProcs)(__GLcontext *gc);
  266. void (FASTCALL *pickStoreProcs)(__GLcontext *gc);
  267. void (FASTCALL *pickSpanProcs)(__GLcontext *gc);
  268. void (FASTCALL *pickVertexProcs)(__GLcontext *gc);
  269. int (FASTCALL *pickDepthProcs)(__GLcontext *gc);
  270. void (FASTCALL *pickAllProcs)(__GLcontext *gc);
  271. /**************************************************************/
  272. /*
  273. ** Function pointers used for transformation, viewport and normal
  274. ** processing.
  275. */
  276. /* Called when the viewport changes */
  277. void (FASTCALL *applyViewport)(__GLcontext *gc);
  278. /**************************************************************/
  279. #ifdef NT
  280. GLuint (FASTCALL *paClipCheck)(__GLcontext *gc, POLYARRAY *pa,
  281. POLYDATA *pdLast);
  282. #endif
  283. #ifdef NT
  284. void (FASTCALL *paCalcTexture)(__GLcontext *gc, POLYARRAY *pa);
  285. #endif
  286. /**************************************************************/
  287. /*
  288. ** Function pointers used for coloring
  289. */
  290. /*
  291. ** applyColor processes a color from the user that has been loaded
  292. ** into the gc->state.current.color. If color material is enabled
  293. ** then the color will be applied the appropriate material(s).
  294. ** Otherwise, the color will be either scaled or scaled and clamped.
  295. */
  296. void (FASTCALL *applyColor)(__GLcontext *gc);
  297. #ifdef NT
  298. PFN_POLYARRAYCALCCOLORSKIP paCalcColorSkip;
  299. PFN_POLYARRAYCALCCOLOR paCalcColor;
  300. PFN_POLYARRAYAPPLYCHEAPFOG paApplyCheapFog;
  301. #endif
  302. /*
  303. ** Apply a color change to a material.
  304. */
  305. void (FASTCALL *changeMaterial)(__GLcontext *gc, __GLmaterialState *ms,
  306. __GLmaterialMachine *msm);
  307. /**************************************************************/
  308. /*
  309. ** Z buffer test procs
  310. */
  311. /*
  312. ** assembly routines to depth test a single pixel. These are
  313. ** highly optimized C-callable routines...
  314. */
  315. GLboolean (FASTCALL *DTPixel)( __GLzValue z, __GLzValue *zfb );
  316. /**************************************************************/
  317. /*
  318. ** Function pointers used for polygon, triangle, quad and rect
  319. ** rendering.
  320. */
  321. /* Rendering */
  322. PFN_RENDER_TRIANGLE renderTriangle;
  323. PFN_FILL_TRIANGLE fillTriangle;
  324. PFN_FILL_TRIANGLE fillTriangle2;
  325. /* Clipping */
  326. void (FASTCALL *clipTriangle)(__GLcontext *gc, __GLvertex *v0,
  327. __GLvertex *v1,
  328. __GLvertex *v2, GLuint orCodes);
  329. void (FASTCALL *clipPolygon)(__GLcontext *gc, __GLvertex *v0, GLint nv);
  330. PFN_VERTEX_CLIP_PROC polyClipParam;
  331. /* Function pointers specific to span level rendering */
  332. __GLspanProcs span;
  333. /* Function pointers specific to line level rendering */
  334. __GLlineProcs line;
  335. /* Function pointers specific to pixel routines (DrawPixels, CopyPixels,
  336. ** ReadPixels).
  337. */
  338. __GLpixelSpanProcs pixel;
  339. /**************************************************************/
  340. /*
  341. ** Function pointers used for lines.
  342. */
  343. #ifdef NT
  344. void (FASTCALL *lineBegin)(__GLcontext *gc);
  345. void (FASTCALL *lineEnd)(__GLcontext *gc);
  346. PFN_RENDER_LINE renderLine;
  347. PFN_RENDER_LINE renderLine2;
  348. #else
  349. void (FASTCALL *renderLine)(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1);
  350. void (FASTCALL *renderLine2)(__GLcontext *gc, __GLvertex *v0, __GLvertex *v1);
  351. #endif
  352. /* Line specific parameter clip proc */
  353. PFN_VERTEX_CLIP_PROC lineClipParam;
  354. /*
  355. ** The default slow path renderLine proc simply initializes some line
  356. ** data, and then calls this proc.
  357. */
  358. void (FASTCALL *rasterizeLine)(__GLcontext *gc);
  359. /**************************************************************/
  360. /*
  361. ** Point procs.
  362. */
  363. void (FASTCALL *renderPoint)(__GLcontext *gc, __GLvertex *v);
  364. #ifdef __BUGGY_RENDER_POINT
  365. void (FASTCALL *renderPoint2)(__GLcontext *gc, __GLvertex *v);
  366. #endif //__BUGGY_RENDER_POINT
  367. /**************************************************************/
  368. /*
  369. ** Bitmap procs.
  370. */
  371. void (*bitmap)(__GLcontext *gc, GLint width, GLint height,
  372. GLfloat xOrig, GLfloat yOrig,
  373. GLfloat xMove, GLfloat yMove, const GLubyte bits[]);
  374. void (FASTCALL *renderBitmap)(__GLcontext *gc, const __GLbitmap *bitmap,
  375. const GLubyte *bits);
  376. /**************************************************************/
  377. /*
  378. ** Texturing procs. The rho procs compute the next rho value
  379. ** for mipmap selection. They might be simple procedures if
  380. ** mipmapping is not being done.
  381. */
  382. __GLfloat (*calcLineRho)(__GLcontext *gc, __GLfloat s,
  383. __GLfloat t, __GLfloat winv);
  384. __GLfloat (*calcPolygonRho)(__GLcontext *gc, const __GLshade *sh,
  385. __GLfloat s, __GLfloat t, __GLfloat winv);
  386. void (*texture)(__GLcontext *gc, __GLcolor *color, __GLfloat s,
  387. __GLfloat t, __GLfloat rho);
  388. /**************************************************************/
  389. /*
  390. ** Fogging procs. Vertex fogging computes the fog factor at the
  391. ** vertex and then interpolates that. High quality fogging
  392. ** (GL_FOG_HINT set to GL_NICEST) interpolates the eyeZ at then
  393. ** evaluates the fog function for each fragment.
  394. */
  395. void (*fogPoint)(__GLcontext *gc, __GLfragment *frag, __GLfloat eyeZ);
  396. void (*fogColor)(__GLcontext *gc, __GLcolor *out, __GLcolor *in,
  397. __GLfloat eyeZ);
  398. __GLfloat (FASTCALL *fogVertex)(__GLcontext *gc, __GLvertex *vx);
  399. /**************************************************************/
  400. /*
  401. ** Blend an incoming fragment according to the current blending
  402. ** mode and return a pointer to the new fragment which contains
  403. ** the updated colors.
  404. */
  405. void (*blend)(__GLcontext *gc, __GLcolorBuffer *cfb,
  406. const __GLfragment *frag, __GLcolor *result);
  407. void (*blendColor)(__GLcontext *gc, const __GLcolor *source,
  408. const __GLcolor *dest, __GLcolor *result);
  409. void (*blendSrc)(__GLcontext *gc, const __GLcolor *source,
  410. const __GLcolor *dest, __GLcolor *result);
  411. void (*blendDst)(__GLcontext *gc, const __GLcolor *frag,
  412. const __GLcolor *dest, __GLcolor *result);
  413. void (FASTCALL *blendSpan)(__GLcontext *gc);
  414. /**************************************************************/
  415. /* Pixel proc pointers */
  416. void (*drawPixels)(__GLcontext *gc, GLint width, GLint height,
  417. GLenum format, GLenum type, const GLvoid *pixels,
  418. GLboolean packed);
  419. void (*copyPixels)(__GLcontext *gc, GLint x, GLint y,
  420. GLsizei width, GLsizei height, GLenum type);
  421. void (*readPixels)(__GLcontext *gc, GLint x, GLint y,
  422. GLsizei width, GLsizei height,
  423. GLenum format, GLenum type, const GLvoid *pixels);
  424. void (FASTCALL *copyImage)(__GLcontext *gc, __GLpixelSpanInfo *spanInfo,
  425. GLboolean applyPixelTransfer);
  426. void (FASTCALL *pxStore)(__GLcolorBuffer *cfb, const __GLfragment *frag);
  427. /**************************************************************/
  428. /*
  429. ** Store a fragment into the given frame buffer, applying any
  430. ** currently active rasterization modes properly.
  431. */
  432. void (FASTCALL *store)(__GLcolorBuffer *cfb, const __GLfragment *frag);
  433. /*
  434. ** Store a fragment into the given frame buffer.
  435. */
  436. void (FASTCALL *cfbStore)(__GLcolorBuffer *cfb, const __GLfragment *frag);
  437. /**************************************************************/
  438. /*
  439. ** Function pointers used for attribute processing.
  440. */
  441. /* called when the polygon stipple changes */
  442. void (FASTCALL *convertPolygonStipple)(__GLcontext *gc);
  443. #ifdef GL_WIN_phong_shading
  444. /**************************************************************/
  445. /*
  446. ** Function pointers used for Phong shading.
  447. */
  448. __GLphongProcs phong;
  449. /**************************************************************/
  450. #endif //GL_WIN_phong_shading
  451. };
  452. extern void FASTCALL __glGenericValidate(__GLcontext *gc);
  453. /* Generic (portable) implementations of the pick procs */
  454. extern void FASTCALL __glGenericPickBlendProcs(__GLcontext *gc);
  455. extern void FASTCALL __glGenericPickColorMaterialProcs(__GLcontext *gc);
  456. extern void FASTCALL __glGenericPickTextureProcs(__GLcontext *gc);
  457. extern void FASTCALL __glGenericPickFogProcs(__GLcontext *gc);
  458. extern void FASTCALL __glGenericPickParameterClipProcs(__GLcontext *gc);
  459. extern void FASTCALL __glGenericPickPointProcs(__GLcontext *gc);
  460. extern void FASTCALL __glGenericPickTriangleProcs(__GLcontext *gc);
  461. extern void FASTCALL __glGenericPickLineProcs(__GLcontext *gc);
  462. extern void FASTCALL __glGenericPickRenderBitmapProcs(__GLcontext *gc);
  463. extern void FASTCALL __glGenericPickClipProcs(__GLcontext *gc);
  464. extern void FASTCALL __glGenericPickBufferProcs(__GLcontext *gc);
  465. extern void FASTCALL __glGenericPickStoreProcs(__GLcontext *gc);
  466. extern void FASTCALL __glGenericPickSpanProcs(__GLcontext *gc);
  467. extern void FASTCALL __glGenericPickVertexProcs(__GLcontext *gc);
  468. extern void FASTCALL __glGenericPickPixelProcs(__GLcontext *gc);
  469. extern int FASTCALL __glGenericPickDepthProcs(__GLcontext *gc);
  470. extern void FASTCALL __glGenericPickAllProcs(__GLcontext *gc);
  471. /* some useful store procs */
  472. extern void FASTCALL __glDoStore_ASD(__GLcolorBuffer *, const __GLfragment *);
  473. extern void FASTCALL __glDoStore_AS(__GLcolorBuffer *, const __GLfragment *);
  474. extern void FASTCALL __glDoStore_AD(__GLcolorBuffer *, const __GLfragment *);
  475. extern void FASTCALL __glDoStore_SD(__GLcolorBuffer *, const __GLfragment *);
  476. extern void FASTCALL __glDoStore_A(__GLcolorBuffer *, const __GLfragment *);
  477. extern void FASTCALL __glDoStore_S(__GLcolorBuffer *, const __GLfragment *);
  478. extern void FASTCALL __glDoStore_D(__GLcolorBuffer *, const __GLfragment *);
  479. extern void FASTCALL __glDoStore(__GLcolorBuffer *, const __GLfragment *);
  480. extern void FASTCALL __glDoNullStore(__GLcolorBuffer *, const __GLfragment *);
  481. extern void FASTCALL __glDoDoubleStore(__GLcolorBuffer *, const __GLfragment *);
  482. /* Some predicates for pick procs to use */
  483. extern GLboolean FASTCALL __glFastRGBA(__GLcontext *gc);
  484. extern GLboolean FASTCALL __glNeedAlpha(__GLcontext *gc);
  485. /* Save routines */
  486. void FASTCALL FASTCALL __glSaveN(__GLcontext *gc, __GLvertex *vx);
  487. void FASTCALL FASTCALL __glSaveC(__GLcontext *gc, __GLvertex *vx);
  488. void FASTCALL FASTCALL __glSaveCI(__GLcontext *gc, __GLvertex *vx);
  489. void FASTCALL FASTCALL __glSaveT(__GLcontext *gc, __GLvertex *vx);
  490. void FASTCALL FASTCALL __glSaveCT(__GLcontext *gc, __GLvertex *vx);
  491. void FASTCALL FASTCALL __glSaveNT(__GLcontext *gc, __GLvertex *vx);
  492. void FASTCALL FASTCALL __glSaveCAll(__GLcontext *gc, __GLvertex *vx);
  493. void FASTCALL FASTCALL __glSaveCIAll(__GLcontext *gc, __GLvertex *vx);
  494. #ifdef NT
  495. void FASTCALL PolyArrayCalcTexture(__GLcontext *gc, POLYARRAY *pa);
  496. void FASTCALL PolyArrayCalcObjectLinearSameST(__GLcontext *gc, POLYARRAY *pa);
  497. void FASTCALL PolyArrayCalcObjectLinear(__GLcontext *gc, POLYARRAY *pa);
  498. void FASTCALL PolyArrayCalcEyeLinearSameST(__GLcontext *gc, POLYARRAY *pa);
  499. void FASTCALL PolyArrayCalcEyeLinear(__GLcontext *gc, POLYARRAY *pa);
  500. void FASTCALL PolyArrayCalcSphereMap(__GLcontext *gc, POLYARRAY *pa);
  501. void FASTCALL PolyArrayCalcMixedTexture(__GLcontext *gc, POLYARRAY *pa);
  502. #endif
  503. #ifdef _X86_
  504. void initClipCodesTable(); // Defined in so_prim.c
  505. void initInvSqrtTable(); // Defined in so_prim.c
  506. #endif // _X86_
  507. #endif /* __glprocs_h_ */