rastpos.c revision 3464ebd5
17117f1b4Smrg/*
27117f1b4Smrg * Mesa 3-D graphics library
37117f1b4Smrg * Version:  6.5.3
47117f1b4Smrg *
57117f1b4Smrg * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
67117f1b4Smrg *
77117f1b4Smrg * Permission is hereby granted, free of charge, to any person obtaining a
87117f1b4Smrg * copy of this software and associated documentation files (the "Software"),
97117f1b4Smrg * to deal in the Software without restriction, including without limitation
107117f1b4Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
117117f1b4Smrg * and/or sell copies of the Software, and to permit persons to whom the
127117f1b4Smrg * Software is furnished to do so, subject to the following conditions:
137117f1b4Smrg *
147117f1b4Smrg * The above copyright notice and this permission notice shall be included
157117f1b4Smrg * in all copies or substantial portions of the Software.
167117f1b4Smrg *
177117f1b4Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
187117f1b4Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
197117f1b4Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
207117f1b4Smrg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
217117f1b4Smrg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
227117f1b4Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
237117f1b4Smrg */
247117f1b4Smrg
257117f1b4Smrg
267117f1b4Smrg/**
277117f1b4Smrg * \file rastpos.c
287117f1b4Smrg * Raster position operations.
297117f1b4Smrg */
307117f1b4Smrg
317117f1b4Smrg#include "glheader.h"
327117f1b4Smrg#include "context.h"
337117f1b4Smrg#include "feedback.h"
347117f1b4Smrg#include "macros.h"
353464ebd5Sriastradh#include "mfeatures.h"
363464ebd5Sriastradh#include "mtypes.h"
377117f1b4Smrg#include "rastpos.h"
387117f1b4Smrg#include "state.h"
39cdc920a0Smrg#include "main/dispatch.h"
404a49301eSmrg
414a49301eSmrg
424a49301eSmrg#if FEATURE_rastpos
437117f1b4Smrg
447117f1b4Smrg
457117f1b4Smrg/**
46c1f859d4Smrg * Helper function for all the RasterPos functions.
477117f1b4Smrg */
487117f1b4Smrgstatic void
49c1f859d4Smrgrasterpos(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
50c1f859d4Smrg{
51c1f859d4Smrg   GET_CURRENT_CONTEXT(ctx);
52c1f859d4Smrg   GLfloat p[4];
537117f1b4Smrg
54c1f859d4Smrg   p[0] = x;
55c1f859d4Smrg   p[1] = y;
56c1f859d4Smrg   p[2] = z;
57c1f859d4Smrg   p[3] = w;
587117f1b4Smrg
597117f1b4Smrg   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
607117f1b4Smrg   FLUSH_CURRENT(ctx, 0);
617117f1b4Smrg
627117f1b4Smrg   if (ctx->NewState)
637117f1b4Smrg      _mesa_update_state( ctx );
647117f1b4Smrg
65c1f859d4Smrg   ctx->Driver.RasterPos(ctx, p);
667117f1b4Smrg}
677117f1b4Smrg
687117f1b4Smrg
694a49301eSmrgstatic void GLAPIENTRY
707117f1b4Smrg_mesa_RasterPos2d(GLdouble x, GLdouble y)
717117f1b4Smrg{
72c1f859d4Smrg   rasterpos((GLfloat)x, (GLfloat)y, (GLfloat)0.0, (GLfloat)1.0);
737117f1b4Smrg}
747117f1b4Smrg
754a49301eSmrgstatic void GLAPIENTRY
767117f1b4Smrg_mesa_RasterPos2f(GLfloat x, GLfloat y)
777117f1b4Smrg{
78c1f859d4Smrg   rasterpos(x, y, 0.0F, 1.0F);
797117f1b4Smrg}
807117f1b4Smrg
814a49301eSmrgstatic void GLAPIENTRY
827117f1b4Smrg_mesa_RasterPos2i(GLint x, GLint y)
837117f1b4Smrg{
84c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
857117f1b4Smrg}
867117f1b4Smrg
874a49301eSmrgstatic void GLAPIENTRY
887117f1b4Smrg_mesa_RasterPos2s(GLshort x, GLshort y)
897117f1b4Smrg{
90c1f859d4Smrg   rasterpos(x, y, 0.0F, 1.0F);
917117f1b4Smrg}
927117f1b4Smrg
934a49301eSmrgstatic void GLAPIENTRY
947117f1b4Smrg_mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
957117f1b4Smrg{
96c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
977117f1b4Smrg}
987117f1b4Smrg
994a49301eSmrgstatic void GLAPIENTRY
1007117f1b4Smrg_mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
1017117f1b4Smrg{
102c1f859d4Smrg   rasterpos(x, y, z, 1.0F);
1037117f1b4Smrg}
1047117f1b4Smrg
1054a49301eSmrgstatic void GLAPIENTRY
1067117f1b4Smrg_mesa_RasterPos3i(GLint x, GLint y, GLint z)
1077117f1b4Smrg{
108c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
1097117f1b4Smrg}
1107117f1b4Smrg
1114a49301eSmrgstatic void GLAPIENTRY
1127117f1b4Smrg_mesa_RasterPos3s(GLshort x, GLshort y, GLshort z)
1137117f1b4Smrg{
114c1f859d4Smrg   rasterpos(x, y, z, 1.0F);
1157117f1b4Smrg}
1167117f1b4Smrg
1174a49301eSmrgstatic void GLAPIENTRY
1187117f1b4Smrg_mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1197117f1b4Smrg{
120c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1217117f1b4Smrg}
1227117f1b4Smrg
1234a49301eSmrgstatic void GLAPIENTRY
1247117f1b4Smrg_mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1257117f1b4Smrg{
126c1f859d4Smrg   rasterpos(x, y, z, w);
1277117f1b4Smrg}
1287117f1b4Smrg
1294a49301eSmrgstatic void GLAPIENTRY
1307117f1b4Smrg_mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
1317117f1b4Smrg{
132c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1337117f1b4Smrg}
1347117f1b4Smrg
1354a49301eSmrgstatic void GLAPIENTRY
1367117f1b4Smrg_mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
1377117f1b4Smrg{
138c1f859d4Smrg   rasterpos(x, y, z, w);
1397117f1b4Smrg}
1407117f1b4Smrg
1414a49301eSmrgstatic void GLAPIENTRY
1427117f1b4Smrg_mesa_RasterPos2dv(const GLdouble *v)
1437117f1b4Smrg{
144c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1457117f1b4Smrg}
1467117f1b4Smrg
1474a49301eSmrgstatic void GLAPIENTRY
1487117f1b4Smrg_mesa_RasterPos2fv(const GLfloat *v)
1497117f1b4Smrg{
150c1f859d4Smrg   rasterpos(v[0], v[1], 0.0F, 1.0F);
1517117f1b4Smrg}
1527117f1b4Smrg
1534a49301eSmrgstatic void GLAPIENTRY
1547117f1b4Smrg_mesa_RasterPos2iv(const GLint *v)
1557117f1b4Smrg{
156c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1577117f1b4Smrg}
1587117f1b4Smrg
1594a49301eSmrgstatic void GLAPIENTRY
1607117f1b4Smrg_mesa_RasterPos2sv(const GLshort *v)
1617117f1b4Smrg{
162c1f859d4Smrg   rasterpos(v[0], v[1], 0.0F, 1.0F);
1637117f1b4Smrg}
1647117f1b4Smrg
1654a49301eSmrgstatic void GLAPIENTRY
1667117f1b4Smrg_mesa_RasterPos3dv(const GLdouble *v)
1677117f1b4Smrg{
168c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1697117f1b4Smrg}
1707117f1b4Smrg
1714a49301eSmrgstatic void GLAPIENTRY
1727117f1b4Smrg_mesa_RasterPos3fv(const GLfloat *v)
1737117f1b4Smrg{
174c1f859d4Smrg   rasterpos(v[0], v[1], v[2], 1.0F);
1757117f1b4Smrg}
1767117f1b4Smrg
1774a49301eSmrgstatic void GLAPIENTRY
1787117f1b4Smrg_mesa_RasterPos3iv(const GLint *v)
1797117f1b4Smrg{
180c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1817117f1b4Smrg}
1827117f1b4Smrg
1834a49301eSmrgstatic void GLAPIENTRY
1847117f1b4Smrg_mesa_RasterPos3sv(const GLshort *v)
1857117f1b4Smrg{
186c1f859d4Smrg   rasterpos(v[0], v[1], v[2], 1.0F);
1877117f1b4Smrg}
1887117f1b4Smrg
1894a49301eSmrgstatic void GLAPIENTRY
1907117f1b4Smrg_mesa_RasterPos4dv(const GLdouble *v)
1917117f1b4Smrg{
192c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1],
1937117f1b4Smrg		     (GLfloat) v[2], (GLfloat) v[3]);
1947117f1b4Smrg}
1957117f1b4Smrg
1964a49301eSmrgstatic void GLAPIENTRY
1977117f1b4Smrg_mesa_RasterPos4fv(const GLfloat *v)
1987117f1b4Smrg{
199c1f859d4Smrg   rasterpos(v[0], v[1], v[2], v[3]);
2007117f1b4Smrg}
2017117f1b4Smrg
2024a49301eSmrgstatic void GLAPIENTRY
2037117f1b4Smrg_mesa_RasterPos4iv(const GLint *v)
2047117f1b4Smrg{
205c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1],
2067117f1b4Smrg		     (GLfloat) v[2], (GLfloat) v[3]);
2077117f1b4Smrg}
2087117f1b4Smrg
2094a49301eSmrgstatic void GLAPIENTRY
2107117f1b4Smrg_mesa_RasterPos4sv(const GLshort *v)
2117117f1b4Smrg{
212c1f859d4Smrg   rasterpos(v[0], v[1], v[2], v[3]);
2137117f1b4Smrg}
2147117f1b4Smrg
2157117f1b4Smrg
2167117f1b4Smrg/**********************************************************************/
2177117f1b4Smrg/***           GL_ARB_window_pos / GL_MESA_window_pos               ***/
2187117f1b4Smrg/**********************************************************************/
2197117f1b4Smrg
2204a49301eSmrg
2217117f1b4Smrg/**
2227117f1b4Smrg * All glWindowPosMESA and glWindowPosARB commands call this function to
2237117f1b4Smrg * update the current raster position.
2247117f1b4Smrg */
2257117f1b4Smrgstatic void
2267117f1b4Smrgwindow_pos3f(GLfloat x, GLfloat y, GLfloat z)
2277117f1b4Smrg{
2287117f1b4Smrg   GET_CURRENT_CONTEXT(ctx);
2297117f1b4Smrg   GLfloat z2;
2307117f1b4Smrg
2317117f1b4Smrg   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
2327117f1b4Smrg   FLUSH_CURRENT(ctx, 0);
2337117f1b4Smrg
2347117f1b4Smrg   z2 = CLAMP(z, 0.0F, 1.0F) * (ctx->Viewport.Far - ctx->Viewport.Near)
2357117f1b4Smrg      + ctx->Viewport.Near;
2367117f1b4Smrg
2377117f1b4Smrg   /* set raster position */
2387117f1b4Smrg   ctx->Current.RasterPos[0] = x;
2397117f1b4Smrg   ctx->Current.RasterPos[1] = y;
2407117f1b4Smrg   ctx->Current.RasterPos[2] = z2;
2417117f1b4Smrg   ctx->Current.RasterPos[3] = 1.0F;
2427117f1b4Smrg
2437117f1b4Smrg   ctx->Current.RasterPosValid = GL_TRUE;
2447117f1b4Smrg
2457117f1b4Smrg   if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT)
2467117f1b4Smrg      ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
2477117f1b4Smrg   else
2487117f1b4Smrg      ctx->Current.RasterDistance = 0.0;
2497117f1b4Smrg
2507117f1b4Smrg   /* raster color = current color or index */
251cdc920a0Smrg   ctx->Current.RasterColor[0]
252cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
253cdc920a0Smrg   ctx->Current.RasterColor[1]
254cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
255cdc920a0Smrg   ctx->Current.RasterColor[2]
256cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
257cdc920a0Smrg   ctx->Current.RasterColor[3]
258cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
259cdc920a0Smrg   ctx->Current.RasterSecondaryColor[0]
260cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
261cdc920a0Smrg   ctx->Current.RasterSecondaryColor[1]
262cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
263cdc920a0Smrg   ctx->Current.RasterSecondaryColor[2]
264cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
265cdc920a0Smrg   ctx->Current.RasterSecondaryColor[3]
266cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
2677117f1b4Smrg
2687117f1b4Smrg   /* raster texcoord = current texcoord */
2697117f1b4Smrg   {
2707117f1b4Smrg      GLuint texSet;
2717117f1b4Smrg      for (texSet = 0; texSet < ctx->Const.MaxTextureCoordUnits; texSet++) {
272cdc920a0Smrg         assert(texSet < Elements(ctx->Current.RasterTexCoords));
2737117f1b4Smrg         COPY_4FV( ctx->Current.RasterTexCoords[texSet],
2747117f1b4Smrg                  ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
2757117f1b4Smrg      }
2767117f1b4Smrg   }
2777117f1b4Smrg
2787117f1b4Smrg   if (ctx->RenderMode==GL_SELECT) {
2797117f1b4Smrg      _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
2807117f1b4Smrg   }
2817117f1b4Smrg}
2827117f1b4Smrg
2837117f1b4Smrg
2847117f1b4Smrg/* This is just to support the GL_MESA_window_pos version */
2857117f1b4Smrgstatic void
2867117f1b4Smrgwindow_pos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
2877117f1b4Smrg{
2887117f1b4Smrg   GET_CURRENT_CONTEXT(ctx);
2897117f1b4Smrg   window_pos3f(x, y, z);
2907117f1b4Smrg   ctx->Current.RasterPos[3] = w;
2917117f1b4Smrg}
2927117f1b4Smrg
2937117f1b4Smrg
2944a49301eSmrgstatic void GLAPIENTRY
2957117f1b4Smrg_mesa_WindowPos2dMESA(GLdouble x, GLdouble y)
2967117f1b4Smrg{
2977117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
2987117f1b4Smrg}
2997117f1b4Smrg
3004a49301eSmrgstatic void GLAPIENTRY
3017117f1b4Smrg_mesa_WindowPos2fMESA(GLfloat x, GLfloat y)
3027117f1b4Smrg{
3037117f1b4Smrg   window_pos4f(x, y, 0.0F, 1.0F);
3047117f1b4Smrg}
3057117f1b4Smrg
3064a49301eSmrgstatic void GLAPIENTRY
3077117f1b4Smrg_mesa_WindowPos2iMESA(GLint x, GLint y)
3087117f1b4Smrg{
3097117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
3107117f1b4Smrg}
3117117f1b4Smrg
3124a49301eSmrgstatic void GLAPIENTRY
3137117f1b4Smrg_mesa_WindowPos2sMESA(GLshort x, GLshort y)
3147117f1b4Smrg{
3157117f1b4Smrg   window_pos4f(x, y, 0.0F, 1.0F);
3167117f1b4Smrg}
3177117f1b4Smrg
3184a49301eSmrgstatic void GLAPIENTRY
3197117f1b4Smrg_mesa_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
3207117f1b4Smrg{
3217117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
3227117f1b4Smrg}
3237117f1b4Smrg
3244a49301eSmrgstatic void GLAPIENTRY
3257117f1b4Smrg_mesa_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
3267117f1b4Smrg{
3277117f1b4Smrg   window_pos4f(x, y, z, 1.0F);
3287117f1b4Smrg}
3297117f1b4Smrg
3304a49301eSmrgstatic void GLAPIENTRY
3317117f1b4Smrg_mesa_WindowPos3iMESA(GLint x, GLint y, GLint z)
3327117f1b4Smrg{
3337117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
3347117f1b4Smrg}
3357117f1b4Smrg
3364a49301eSmrgstatic void GLAPIENTRY
3377117f1b4Smrg_mesa_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
3387117f1b4Smrg{
3397117f1b4Smrg   window_pos4f(x, y, z, 1.0F);
3407117f1b4Smrg}
3417117f1b4Smrg
3424a49301eSmrgstatic void GLAPIENTRY
3437117f1b4Smrg_mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
3447117f1b4Smrg{
3457117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
3467117f1b4Smrg}
3477117f1b4Smrg
3484a49301eSmrgstatic void GLAPIENTRY
3497117f1b4Smrg_mesa_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3507117f1b4Smrg{
3517117f1b4Smrg   window_pos4f(x, y, z, w);
3527117f1b4Smrg}
3537117f1b4Smrg
3544a49301eSmrgstatic void GLAPIENTRY
3557117f1b4Smrg_mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
3567117f1b4Smrg{
3577117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
3587117f1b4Smrg}
3597117f1b4Smrg
3604a49301eSmrgstatic void GLAPIENTRY
3617117f1b4Smrg_mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
3627117f1b4Smrg{
3637117f1b4Smrg   window_pos4f(x, y, z, w);
3647117f1b4Smrg}
3657117f1b4Smrg
3664a49301eSmrgstatic void GLAPIENTRY
3677117f1b4Smrg_mesa_WindowPos2dvMESA(const GLdouble *v)
3687117f1b4Smrg{
3697117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
3707117f1b4Smrg}
3717117f1b4Smrg
3724a49301eSmrgstatic void GLAPIENTRY
3737117f1b4Smrg_mesa_WindowPos2fvMESA(const GLfloat *v)
3747117f1b4Smrg{
3757117f1b4Smrg   window_pos4f(v[0], v[1], 0.0F, 1.0F);
3767117f1b4Smrg}
3777117f1b4Smrg
3784a49301eSmrgstatic void GLAPIENTRY
3797117f1b4Smrg_mesa_WindowPos2ivMESA(const GLint *v)
3807117f1b4Smrg{
3817117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
3827117f1b4Smrg}
3837117f1b4Smrg
3844a49301eSmrgstatic void GLAPIENTRY
3857117f1b4Smrg_mesa_WindowPos2svMESA(const GLshort *v)
3867117f1b4Smrg{
3877117f1b4Smrg   window_pos4f(v[0], v[1], 0.0F, 1.0F);
3887117f1b4Smrg}
3897117f1b4Smrg
3904a49301eSmrgstatic void GLAPIENTRY
3917117f1b4Smrg_mesa_WindowPos3dvMESA(const GLdouble *v)
3927117f1b4Smrg{
3937117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
3947117f1b4Smrg}
3957117f1b4Smrg
3964a49301eSmrgstatic void GLAPIENTRY
3977117f1b4Smrg_mesa_WindowPos3fvMESA(const GLfloat *v)
3987117f1b4Smrg{
3997117f1b4Smrg   window_pos4f(v[0], v[1], v[2], 1.0);
4007117f1b4Smrg}
4017117f1b4Smrg
4024a49301eSmrgstatic void GLAPIENTRY
4037117f1b4Smrg_mesa_WindowPos3ivMESA(const GLint *v)
4047117f1b4Smrg{
4057117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
4067117f1b4Smrg}
4077117f1b4Smrg
4084a49301eSmrgstatic void GLAPIENTRY
4097117f1b4Smrg_mesa_WindowPos3svMESA(const GLshort *v)
4107117f1b4Smrg{
4117117f1b4Smrg   window_pos4f(v[0], v[1], v[2], 1.0F);
4127117f1b4Smrg}
4137117f1b4Smrg
4144a49301eSmrgstatic void GLAPIENTRY
4157117f1b4Smrg_mesa_WindowPos4dvMESA(const GLdouble *v)
4167117f1b4Smrg{
4177117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1],
4187117f1b4Smrg			 (GLfloat) v[2], (GLfloat) v[3]);
4197117f1b4Smrg}
4207117f1b4Smrg
4214a49301eSmrgstatic void GLAPIENTRY
4227117f1b4Smrg_mesa_WindowPos4fvMESA(const GLfloat *v)
4237117f1b4Smrg{
4247117f1b4Smrg   window_pos4f(v[0], v[1], v[2], v[3]);
4257117f1b4Smrg}
4267117f1b4Smrg
4274a49301eSmrgstatic void GLAPIENTRY
4287117f1b4Smrg_mesa_WindowPos4ivMESA(const GLint *v)
4297117f1b4Smrg{
4307117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1],
4317117f1b4Smrg			 (GLfloat) v[2], (GLfloat) v[3]);
4327117f1b4Smrg}
4337117f1b4Smrg
4344a49301eSmrgstatic void GLAPIENTRY
4357117f1b4Smrg_mesa_WindowPos4svMESA(const GLshort *v)
4367117f1b4Smrg{
4377117f1b4Smrg   window_pos4f(v[0], v[1], v[2], v[3]);
4387117f1b4Smrg}
4397117f1b4Smrg
4407117f1b4Smrg
4417117f1b4Smrg#if 0
4427117f1b4Smrg
4437117f1b4Smrg/*
4447117f1b4Smrg * OpenGL implementation of glWindowPos*MESA()
4457117f1b4Smrg */
4467117f1b4Smrgvoid glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
4477117f1b4Smrg{
4487117f1b4Smrg   GLfloat fx, fy;
4497117f1b4Smrg
4507117f1b4Smrg   /* Push current matrix mode and viewport attributes */
4517117f1b4Smrg   glPushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT );
4527117f1b4Smrg
4537117f1b4Smrg   /* Setup projection parameters */
4547117f1b4Smrg   glMatrixMode( GL_PROJECTION );
4557117f1b4Smrg   glPushMatrix();
4567117f1b4Smrg   glLoadIdentity();
4577117f1b4Smrg   glMatrixMode( GL_MODELVIEW );
4587117f1b4Smrg   glPushMatrix();
4597117f1b4Smrg   glLoadIdentity();
4607117f1b4Smrg
4617117f1b4Smrg   glDepthRange( z, z );
4627117f1b4Smrg   glViewport( (int) x - 1, (int) y - 1, 2, 2 );
4637117f1b4Smrg
4647117f1b4Smrg   /* set the raster (window) position */
4657117f1b4Smrg   fx = x - (int) x;
4667117f1b4Smrg   fy = y - (int) y;
4677117f1b4Smrg   glRasterPos4f( fx, fy, 0.0, w );
4687117f1b4Smrg
4697117f1b4Smrg   /* restore matrices, viewport and matrix mode */
4707117f1b4Smrg   glPopMatrix();
4717117f1b4Smrg   glMatrixMode( GL_PROJECTION );
4727117f1b4Smrg   glPopMatrix();
4737117f1b4Smrg
4747117f1b4Smrg   glPopAttrib();
4757117f1b4Smrg}
4767117f1b4Smrg
4777117f1b4Smrg#endif
4787117f1b4Smrg
4797117f1b4Smrg
4804a49301eSmrgvoid
4814a49301eSmrg_mesa_init_rastpos_dispatch(struct _glapi_table *disp)
4824a49301eSmrg{
4834a49301eSmrg   SET_RasterPos2f(disp, _mesa_RasterPos2f);
4844a49301eSmrg   SET_RasterPos2fv(disp, _mesa_RasterPos2fv);
4854a49301eSmrg   SET_RasterPos2i(disp, _mesa_RasterPos2i);
4864a49301eSmrg   SET_RasterPos2iv(disp, _mesa_RasterPos2iv);
4874a49301eSmrg   SET_RasterPos2d(disp, _mesa_RasterPos2d);
4884a49301eSmrg   SET_RasterPos2dv(disp, _mesa_RasterPos2dv);
4894a49301eSmrg   SET_RasterPos2s(disp, _mesa_RasterPos2s);
4904a49301eSmrg   SET_RasterPos2sv(disp, _mesa_RasterPos2sv);
4914a49301eSmrg   SET_RasterPos3d(disp, _mesa_RasterPos3d);
4924a49301eSmrg   SET_RasterPos3dv(disp, _mesa_RasterPos3dv);
4934a49301eSmrg   SET_RasterPos3f(disp, _mesa_RasterPos3f);
4944a49301eSmrg   SET_RasterPos3fv(disp, _mesa_RasterPos3fv);
4954a49301eSmrg   SET_RasterPos3i(disp, _mesa_RasterPos3i);
4964a49301eSmrg   SET_RasterPos3iv(disp, _mesa_RasterPos3iv);
4974a49301eSmrg   SET_RasterPos3s(disp, _mesa_RasterPos3s);
4984a49301eSmrg   SET_RasterPos3sv(disp, _mesa_RasterPos3sv);
4994a49301eSmrg   SET_RasterPos4d(disp, _mesa_RasterPos4d);
5004a49301eSmrg   SET_RasterPos4dv(disp, _mesa_RasterPos4dv);
5014a49301eSmrg   SET_RasterPos4f(disp, _mesa_RasterPos4f);
5024a49301eSmrg   SET_RasterPos4fv(disp, _mesa_RasterPos4fv);
5034a49301eSmrg   SET_RasterPos4i(disp, _mesa_RasterPos4i);
5044a49301eSmrg   SET_RasterPos4iv(disp, _mesa_RasterPos4iv);
5054a49301eSmrg   SET_RasterPos4s(disp, _mesa_RasterPos4s);
5064a49301eSmrg   SET_RasterPos4sv(disp, _mesa_RasterPos4sv);
5074a49301eSmrg
5084a49301eSmrg   /* 197. GL_MESA_window_pos */
5094a49301eSmrg   SET_WindowPos2dMESA(disp, _mesa_WindowPos2dMESA);
5104a49301eSmrg   SET_WindowPos2dvMESA(disp, _mesa_WindowPos2dvMESA);
5114a49301eSmrg   SET_WindowPos2fMESA(disp, _mesa_WindowPos2fMESA);
5124a49301eSmrg   SET_WindowPos2fvMESA(disp, _mesa_WindowPos2fvMESA);
5134a49301eSmrg   SET_WindowPos2iMESA(disp, _mesa_WindowPos2iMESA);
5144a49301eSmrg   SET_WindowPos2ivMESA(disp, _mesa_WindowPos2ivMESA);
5154a49301eSmrg   SET_WindowPos2sMESA(disp, _mesa_WindowPos2sMESA);
5164a49301eSmrg   SET_WindowPos2svMESA(disp, _mesa_WindowPos2svMESA);
5174a49301eSmrg   SET_WindowPos3dMESA(disp, _mesa_WindowPos3dMESA);
5184a49301eSmrg   SET_WindowPos3dvMESA(disp, _mesa_WindowPos3dvMESA);
5194a49301eSmrg   SET_WindowPos3fMESA(disp, _mesa_WindowPos3fMESA);
5204a49301eSmrg   SET_WindowPos3fvMESA(disp, _mesa_WindowPos3fvMESA);
5214a49301eSmrg   SET_WindowPos3iMESA(disp, _mesa_WindowPos3iMESA);
5224a49301eSmrg   SET_WindowPos3ivMESA(disp, _mesa_WindowPos3ivMESA);
5234a49301eSmrg   SET_WindowPos3sMESA(disp, _mesa_WindowPos3sMESA);
5244a49301eSmrg   SET_WindowPos3svMESA(disp, _mesa_WindowPos3svMESA);
5254a49301eSmrg   SET_WindowPos4dMESA(disp, _mesa_WindowPos4dMESA);
5264a49301eSmrg   SET_WindowPos4dvMESA(disp, _mesa_WindowPos4dvMESA);
5274a49301eSmrg   SET_WindowPos4fMESA(disp, _mesa_WindowPos4fMESA);
5284a49301eSmrg   SET_WindowPos4fvMESA(disp, _mesa_WindowPos4fvMESA);
5294a49301eSmrg   SET_WindowPos4iMESA(disp, _mesa_WindowPos4iMESA);
5304a49301eSmrg   SET_WindowPos4ivMESA(disp, _mesa_WindowPos4ivMESA);
5314a49301eSmrg   SET_WindowPos4sMESA(disp, _mesa_WindowPos4sMESA);
5324a49301eSmrg   SET_WindowPos4svMESA(disp, _mesa_WindowPos4svMESA);
5334a49301eSmrg}
5344a49301eSmrg
5354a49301eSmrg
5364a49301eSmrg#endif /* FEATURE_rastpos */
5374a49301eSmrg
5384a49301eSmrg
5397117f1b4Smrg/**********************************************************************/
5407117f1b4Smrg/** \name Initialization                                              */
5417117f1b4Smrg/**********************************************************************/
5427117f1b4Smrg/*@{*/
5437117f1b4Smrg
5447117f1b4Smrg/**
5457117f1b4Smrg * Initialize the context current raster position information.
5467117f1b4Smrg *
5477117f1b4Smrg * \param ctx GL context.
5487117f1b4Smrg *
5497117f1b4Smrg * Initialize the current raster position information in
5503464ebd5Sriastradh * __struct gl_contextRec::Current, and adds the extension entry points to the
5517117f1b4Smrg * dispatcher.
5527117f1b4Smrg */
5533464ebd5Sriastradhvoid _mesa_init_rastpos( struct gl_context * ctx )
5547117f1b4Smrg{
5557117f1b4Smrg   int i;
5567117f1b4Smrg
5577117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterPos, 0.0, 0.0, 0.0, 1.0 );
5587117f1b4Smrg   ctx->Current.RasterDistance = 0.0;
5597117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 );
5607117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 1.0 );
561cdc920a0Smrg   for (i = 0; i < Elements(ctx->Current.RasterTexCoords); i++)
5627117f1b4Smrg      ASSIGN_4V( ctx->Current.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 );
5637117f1b4Smrg   ctx->Current.RasterPosValid = GL_TRUE;
5647117f1b4Smrg}
5657117f1b4Smrg
5667117f1b4Smrg/*@}*/
567