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" 320117da40cd7edd3d165bb28569c289b37eca12b9Vinson Lee#include "mtypes.h" 33f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 34f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 35f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 36c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 37f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul_mesa_Hint( GLenum target, GLenum mode ) 38f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul{ 39f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul GET_CURRENT_CONTEXT(ctx); 40cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 41f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 42f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul if (MESA_VERBOSE & VERBOSE_API) 432634e92dc0cecc364984bef9169a91bb96bafdcdBrian Paul _mesa_debug(ctx, "glHint %s %s\n", 442634e92dc0cecc364984bef9169a91bb96bafdcdBrian Paul _mesa_lookup_enum_by_nr(target), 452634e92dc0cecc364984bef9169a91bb96bafdcdBrian Paul _mesa_lookup_enum_by_nr(mode)); 46f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 4739c897780276f80c2df82ada6c711b8d4d744391Brian Paul if (mode != GL_NICEST && mode != GL_FASTEST && mode != GL_DONT_CARE) { 4808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(mode)"); 494753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 50f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul } 5139c897780276f80c2df82ada6c711b8d4d744391Brian Paul 5239c897780276f80c2df82ada6c711b8d4d744391Brian Paul switch (target) { 5339c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_FOG_HINT: 54bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 55bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 56cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.Fog == mode) 574753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 58cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 5939c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.Fog = mode; 6039c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6139c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_LINE_SMOOTH_HINT: 62bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 63bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 64cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.LineSmooth == mode) 654753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 66cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 6739c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.LineSmooth = mode; 6839c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6939c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_PERSPECTIVE_CORRECTION_HINT: 70bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 71bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 72cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PerspectiveCorrection == mode) 734753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 74cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 7539c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PerspectiveCorrection = mode; 7639c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 7739c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POINT_SMOOTH_HINT: 78bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) 79bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 80cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PointSmooth == mode) 814753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 82cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 8339c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PointSmooth = mode; 8439c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 8539c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POLYGON_SMOOTH_HINT: 86bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx)) 87bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 88cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PolygonSmooth == mode) 894753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 90cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 9139c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PolygonSmooth = mode; 9239c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 9339c897780276f80c2df82ada6c711b8d4d744391Brian Paul 941207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul /* GL_EXT_clip_volume_hint */ 9539c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_CLIP_VOLUME_CLIPPING_HINT_EXT: 96bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API != API_OPENGL) 97bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 98cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.ClipVolumeClipping == mode) 994753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 100cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 10139c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.ClipVolumeClipping = mode; 10239c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 10339c897780276f80c2df82ada6c711b8d4d744391Brian Paul 1041207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul /* GL_ARB_texture_compression */ 1051207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul case GL_TEXTURE_COMPRESSION_HINT_ARB: 106bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx)) 107bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 108cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.TextureCompression == mode) 1094753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 110cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 111cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Hint.TextureCompression = mode; 1121207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul break; 1131207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul 1143893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul /* GL_SGIS_generate_mipmap */ 1153893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul case GL_GENERATE_MIPMAP_HINT_SGIS: 116bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API == API_OPENGL_CORE) 117bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 1183893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul if (ctx->Hint.GenerateMipmap == mode) 1194753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 1203893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul FLUSH_VERTICES(ctx, _NEW_HINT); 1213893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul ctx->Hint.GenerateMipmap = mode; 122180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen break; 123180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen 124180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen /* GL_ARB_fragment_shader */ 125180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: 126bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API == API_OPENGLES || !ctx->Extensions.ARB_fragment_shader) 127bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 128180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen if (ctx->Hint.FragmentShaderDerivative == mode) 129180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen return; 130180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen FLUSH_VERTICES(ctx, _NEW_HINT); 131180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.FragmentShaderDerivative = mode; 1323893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul break; 1333893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul 13439c897780276f80c2df82ada6c711b8d4d744391Brian Paul default: 135bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 13639c897780276f80c2df82ada6c711b8d4d744391Brian Paul } 13739c897780276f80c2df82ada6c711b8d4d744391Brian Paul 138f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul if (ctx->Driver.Hint) { 139f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul (*ctx->Driver.Hint)( ctx, target, mode ); 140f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul } 141bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick 142bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick return; 143bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick 144bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanickinvalid_target: 145bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 146bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick return; 147f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul} 1486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/***** Initialization *****/ 1526dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 154f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid _mesa_init_hint( struct gl_context * ctx ) 1556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 1566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /* Hint group */ 1576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PerspectiveCorrection = GL_DONT_CARE; 1586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PointSmooth = GL_DONT_CARE; 1596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.LineSmooth = GL_DONT_CARE; 1606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PolygonSmooth = GL_DONT_CARE; 1616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.Fog = GL_DONT_CARE; 1626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.ClipVolumeClipping = GL_DONT_CARE; 1636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.TextureCompression = GL_DONT_CARE; 164180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.GenerateMipmap = GL_DONT_CARE; 1658c01903114c770e735b66e343302d9d9f122d22eMichal Krol ctx->Hint.FragmentShaderDerivative = GL_DONT_CARE; 1666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 167