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