hint.c revision 180b0dab8b87ef7987b9f2c44068d1eea3f54939
1f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 2f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul/* 3f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Mesa 3-D graphics library 49a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul * Version: 4.1 522144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 69a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 722144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 8f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 9f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * copy of this software and associated documentation files (the "Software"), 10f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * to deal in the Software without restriction, including without limitation 11f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 13f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Software is furnished to do so, subject to the following conditions: 1422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 15f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * The above copyright notice and this permission notice shall be included 16f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * in all copies or substantial portions of the Software. 1722144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 18f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul */ 25f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 26f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 27f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul#include "glheader.h" 28f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul#include "enums.h" 29f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul#include "context.h" 30f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul#include "hint.h" 313c63452e64df7e10aa073c6c3b9492b1d7dabbb8Brian Paul#include "imports.h" 32f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 33f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 34f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 35c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 36f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul_mesa_Hint( GLenum target, GLenum mode ) 37f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul{ 38f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul GET_CURRENT_CONTEXT(ctx); 39cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 40f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 41f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul if (MESA_VERBOSE & VERBOSE_API) 429d47f3d6b8e8054602a637fad70d4769427df8b4Brian Paul _mesa_debug(ctx, "glHint %s %d\n", 439d47f3d6b8e8054602a637fad70d4769427df8b4Brian Paul _mesa_lookup_enum_by_nr(target), mode); 44f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 4539c897780276f80c2df82ada6c711b8d4d744391Brian Paul if (mode != GL_NICEST && mode != GL_FASTEST && mode != GL_DONT_CARE) { 4608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(mode)"); 474753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 48f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul } 4939c897780276f80c2df82ada6c711b8d4d744391Brian Paul 5039c897780276f80c2df82ada6c711b8d4d744391Brian Paul switch (target) { 5139c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_FOG_HINT: 52cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.Fog == mode) 534753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 54cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 5539c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.Fog = mode; 5639c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 5739c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_LINE_SMOOTH_HINT: 58cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.LineSmooth == mode) 594753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 60cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 6139c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.LineSmooth = mode; 6239c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6339c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_PERSPECTIVE_CORRECTION_HINT: 64cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PerspectiveCorrection == mode) 654753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 66cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 6739c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PerspectiveCorrection = mode; 6839c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6939c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POINT_SMOOTH_HINT: 70cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PointSmooth == mode) 714753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 72cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 7339c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PointSmooth = mode; 7439c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 7539c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POLYGON_SMOOTH_HINT: 76cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PolygonSmooth == mode) 774753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 78cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 7939c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PolygonSmooth = mode; 8039c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 8139c897780276f80c2df82ada6c711b8d4d744391Brian Paul 821207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul /* GL_EXT_clip_volume_hint */ 8339c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_CLIP_VOLUME_CLIPPING_HINT_EXT: 84cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.ClipVolumeClipping == mode) 854753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 86cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 8739c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.ClipVolumeClipping = mode; 8839c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 8939c897780276f80c2df82ada6c711b8d4d744391Brian Paul 901207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul /* GL_ARB_texture_compression */ 911207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul case GL_TEXTURE_COMPRESSION_HINT_ARB: 923893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul if (!ctx->Extensions.ARB_texture_compression) { 9308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 944753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 951207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul } 96cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.TextureCompression == mode) 974753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 98cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 99cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Hint.TextureCompression = mode; 1001207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul break; 1011207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul 1023893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul /* GL_SGIS_generate_mipmap */ 1033893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul case GL_GENERATE_MIPMAP_HINT_SGIS: 1043893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul if (!ctx->Extensions.SGIS_generate_mipmap) { 1053893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 1064753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 1073893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul } 1083893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul if (ctx->Hint.GenerateMipmap == mode) 1094753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 1103893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul FLUSH_VERTICES(ctx, _NEW_HINT); 1113893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul ctx->Hint.GenerateMipmap = mode; 112180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen break; 113180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen 114180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen /* GL_ARB_fragment_shader */ 115180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: 116180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen if (!ctx->Extensions.ARB_fragment_shader) { 117180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 118180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen return; 119180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen } 120180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen if (ctx->Hint.FragmentShaderDerivative == mode) 121180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen return; 122180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen FLUSH_VERTICES(ctx, _NEW_HINT); 123180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.FragmentShaderDerivative = mode; 1243893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul break; 1253893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul 12639c897780276f80c2df82ada6c711b8d4d744391Brian Paul default: 12708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 1284753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 12939c897780276f80c2df82ada6c711b8d4d744391Brian Paul } 13039c897780276f80c2df82ada6c711b8d4d744391Brian Paul 131f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul if (ctx->Driver.Hint) { 132f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul (*ctx->Driver.Hint)( ctx, target, mode ); 133f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul } 134f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul} 1356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/***** Initialization *****/ 1396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellvoid _mesa_init_hint( GLcontext * ctx ) 1426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 1436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /* Hint group */ 1446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PerspectiveCorrection = GL_DONT_CARE; 1456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PointSmooth = GL_DONT_CARE; 1466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.LineSmooth = GL_DONT_CARE; 1476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PolygonSmooth = GL_DONT_CARE; 1486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.Fog = GL_DONT_CARE; 1496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.ClipVolumeClipping = GL_DONT_CARE; 1506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.TextureCompression = GL_DONT_CARE; 151180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.GenerateMipmap = GL_DONT_CARE; 1528c01903114c770e735b66e343302d9d9f122d22eMichal Krol ctx->Hint.FragmentShaderDerivative = GL_DONT_CARE; 1536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 154