rastpos.c revision cdc920a0
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"
357117f1b4Smrg#include "rastpos.h"
367117f1b4Smrg#include "state.h"
37cdc920a0Smrg#include "main/dispatch.h"
384a49301eSmrg
394a49301eSmrg
404a49301eSmrg#if FEATURE_rastpos
417117f1b4Smrg
427117f1b4Smrg
437117f1b4Smrg/**
44c1f859d4Smrg * Helper function for all the RasterPos functions.
457117f1b4Smrg */
467117f1b4Smrgstatic void
47c1f859d4Smrgrasterpos(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
48c1f859d4Smrg{
49c1f859d4Smrg   GET_CURRENT_CONTEXT(ctx);
50c1f859d4Smrg   GLfloat p[4];
517117f1b4Smrg
52c1f859d4Smrg   p[0] = x;
53c1f859d4Smrg   p[1] = y;
54c1f859d4Smrg   p[2] = z;
55c1f859d4Smrg   p[3] = w;
567117f1b4Smrg
577117f1b4Smrg   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
587117f1b4Smrg   FLUSH_CURRENT(ctx, 0);
597117f1b4Smrg
607117f1b4Smrg   if (ctx->NewState)
617117f1b4Smrg      _mesa_update_state( ctx );
627117f1b4Smrg
63c1f859d4Smrg   ctx->Driver.RasterPos(ctx, p);
647117f1b4Smrg}
657117f1b4Smrg
667117f1b4Smrg
674a49301eSmrgstatic void GLAPIENTRY
687117f1b4Smrg_mesa_RasterPos2d(GLdouble x, GLdouble y)
697117f1b4Smrg{
70c1f859d4Smrg   rasterpos((GLfloat)x, (GLfloat)y, (GLfloat)0.0, (GLfloat)1.0);
717117f1b4Smrg}
727117f1b4Smrg
734a49301eSmrgstatic void GLAPIENTRY
747117f1b4Smrg_mesa_RasterPos2f(GLfloat x, GLfloat y)
757117f1b4Smrg{
76c1f859d4Smrg   rasterpos(x, y, 0.0F, 1.0F);
777117f1b4Smrg}
787117f1b4Smrg
794a49301eSmrgstatic void GLAPIENTRY
807117f1b4Smrg_mesa_RasterPos2i(GLint x, GLint y)
817117f1b4Smrg{
82c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
837117f1b4Smrg}
847117f1b4Smrg
854a49301eSmrgstatic void GLAPIENTRY
867117f1b4Smrg_mesa_RasterPos2s(GLshort x, GLshort y)
877117f1b4Smrg{
88c1f859d4Smrg   rasterpos(x, y, 0.0F, 1.0F);
897117f1b4Smrg}
907117f1b4Smrg
914a49301eSmrgstatic void GLAPIENTRY
927117f1b4Smrg_mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
937117f1b4Smrg{
94c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
957117f1b4Smrg}
967117f1b4Smrg
974a49301eSmrgstatic void GLAPIENTRY
987117f1b4Smrg_mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
997117f1b4Smrg{
100c1f859d4Smrg   rasterpos(x, y, z, 1.0F);
1017117f1b4Smrg}
1027117f1b4Smrg
1034a49301eSmrgstatic void GLAPIENTRY
1047117f1b4Smrg_mesa_RasterPos3i(GLint x, GLint y, GLint z)
1057117f1b4Smrg{
106c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
1077117f1b4Smrg}
1087117f1b4Smrg
1094a49301eSmrgstatic void GLAPIENTRY
1107117f1b4Smrg_mesa_RasterPos3s(GLshort x, GLshort y, GLshort z)
1117117f1b4Smrg{
112c1f859d4Smrg   rasterpos(x, y, z, 1.0F);
1137117f1b4Smrg}
1147117f1b4Smrg
1154a49301eSmrgstatic void GLAPIENTRY
1167117f1b4Smrg_mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1177117f1b4Smrg{
118c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1197117f1b4Smrg}
1207117f1b4Smrg
1214a49301eSmrgstatic void GLAPIENTRY
1227117f1b4Smrg_mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1237117f1b4Smrg{
124c1f859d4Smrg   rasterpos(x, y, z, w);
1257117f1b4Smrg}
1267117f1b4Smrg
1274a49301eSmrgstatic void GLAPIENTRY
1287117f1b4Smrg_mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
1297117f1b4Smrg{
130c1f859d4Smrg   rasterpos((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
1317117f1b4Smrg}
1327117f1b4Smrg
1334a49301eSmrgstatic void GLAPIENTRY
1347117f1b4Smrg_mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
1357117f1b4Smrg{
136c1f859d4Smrg   rasterpos(x, y, z, w);
1377117f1b4Smrg}
1387117f1b4Smrg
1394a49301eSmrgstatic void GLAPIENTRY
1407117f1b4Smrg_mesa_RasterPos2dv(const GLdouble *v)
1417117f1b4Smrg{
142c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1437117f1b4Smrg}
1447117f1b4Smrg
1454a49301eSmrgstatic void GLAPIENTRY
1467117f1b4Smrg_mesa_RasterPos2fv(const GLfloat *v)
1477117f1b4Smrg{
148c1f859d4Smrg   rasterpos(v[0], v[1], 0.0F, 1.0F);
1497117f1b4Smrg}
1507117f1b4Smrg
1514a49301eSmrgstatic void GLAPIENTRY
1527117f1b4Smrg_mesa_RasterPos2iv(const GLint *v)
1537117f1b4Smrg{
154c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
1557117f1b4Smrg}
1567117f1b4Smrg
1574a49301eSmrgstatic void GLAPIENTRY
1587117f1b4Smrg_mesa_RasterPos2sv(const GLshort *v)
1597117f1b4Smrg{
160c1f859d4Smrg   rasterpos(v[0], v[1], 0.0F, 1.0F);
1617117f1b4Smrg}
1627117f1b4Smrg
1634a49301eSmrgstatic void GLAPIENTRY
1647117f1b4Smrg_mesa_RasterPos3dv(const GLdouble *v)
1657117f1b4Smrg{
166c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1677117f1b4Smrg}
1687117f1b4Smrg
1694a49301eSmrgstatic void GLAPIENTRY
1707117f1b4Smrg_mesa_RasterPos3fv(const GLfloat *v)
1717117f1b4Smrg{
172c1f859d4Smrg   rasterpos(v[0], v[1], v[2], 1.0F);
1737117f1b4Smrg}
1747117f1b4Smrg
1754a49301eSmrgstatic void GLAPIENTRY
1767117f1b4Smrg_mesa_RasterPos3iv(const GLint *v)
1777117f1b4Smrg{
178c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
1797117f1b4Smrg}
1807117f1b4Smrg
1814a49301eSmrgstatic void GLAPIENTRY
1827117f1b4Smrg_mesa_RasterPos3sv(const GLshort *v)
1837117f1b4Smrg{
184c1f859d4Smrg   rasterpos(v[0], v[1], v[2], 1.0F);
1857117f1b4Smrg}
1867117f1b4Smrg
1874a49301eSmrgstatic void GLAPIENTRY
1887117f1b4Smrg_mesa_RasterPos4dv(const GLdouble *v)
1897117f1b4Smrg{
190c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1],
1917117f1b4Smrg		     (GLfloat) v[2], (GLfloat) v[3]);
1927117f1b4Smrg}
1937117f1b4Smrg
1944a49301eSmrgstatic void GLAPIENTRY
1957117f1b4Smrg_mesa_RasterPos4fv(const GLfloat *v)
1967117f1b4Smrg{
197c1f859d4Smrg   rasterpos(v[0], v[1], v[2], v[3]);
1987117f1b4Smrg}
1997117f1b4Smrg
2004a49301eSmrgstatic void GLAPIENTRY
2017117f1b4Smrg_mesa_RasterPos4iv(const GLint *v)
2027117f1b4Smrg{
203c1f859d4Smrg   rasterpos((GLfloat) v[0], (GLfloat) v[1],
2047117f1b4Smrg		     (GLfloat) v[2], (GLfloat) v[3]);
2057117f1b4Smrg}
2067117f1b4Smrg
2074a49301eSmrgstatic void GLAPIENTRY
2087117f1b4Smrg_mesa_RasterPos4sv(const GLshort *v)
2097117f1b4Smrg{
210c1f859d4Smrg   rasterpos(v[0], v[1], v[2], v[3]);
2117117f1b4Smrg}
2127117f1b4Smrg
2137117f1b4Smrg
2147117f1b4Smrg/**********************************************************************/
2157117f1b4Smrg/***           GL_ARB_window_pos / GL_MESA_window_pos               ***/
2167117f1b4Smrg/**********************************************************************/
2177117f1b4Smrg
2184a49301eSmrg
2197117f1b4Smrg/**
2207117f1b4Smrg * All glWindowPosMESA and glWindowPosARB commands call this function to
2217117f1b4Smrg * update the current raster position.
2227117f1b4Smrg */
2237117f1b4Smrgstatic void
2247117f1b4Smrgwindow_pos3f(GLfloat x, GLfloat y, GLfloat z)
2257117f1b4Smrg{
2267117f1b4Smrg   GET_CURRENT_CONTEXT(ctx);
2277117f1b4Smrg   GLfloat z2;
2287117f1b4Smrg
2297117f1b4Smrg   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
2307117f1b4Smrg   FLUSH_CURRENT(ctx, 0);
2317117f1b4Smrg
2327117f1b4Smrg   z2 = CLAMP(z, 0.0F, 1.0F) * (ctx->Viewport.Far - ctx->Viewport.Near)
2337117f1b4Smrg      + ctx->Viewport.Near;
2347117f1b4Smrg
2357117f1b4Smrg   /* set raster position */
2367117f1b4Smrg   ctx->Current.RasterPos[0] = x;
2377117f1b4Smrg   ctx->Current.RasterPos[1] = y;
2387117f1b4Smrg   ctx->Current.RasterPos[2] = z2;
2397117f1b4Smrg   ctx->Current.RasterPos[3] = 1.0F;
2407117f1b4Smrg
2417117f1b4Smrg   ctx->Current.RasterPosValid = GL_TRUE;
2427117f1b4Smrg
2437117f1b4Smrg   if (ctx->Fog.FogCoordinateSource == GL_FOG_COORDINATE_EXT)
2447117f1b4Smrg      ctx->Current.RasterDistance = ctx->Current.Attrib[VERT_ATTRIB_FOG][0];
2457117f1b4Smrg   else
2467117f1b4Smrg      ctx->Current.RasterDistance = 0.0;
2477117f1b4Smrg
2487117f1b4Smrg   /* raster color = current color or index */
249cdc920a0Smrg   ctx->Current.RasterColor[0]
250cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0], 0.0F, 1.0F);
251cdc920a0Smrg   ctx->Current.RasterColor[1]
252cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1], 0.0F, 1.0F);
253cdc920a0Smrg   ctx->Current.RasterColor[2]
254cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2], 0.0F, 1.0F);
255cdc920a0Smrg   ctx->Current.RasterColor[3]
256cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3], 0.0F, 1.0F);
257cdc920a0Smrg   ctx->Current.RasterSecondaryColor[0]
258cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][0], 0.0F, 1.0F);
259cdc920a0Smrg   ctx->Current.RasterSecondaryColor[1]
260cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][1], 0.0F, 1.0F);
261cdc920a0Smrg   ctx->Current.RasterSecondaryColor[2]
262cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][2], 0.0F, 1.0F);
263cdc920a0Smrg   ctx->Current.RasterSecondaryColor[3]
264cdc920a0Smrg      = CLAMP(ctx->Current.Attrib[VERT_ATTRIB_COLOR1][3], 0.0F, 1.0F);
2657117f1b4Smrg
2667117f1b4Smrg   /* raster texcoord = current texcoord */
2677117f1b4Smrg   {
2687117f1b4Smrg      GLuint texSet;
2697117f1b4Smrg      for (texSet = 0; texSet < ctx->Const.MaxTextureCoordUnits; texSet++) {
270cdc920a0Smrg         assert(texSet < Elements(ctx->Current.RasterTexCoords));
2717117f1b4Smrg         COPY_4FV( ctx->Current.RasterTexCoords[texSet],
2727117f1b4Smrg                  ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texSet] );
2737117f1b4Smrg      }
2747117f1b4Smrg   }
2757117f1b4Smrg
2767117f1b4Smrg   if (ctx->RenderMode==GL_SELECT) {
2777117f1b4Smrg      _mesa_update_hitflag( ctx, ctx->Current.RasterPos[2] );
2787117f1b4Smrg   }
2797117f1b4Smrg}
2807117f1b4Smrg
2817117f1b4Smrg
2827117f1b4Smrg/* This is just to support the GL_MESA_window_pos version */
2837117f1b4Smrgstatic void
2847117f1b4Smrgwindow_pos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
2857117f1b4Smrg{
2867117f1b4Smrg   GET_CURRENT_CONTEXT(ctx);
2877117f1b4Smrg   window_pos3f(x, y, z);
2887117f1b4Smrg   ctx->Current.RasterPos[3] = w;
2897117f1b4Smrg}
2907117f1b4Smrg
2917117f1b4Smrg
2924a49301eSmrgstatic void GLAPIENTRY
2937117f1b4Smrg_mesa_WindowPos2dMESA(GLdouble x, GLdouble y)
2947117f1b4Smrg{
2957117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
2967117f1b4Smrg}
2977117f1b4Smrg
2984a49301eSmrgstatic void GLAPIENTRY
2997117f1b4Smrg_mesa_WindowPos2fMESA(GLfloat x, GLfloat y)
3007117f1b4Smrg{
3017117f1b4Smrg   window_pos4f(x, y, 0.0F, 1.0F);
3027117f1b4Smrg}
3037117f1b4Smrg
3044a49301eSmrgstatic void GLAPIENTRY
3057117f1b4Smrg_mesa_WindowPos2iMESA(GLint x, GLint y)
3067117f1b4Smrg{
3077117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
3087117f1b4Smrg}
3097117f1b4Smrg
3104a49301eSmrgstatic void GLAPIENTRY
3117117f1b4Smrg_mesa_WindowPos2sMESA(GLshort x, GLshort y)
3127117f1b4Smrg{
3137117f1b4Smrg   window_pos4f(x, y, 0.0F, 1.0F);
3147117f1b4Smrg}
3157117f1b4Smrg
3164a49301eSmrgstatic void GLAPIENTRY
3177117f1b4Smrg_mesa_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
3187117f1b4Smrg{
3197117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
3207117f1b4Smrg}
3217117f1b4Smrg
3224a49301eSmrgstatic void GLAPIENTRY
3237117f1b4Smrg_mesa_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
3247117f1b4Smrg{
3257117f1b4Smrg   window_pos4f(x, y, z, 1.0F);
3267117f1b4Smrg}
3277117f1b4Smrg
3284a49301eSmrgstatic void GLAPIENTRY
3297117f1b4Smrg_mesa_WindowPos3iMESA(GLint x, GLint y, GLint z)
3307117f1b4Smrg{
3317117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
3327117f1b4Smrg}
3337117f1b4Smrg
3344a49301eSmrgstatic void GLAPIENTRY
3357117f1b4Smrg_mesa_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
3367117f1b4Smrg{
3377117f1b4Smrg   window_pos4f(x, y, z, 1.0F);
3387117f1b4Smrg}
3397117f1b4Smrg
3404a49301eSmrgstatic void GLAPIENTRY
3417117f1b4Smrg_mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
3427117f1b4Smrg{
3437117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
3447117f1b4Smrg}
3457117f1b4Smrg
3464a49301eSmrgstatic void GLAPIENTRY
3477117f1b4Smrg_mesa_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3487117f1b4Smrg{
3497117f1b4Smrg   window_pos4f(x, y, z, w);
3507117f1b4Smrg}
3517117f1b4Smrg
3524a49301eSmrgstatic void GLAPIENTRY
3537117f1b4Smrg_mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
3547117f1b4Smrg{
3557117f1b4Smrg   window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
3567117f1b4Smrg}
3577117f1b4Smrg
3584a49301eSmrgstatic void GLAPIENTRY
3597117f1b4Smrg_mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
3607117f1b4Smrg{
3617117f1b4Smrg   window_pos4f(x, y, z, w);
3627117f1b4Smrg}
3637117f1b4Smrg
3644a49301eSmrgstatic void GLAPIENTRY
3657117f1b4Smrg_mesa_WindowPos2dvMESA(const GLdouble *v)
3667117f1b4Smrg{
3677117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
3687117f1b4Smrg}
3697117f1b4Smrg
3704a49301eSmrgstatic void GLAPIENTRY
3717117f1b4Smrg_mesa_WindowPos2fvMESA(const GLfloat *v)
3727117f1b4Smrg{
3737117f1b4Smrg   window_pos4f(v[0], v[1], 0.0F, 1.0F);
3747117f1b4Smrg}
3757117f1b4Smrg
3764a49301eSmrgstatic void GLAPIENTRY
3777117f1b4Smrg_mesa_WindowPos2ivMESA(const GLint *v)
3787117f1b4Smrg{
3797117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
3807117f1b4Smrg}
3817117f1b4Smrg
3824a49301eSmrgstatic void GLAPIENTRY
3837117f1b4Smrg_mesa_WindowPos2svMESA(const GLshort *v)
3847117f1b4Smrg{
3857117f1b4Smrg   window_pos4f(v[0], v[1], 0.0F, 1.0F);
3867117f1b4Smrg}
3877117f1b4Smrg
3884a49301eSmrgstatic void GLAPIENTRY
3897117f1b4Smrg_mesa_WindowPos3dvMESA(const GLdouble *v)
3907117f1b4Smrg{
3917117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
3927117f1b4Smrg}
3937117f1b4Smrg
3944a49301eSmrgstatic void GLAPIENTRY
3957117f1b4Smrg_mesa_WindowPos3fvMESA(const GLfloat *v)
3967117f1b4Smrg{
3977117f1b4Smrg   window_pos4f(v[0], v[1], v[2], 1.0);
3987117f1b4Smrg}
3997117f1b4Smrg
4004a49301eSmrgstatic void GLAPIENTRY
4017117f1b4Smrg_mesa_WindowPos3ivMESA(const GLint *v)
4027117f1b4Smrg{
4037117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
4047117f1b4Smrg}
4057117f1b4Smrg
4064a49301eSmrgstatic void GLAPIENTRY
4077117f1b4Smrg_mesa_WindowPos3svMESA(const GLshort *v)
4087117f1b4Smrg{
4097117f1b4Smrg   window_pos4f(v[0], v[1], v[2], 1.0F);
4107117f1b4Smrg}
4117117f1b4Smrg
4124a49301eSmrgstatic void GLAPIENTRY
4137117f1b4Smrg_mesa_WindowPos4dvMESA(const GLdouble *v)
4147117f1b4Smrg{
4157117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1],
4167117f1b4Smrg			 (GLfloat) v[2], (GLfloat) v[3]);
4177117f1b4Smrg}
4187117f1b4Smrg
4194a49301eSmrgstatic void GLAPIENTRY
4207117f1b4Smrg_mesa_WindowPos4fvMESA(const GLfloat *v)
4217117f1b4Smrg{
4227117f1b4Smrg   window_pos4f(v[0], v[1], v[2], v[3]);
4237117f1b4Smrg}
4247117f1b4Smrg
4254a49301eSmrgstatic void GLAPIENTRY
4267117f1b4Smrg_mesa_WindowPos4ivMESA(const GLint *v)
4277117f1b4Smrg{
4287117f1b4Smrg   window_pos4f((GLfloat) v[0], (GLfloat) v[1],
4297117f1b4Smrg			 (GLfloat) v[2], (GLfloat) v[3]);
4307117f1b4Smrg}
4317117f1b4Smrg
4324a49301eSmrgstatic void GLAPIENTRY
4337117f1b4Smrg_mesa_WindowPos4svMESA(const GLshort *v)
4347117f1b4Smrg{
4357117f1b4Smrg   window_pos4f(v[0], v[1], v[2], v[3]);
4367117f1b4Smrg}
4377117f1b4Smrg
4387117f1b4Smrg
4397117f1b4Smrg#if 0
4407117f1b4Smrg
4417117f1b4Smrg/*
4427117f1b4Smrg * OpenGL implementation of glWindowPos*MESA()
4437117f1b4Smrg */
4447117f1b4Smrgvoid glWindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
4457117f1b4Smrg{
4467117f1b4Smrg   GLfloat fx, fy;
4477117f1b4Smrg
4487117f1b4Smrg   /* Push current matrix mode and viewport attributes */
4497117f1b4Smrg   glPushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT );
4507117f1b4Smrg
4517117f1b4Smrg   /* Setup projection parameters */
4527117f1b4Smrg   glMatrixMode( GL_PROJECTION );
4537117f1b4Smrg   glPushMatrix();
4547117f1b4Smrg   glLoadIdentity();
4557117f1b4Smrg   glMatrixMode( GL_MODELVIEW );
4567117f1b4Smrg   glPushMatrix();
4577117f1b4Smrg   glLoadIdentity();
4587117f1b4Smrg
4597117f1b4Smrg   glDepthRange( z, z );
4607117f1b4Smrg   glViewport( (int) x - 1, (int) y - 1, 2, 2 );
4617117f1b4Smrg
4627117f1b4Smrg   /* set the raster (window) position */
4637117f1b4Smrg   fx = x - (int) x;
4647117f1b4Smrg   fy = y - (int) y;
4657117f1b4Smrg   glRasterPos4f( fx, fy, 0.0, w );
4667117f1b4Smrg
4677117f1b4Smrg   /* restore matrices, viewport and matrix mode */
4687117f1b4Smrg   glPopMatrix();
4697117f1b4Smrg   glMatrixMode( GL_PROJECTION );
4707117f1b4Smrg   glPopMatrix();
4717117f1b4Smrg
4727117f1b4Smrg   glPopAttrib();
4737117f1b4Smrg}
4747117f1b4Smrg
4757117f1b4Smrg#endif
4767117f1b4Smrg
4777117f1b4Smrg
4784a49301eSmrgvoid
4794a49301eSmrg_mesa_init_rastpos_dispatch(struct _glapi_table *disp)
4804a49301eSmrg{
4814a49301eSmrg   SET_RasterPos2f(disp, _mesa_RasterPos2f);
4824a49301eSmrg   SET_RasterPos2fv(disp, _mesa_RasterPos2fv);
4834a49301eSmrg   SET_RasterPos2i(disp, _mesa_RasterPos2i);
4844a49301eSmrg   SET_RasterPos2iv(disp, _mesa_RasterPos2iv);
4854a49301eSmrg   SET_RasterPos2d(disp, _mesa_RasterPos2d);
4864a49301eSmrg   SET_RasterPos2dv(disp, _mesa_RasterPos2dv);
4874a49301eSmrg   SET_RasterPos2s(disp, _mesa_RasterPos2s);
4884a49301eSmrg   SET_RasterPos2sv(disp, _mesa_RasterPos2sv);
4894a49301eSmrg   SET_RasterPos3d(disp, _mesa_RasterPos3d);
4904a49301eSmrg   SET_RasterPos3dv(disp, _mesa_RasterPos3dv);
4914a49301eSmrg   SET_RasterPos3f(disp, _mesa_RasterPos3f);
4924a49301eSmrg   SET_RasterPos3fv(disp, _mesa_RasterPos3fv);
4934a49301eSmrg   SET_RasterPos3i(disp, _mesa_RasterPos3i);
4944a49301eSmrg   SET_RasterPos3iv(disp, _mesa_RasterPos3iv);
4954a49301eSmrg   SET_RasterPos3s(disp, _mesa_RasterPos3s);
4964a49301eSmrg   SET_RasterPos3sv(disp, _mesa_RasterPos3sv);
4974a49301eSmrg   SET_RasterPos4d(disp, _mesa_RasterPos4d);
4984a49301eSmrg   SET_RasterPos4dv(disp, _mesa_RasterPos4dv);
4994a49301eSmrg   SET_RasterPos4f(disp, _mesa_RasterPos4f);
5004a49301eSmrg   SET_RasterPos4fv(disp, _mesa_RasterPos4fv);
5014a49301eSmrg   SET_RasterPos4i(disp, _mesa_RasterPos4i);
5024a49301eSmrg   SET_RasterPos4iv(disp, _mesa_RasterPos4iv);
5034a49301eSmrg   SET_RasterPos4s(disp, _mesa_RasterPos4s);
5044a49301eSmrg   SET_RasterPos4sv(disp, _mesa_RasterPos4sv);
5054a49301eSmrg
5064a49301eSmrg   /* 197. GL_MESA_window_pos */
5074a49301eSmrg   SET_WindowPos2dMESA(disp, _mesa_WindowPos2dMESA);
5084a49301eSmrg   SET_WindowPos2dvMESA(disp, _mesa_WindowPos2dvMESA);
5094a49301eSmrg   SET_WindowPos2fMESA(disp, _mesa_WindowPos2fMESA);
5104a49301eSmrg   SET_WindowPos2fvMESA(disp, _mesa_WindowPos2fvMESA);
5114a49301eSmrg   SET_WindowPos2iMESA(disp, _mesa_WindowPos2iMESA);
5124a49301eSmrg   SET_WindowPos2ivMESA(disp, _mesa_WindowPos2ivMESA);
5134a49301eSmrg   SET_WindowPos2sMESA(disp, _mesa_WindowPos2sMESA);
5144a49301eSmrg   SET_WindowPos2svMESA(disp, _mesa_WindowPos2svMESA);
5154a49301eSmrg   SET_WindowPos3dMESA(disp, _mesa_WindowPos3dMESA);
5164a49301eSmrg   SET_WindowPos3dvMESA(disp, _mesa_WindowPos3dvMESA);
5174a49301eSmrg   SET_WindowPos3fMESA(disp, _mesa_WindowPos3fMESA);
5184a49301eSmrg   SET_WindowPos3fvMESA(disp, _mesa_WindowPos3fvMESA);
5194a49301eSmrg   SET_WindowPos3iMESA(disp, _mesa_WindowPos3iMESA);
5204a49301eSmrg   SET_WindowPos3ivMESA(disp, _mesa_WindowPos3ivMESA);
5214a49301eSmrg   SET_WindowPos3sMESA(disp, _mesa_WindowPos3sMESA);
5224a49301eSmrg   SET_WindowPos3svMESA(disp, _mesa_WindowPos3svMESA);
5234a49301eSmrg   SET_WindowPos4dMESA(disp, _mesa_WindowPos4dMESA);
5244a49301eSmrg   SET_WindowPos4dvMESA(disp, _mesa_WindowPos4dvMESA);
5254a49301eSmrg   SET_WindowPos4fMESA(disp, _mesa_WindowPos4fMESA);
5264a49301eSmrg   SET_WindowPos4fvMESA(disp, _mesa_WindowPos4fvMESA);
5274a49301eSmrg   SET_WindowPos4iMESA(disp, _mesa_WindowPos4iMESA);
5284a49301eSmrg   SET_WindowPos4ivMESA(disp, _mesa_WindowPos4ivMESA);
5294a49301eSmrg   SET_WindowPos4sMESA(disp, _mesa_WindowPos4sMESA);
5304a49301eSmrg   SET_WindowPos4svMESA(disp, _mesa_WindowPos4svMESA);
5314a49301eSmrg}
5324a49301eSmrg
5334a49301eSmrg
5344a49301eSmrg#endif /* FEATURE_rastpos */
5354a49301eSmrg
5364a49301eSmrg
5377117f1b4Smrg/**********************************************************************/
5387117f1b4Smrg/** \name Initialization                                              */
5397117f1b4Smrg/**********************************************************************/
5407117f1b4Smrg/*@{*/
5417117f1b4Smrg
5427117f1b4Smrg/**
5437117f1b4Smrg * Initialize the context current raster position information.
5447117f1b4Smrg *
5457117f1b4Smrg * \param ctx GL context.
5467117f1b4Smrg *
5477117f1b4Smrg * Initialize the current raster position information in
5487117f1b4Smrg * __GLcontextRec::Current, and adds the extension entry points to the
5497117f1b4Smrg * dispatcher.
5507117f1b4Smrg */
5517117f1b4Smrgvoid _mesa_init_rastpos( GLcontext * ctx )
5527117f1b4Smrg{
5537117f1b4Smrg   int i;
5547117f1b4Smrg
5557117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterPos, 0.0, 0.0, 0.0, 1.0 );
5567117f1b4Smrg   ctx->Current.RasterDistance = 0.0;
5577117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterColor, 1.0, 1.0, 1.0, 1.0 );
5587117f1b4Smrg   ASSIGN_4V( ctx->Current.RasterSecondaryColor, 0.0, 0.0, 0.0, 1.0 );
559cdc920a0Smrg   for (i = 0; i < Elements(ctx->Current.RasterTexCoords); i++)
5607117f1b4Smrg      ASSIGN_4V( ctx->Current.RasterTexCoords[i], 0.0, 0.0, 0.0, 1.0 );
5617117f1b4Smrg   ctx->Current.RasterPosValid = GL_TRUE;
5627117f1b4Smrg}
5637117f1b4Smrg
5647117f1b4Smrg/*@}*/
565