X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fpolygon.c;h=611cef65353a57275a6897d8520eff76b3f2f099;hb=9d2e298dd4159651323cac54dbc43527e7fd6d16;hp=376a87a396770a8996980b27cd48d9dda9004d4b;hpb=95027a00870bc1d12ea24dfb092a0cad6cbd5035;p=mesa.git diff --git a/src/mesa/main/polygon.c b/src/mesa/main/polygon.c index 376a87a3967..611cef65353 100644 --- a/src/mesa/main/polygon.c +++ b/src/mesa/main/polygon.c @@ -5,7 +5,6 @@ /* * Mesa 3-D graphics library - * Version: 6.5.1 * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * @@ -22,19 +21,20 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. */ #include "glheader.h" #include "imports.h" -#include "bufferobj.h" #include "context.h" #include "image.h" #include "enums.h" -#include "macros.h" +#include "pack.h" +#include "pbo.h" #include "polygon.h" #include "mtypes.h" @@ -54,7 +54,6 @@ void GLAPIENTRY _mesa_CullFace( GLenum mode ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glCullFace %s\n", _mesa_lookup_enum_by_nr(mode)); @@ -90,7 +89,6 @@ void GLAPIENTRY _mesa_FrontFace( GLenum mode ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glFrontFace %s\n", _mesa_lookup_enum_by_nr(mode)); @@ -129,7 +127,6 @@ void GLAPIENTRY _mesa_PolygonMode( GLenum face, GLenum mode ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glPolygonMode %s %s\n", @@ -143,6 +140,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) switch (face) { case GL_FRONT: + if (ctx->API == API_OPENGL_CORE) { + _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); + return; + } if (ctx->Polygon.FrontMode == mode) return; FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -157,6 +158,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) ctx->Polygon.BackMode = mode; break; case GL_BACK: + if (ctx->API == API_OPENGL_CORE) { + _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); + return; + } if (ctx->Polygon.BackMode == mode) return; FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -167,17 +172,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) return; } - if (ctx->Polygon.FrontMode == GL_FILL && ctx->Polygon.BackMode == GL_FILL) - ctx->_TriangleCaps &= ~DD_TRI_UNFILLED; - else - ctx->_TriangleCaps |= DD_TRI_UNFILLED; - if (ctx->Driver.PolygonMode) ctx->Driver.PolygonMode(ctx, face, mode); } -#if _HAVE_FULL_GL - /** * This routine updates the ctx->Polygon.Stipple state. @@ -191,11 +189,12 @@ _mesa_PolygonMode( GLenum face, GLenum mode ) * too. */ void -_mesa_polygon_stipple(GLcontext *ctx, const GLubyte *pattern) +_mesa_polygon_stipple(struct gl_context *ctx, const GLubyte *pattern) { pattern = _mesa_map_validate_pbo_source(ctx, 2, &ctx->Unpack, 32, 32, 1, - GL_COLOR_INDEX, GL_BITMAP, pattern, + GL_COLOR_INDEX, GL_BITMAP, + INT_MAX, pattern, "glPolygonStipple"); if (!pattern) return; @@ -213,7 +212,6 @@ void GLAPIENTRY _mesa_PolygonStipple( const GLubyte *pattern ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glPolygonStipple\n"); @@ -231,18 +229,17 @@ _mesa_PolygonStipple( const GLubyte *pattern ) * Called by glPolygonStipple. */ void GLAPIENTRY -_mesa_GetPolygonStipple( GLubyte *dest ) +_mesa_GetnPolygonStippleARB( GLsizei bufSize, GLubyte *dest ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glGetPolygonStipple\n"); dest = _mesa_map_validate_pbo_dest(ctx, 2, &ctx->Pack, 32, 32, 1, - GL_COLOR_INDEX, GL_BITMAP, dest, - "glGetPolygonStipple"); + GL_COLOR_INDEX, GL_BITMAP, + bufSize, dest, "glGetPolygonStipple"); if (!dest) return; @@ -252,11 +249,17 @@ _mesa_GetPolygonStipple( GLubyte *dest ) } +void GLAPIENTRY +_mesa_GetPolygonStipple( GLubyte *dest ) +{ + _mesa_GetnPolygonStippleARB(INT_MAX, dest); +} + + void GLAPIENTRY _mesa_PolygonOffset( GLfloat factor, GLfloat units ) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&VERBOSE_API) _mesa_debug(ctx, "glPolygonOffset %f %f\n", factor, units); @@ -282,7 +285,6 @@ _mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias ) _mesa_PolygonOffset(factor, bias * ctx->DrawBuffer->_DepthMaxF ); } -#endif /**********************************************************************/ @@ -294,10 +296,10 @@ _mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias ) * * \param ctx GL context. * - * Initializes __GLcontextRec::Polygon and __GLcontextRec::PolygonStipple + * Initializes __struct gl_contextRec::Polygon and __struct gl_contextRec::PolygonStipple * attribute groups. */ -void _mesa_init_polygon( GLcontext * ctx ) +void _mesa_init_polygon( struct gl_context * ctx ) { /* Polygon group */ ctx->Polygon.CullFlag = GL_FALSE; @@ -316,7 +318,7 @@ void _mesa_init_polygon( GLcontext * ctx ) /* Polygon Stipple group */ - MEMSET( ctx->PolygonStipple, 0xff, 32*sizeof(GLuint) ); + memset( ctx->PolygonStipple, 0xff, 32*sizeof(GLuint) ); } /*@}*/