home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mesa5.zip / mesa5src.zip / swrast / s_context.h < prev    next >
C/C++ Source or Header  |  2002-12-10  |  7KB  |  239 lines

  1. /* $Id: s_context.h,v 1.22 2002/10/29 20:29:00 brianp Exp $ */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  4.1
  6.  *
  7.  * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
  8.  *
  9.  * Permission is hereby granted, free of charge, to any person obtaining a
  10.  * copy of this software and associated documentation files (the "Software"),
  11.  * to deal in the Software without restriction, including without limitation
  12.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  13.  * and/or sell copies of the Software, and to permit persons to whom the
  14.  * Software is furnished to do so, subject to the following conditions:
  15.  *
  16.  * The above copyright notice and this permission notice shall be included
  17.  * in all copies or substantial portions of the Software.
  18.  *
  19.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  20.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  22.  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
  23.  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  24.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  * Authors:
  27.  *    Keith Whitwell <keith@tungstengraphics.com>
  28.  */
  29.  
  30. /**
  31.  * \file swrast/s_context.h
  32.  * \brief fill in description
  33.  * \author Keith Whitwell <keith@tungstengraphics.com>
  34.  */
  35.  
  36. #ifndef S_CONTEXT_H
  37. #define S_CONTEXT_H
  38.  
  39. #include "mtypes.h"
  40. #include "swrast.h"
  41.  
  42. /*
  43.  * For texture sampling:
  44.  */
  45. typedef void (*TextureSampleFunc)( GLcontext *ctx, GLuint texUnit,
  46.                    const struct gl_texture_object *tObj,
  47.                                    GLuint n, GLfloat texcoords[][4],
  48.                                    const GLfloat lambda[], GLchan rgba[][4] );
  49.  
  50.  
  51.  
  52. /*
  53.  * Blending function
  54.  */
  55. #ifdef USE_MMX_ASM
  56. typedef void (_ASMAPIP blend_func)( GLcontext *ctx, GLuint n,
  57.                                     const GLubyte mask[],
  58.                                     GLchan src[][4], CONST GLchan dst[][4] );
  59. #else
  60. typedef void (*blend_func)( GLcontext *ctx, GLuint n, const GLubyte mask[],
  61.                             GLchan src[][4], CONST GLchan dst[][4] );
  62. #endif
  63.  
  64. typedef void (*swrast_point_func)( GLcontext *ctx, const SWvertex *);
  65.  
  66. typedef void (*swrast_line_func)( GLcontext *ctx,
  67.                                   const SWvertex *, const SWvertex *);
  68.  
  69. typedef void ( F_swrast_tri_func)( GLcontext *ctx, const SWvertex *,
  70.                                  const SWvertex *, const SWvertex *);
  71.  
  72. typedef  F_swrast_tri_func *swrast_tri_func;
  73.  
  74.  
  75. /** \defgroup Bitmasks
  76.  * Bitmasks to indicate which rasterization options are enabled
  77.  * (RasterMask)
  78.  */
  79. /*@{*/
  80. #define ALPHATEST_BIT        0x001    /**< Alpha-test pixels */
  81. #define BLEND_BIT        0x002    /**< Blend pixels */
  82. #define DEPTH_BIT        0x004    /**< Depth-test pixels */
  83. #define FOG_BIT            0x008    /**< Fog pixels */
  84. #define LOGIC_OP_BIT        0x010    /**< Apply logic op in software */
  85. #define CLIP_BIT        0x020    /**< Scissor or window clip pixels */
  86. #define STENCIL_BIT        0x040    /**< Stencil pixels */
  87. #define MASKING_BIT        0x080    /**< Do glColorMask or glIndexMask */
  88. #define ALPHABUF_BIT        0x100    /**< Using software alpha buffer */
  89. #define MULTI_DRAW_BIT        0x400    /**< Write to more than one color- */
  90.                                         /**< buffer or no buffers. */
  91. #define OCCLUSION_BIT           0x800   /**< GL_HP_occlusion_test enabled */
  92. #define TEXTURE_BIT        0x1000    /**< Texturing really enabled */
  93. /*@}*/
  94.  
  95. #define _SWRAST_NEW_RASTERMASK (_NEW_BUFFERS|    \
  96.                     _NEW_SCISSOR|    \
  97.                     _NEW_COLOR|    \
  98.                     _NEW_DEPTH|    \
  99.                     _NEW_FOG|    \
  100.                     _NEW_STENCIL|    \
  101.                     _NEW_TEXTURE|    \
  102.                     _NEW_VIEWPORT|    \
  103.                     _NEW_DEPTH)
  104.  
  105.  
  106. /**
  107.  * \struct SWcontext
  108.  * \brief SWContext?
  109.  */
  110. typedef struct
  111. {
  112.    /** Driver interface:
  113.     */
  114.    struct swrast_device_driver Driver;
  115.  
  116.    /** Configuration mechanisms to make software rasterizer match
  117.     * characteristics of the hardware rasterizer (if present):
  118.     */
  119.    GLboolean AllowVertexFog;
  120.    GLboolean AllowPixelFog;
  121.  
  122.    /** Derived values, invalidated on statechanges, updated from
  123.     * _swrast_validate_derived():
  124.     */
  125.    GLuint _RasterMask;
  126.    GLfloat _MinMagThresh[MAX_TEXTURE_UNITS];
  127.    GLfloat _backface_sign;
  128.    GLboolean _PreferPixelFog;
  129.    GLboolean _AnyTextureCombine;
  130.  
  131.    /* Accum buffer temporaries.
  132.     */
  133.    GLboolean _IntegerAccumMode;    /**< Storing unscaled integers? */
  134.    GLfloat _IntegerAccumScaler;    /**< Implicit scale factor */
  135.  
  136.  
  137.    /* Working values:
  138.     */
  139.    GLuint StippleCounter;    /**< Line stipple counter */
  140.    GLuint NewState;
  141.    GLuint StateChanges;
  142.    GLenum Primitive;    /* current primitive being drawn (ala glBegin) */
  143.    GLuint CurrentBuffer; /* exactly one of FRONT_LEFT_BIT, BACK_LEFT_BIT, etc*/
  144.  
  145.    /** Mechanism to allow driver (like X11) to register further
  146.     * software rasterization routines.
  147.     */
  148.    /*@{*/
  149.    void (*choose_point)( GLcontext * );
  150.    void (*choose_line)( GLcontext * );
  151.    void (*choose_triangle)( GLcontext * );
  152.  
  153.    GLuint invalidate_point;
  154.    GLuint invalidate_line;
  155.    GLuint invalidate_triangle;
  156.    /*@}*/
  157.  
  158.    /** Function pointers for dispatch behind public entrypoints. */
  159.    /*@{*/
  160.    void (*InvalidateState)( GLcontext *ctx, GLuint new_state );
  161.  
  162.    swrast_point_func Point;
  163.    swrast_line_func Line;
  164.    swrast_tri_func Triangle;
  165.    /*@}*/
  166.  
  167.    /**
  168.     * Placeholders for when separate specular (or secondary color) is
  169.     * enabled but texturing is not.
  170.     */
  171.    /*@{*/
  172.    swrast_point_func SpecPoint;
  173.    swrast_line_func SpecLine;
  174.    swrast_tri_func SpecTriangle;
  175.    /*@}*/
  176.  
  177.    /**
  178.     * Typically, we'll allocate a sw_span structure as a local variable
  179.     * and set its 'array' pointer to point to this object.  The reason is
  180.     * this object is big and causes problems when allocated on the stack
  181.     * on some systems.
  182.     */
  183.    struct span_arrays *SpanArrays;
  184.  
  185.    /**
  186.     * Used to buffer N GL_POINTS, instead of rendering one by one.
  187.     */
  188.    struct sw_span PointSpan;
  189.  
  190.    /** Internal hooks, kept uptodate by the same mechanism as above.
  191.     */
  192.    blend_func BlendFunc;
  193.    TextureSampleFunc TextureSample[MAX_TEXTURE_UNITS];
  194.  
  195.    /** Buffer for saving the sampled texture colors.
  196.     * Needed for GL_ARB_texture_env_crossbar implementation.
  197.     */
  198.    GLchan *TexelBuffer;
  199.  
  200. } SWcontext;
  201.  
  202.  
  203. extern void
  204. _swrast_validate_derived( GLcontext *ctx );
  205.  
  206.  
  207. #define SWRAST_CONTEXT(ctx) ((SWcontext *)ctx->swrast_context)
  208.  
  209. #define RENDER_START(SWctx, GLctx)            \
  210.    do {                            \
  211.       if ((SWctx)->Driver.SpanRenderStart) {        \
  212.          (*(SWctx)->Driver.SpanRenderStart)(GLctx);    \
  213.       }                            \
  214.    } while (0)
  215.  
  216. #define RENDER_FINISH(SWctx, GLctx)            \
  217.    do {                            \
  218.       if ((SWctx)->Driver.SpanRenderFinish) {        \
  219.          (*(SWctx)->Driver.SpanRenderFinish)(GLctx);    \
  220.       }                            \
  221.    } while (0)
  222.  
  223.  
  224.  
  225. /*
  226.  * XXX these macros are just bandages for now in order to make
  227.  * CHAN_BITS==32 compile cleanly.
  228.  * These should probably go elsewhere at some point.
  229.  */
  230. #if CHAN_TYPE == GL_FLOAT
  231. #define ChanToFixed(X)  (X)
  232. #define FixedToChan(X)  (X)
  233. #else
  234. #define ChanToFixed(X)  IntToFixed(X)
  235. #define FixedToChan(X)  FixedToInt(X)
  236. #endif
  237.  
  238. #endif
  239.