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