1f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 2f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul/* 3f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Mesa 3-D graphics library 422144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 59a33a11d714c90162d32781ebbd2c1dfab52cfd1Brian Paul * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 7f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 8f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * copy of this software and associated documentation files (the "Software"), 9f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * to deal in the Software without restriction, including without limitation 10f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 12f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * Software is furnished to do so, subject to the following conditions: 1322144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 14f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * The above copyright notice and this permission notice shall be included 15f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * in all copies or substantial portions of the Software. 1622144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes * 17f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 213d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 223d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 233d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * 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); 40f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 41f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul if (MESA_VERBOSE & VERBOSE_API) 422634e92dc0cecc364984bef9169a91bb96bafdcdBrian Paul _mesa_debug(ctx, "glHint %s %s\n", 432f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke _mesa_enum_to_string(target), 442f11e92cef51c88a09bc778e2ceca4ab50cf0017Kenneth Graunke _mesa_enum_to_string(mode)); 45f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul 4639c897780276f80c2df82ada6c711b8d4d744391Brian Paul if (mode != GL_NICEST && mode != GL_FASTEST && mode != GL_DONT_CARE) { 4708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHint(mode)"); 484753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 49f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul } 5039c897780276f80c2df82ada6c711b8d4d744391Brian Paul 5139c897780276f80c2df82ada6c711b8d4d744391Brian Paul switch (target) { 5239c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_FOG_HINT: 53dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) 54bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 55cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.Fog == mode) 564753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 57cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 5839c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.Fog = mode; 5939c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6039c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_LINE_SMOOTH_HINT: 61bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) 62bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 63cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.LineSmooth == mode) 644753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 65cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 6639c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.LineSmooth = mode; 6739c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 6839c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_PERSPECTIVE_CORRECTION_HINT: 69dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) 70bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 71cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PerspectiveCorrection == mode) 724753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 73cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 7439c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PerspectiveCorrection = mode; 7539c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 7639c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POINT_SMOOTH_HINT: 77dbd6135bc1ba285128ab991c03c4df6fbd6fefe8Paul Berry if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) 78bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 79cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PointSmooth == mode) 804753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 81cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 8239c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PointSmooth = mode; 8339c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 8439c897780276f80c2df82ada6c711b8d4d744391Brian Paul case GL_POLYGON_SMOOTH_HINT: 85bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx)) 86bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 87cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.PolygonSmooth == mode) 884753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 89cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 9039c897780276f80c2df82ada6c711b8d4d744391Brian Paul ctx->Hint.PolygonSmooth = mode; 9139c897780276f80c2df82ada6c711b8d4d744391Brian Paul break; 9239c897780276f80c2df82ada6c711b8d4d744391Brian Paul 931207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul /* GL_ARB_texture_compression */ 941207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul case GL_TEXTURE_COMPRESSION_HINT_ARB: 95bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (!_mesa_is_desktop_gl(ctx)) 96bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 97cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->Hint.TextureCompression == mode) 984753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 99cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_HINT); 100cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ctx->Hint.TextureCompression = mode; 1011207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul break; 1021207bf057aeea3376e5e0f03f789a5d67ed4d29dBrian Paul 1033893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul /* GL_SGIS_generate_mipmap */ 1043893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul case GL_GENERATE_MIPMAP_HINT_SGIS: 105bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API == API_OPENGL_CORE) 106bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 1073893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul if (ctx->Hint.GenerateMipmap == mode) 1084753d60dd070bb08d0116076bcc08025c86ce857Brian Paul return; 1093893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul FLUSH_VERTICES(ctx, _NEW_HINT); 1103893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul ctx->Hint.GenerateMipmap = mode; 111180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen break; 112180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen 113180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen /* GL_ARB_fragment_shader */ 114180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: 115bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick if (ctx->API == API_OPENGLES || !ctx->Extensions.ARB_fragment_shader) 116bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 117180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen if (ctx->Hint.FragmentShaderDerivative == mode) 118180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen return; 119180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen FLUSH_VERTICES(ctx, _NEW_HINT); 120180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.FragmentShaderDerivative = mode; 1213893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul break; 1223893e638e6521b9c070e01c0b31d22754ff97a88Brian Paul 12339c897780276f80c2df82ada6c711b8d4d744391Brian Paul default: 124bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick goto invalid_target; 12539c897780276f80c2df82ada6c711b8d4d744391Brian Paul } 126bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick return; 127bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick 128bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanickinvalid_target: 129bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); 130bca2cece02385a14f61d5dd8d31aba775b0afb8eIan Romanick return; 131f2dce7216766ff8753d730b9b5aa6ac63e8cb0c7Brian Paul} 1326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/***** Initialization *****/ 1366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 1376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 138f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergvoid _mesa_init_hint( struct gl_context * ctx ) 1396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 1406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /* Hint group */ 1416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PerspectiveCorrection = GL_DONT_CARE; 1426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PointSmooth = GL_DONT_CARE; 1436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.LineSmooth = GL_DONT_CARE; 1446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.PolygonSmooth = GL_DONT_CARE; 1456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.Fog = GL_DONT_CARE; 1466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Hint.TextureCompression = GL_DONT_CARE; 147180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen ctx->Hint.GenerateMipmap = GL_DONT_CARE; 1488c01903114c770e735b66e343302d9d9f122d22eMichal Krol ctx->Hint.FragmentShaderDerivative = GL_DONT_CARE; 1496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 150