X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fpoints.c;h=095e2a3d707dd42b5d68456155c700cfada78d17;hb=e7458f19e1de7d40ff8aa72b6a141f24d33451c6;hp=cb6ac3922e0a43e03a77d408e7b9f140610b8744;hpb=25ffb8689350bc7bb58a564bb1c5fc3ba62cb1df;p=mesa.git diff --git a/src/mesa/main/points.c b/src/mesa/main/points.c index cb6ac3922e0..095e2a3d707 100644 --- a/src/mesa/main/points.c +++ b/src/mesa/main/points.c @@ -5,7 +5,6 @@ /* * Mesa 3-D graphics library - * Version: 7.1 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * @@ -22,9 +21,10 @@ * 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. */ @@ -40,19 +40,16 @@ * \param size point diameter in pixels * \sa glPointSize(). */ -void GLAPIENTRY -_mesa_PointSize( GLfloat size ) +static ALWAYS_INLINE void +point_size(struct gl_context *ctx, GLfloat size, bool no_error) { - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - if (size <= 0.0) { - _mesa_error( ctx, GL_INVALID_VALUE, "glPointSize" ); + if (ctx->Point.Size == size) return; - } - if (ctx->Point.Size == size) + if (!no_error && size <= 0.0F) { + _mesa_error(ctx, GL_INVALID_VALUE, "glPointSize"); return; + } FLUSH_VERTICES(ctx, _NEW_POINT); ctx->Point.Size = size; @@ -62,7 +59,20 @@ _mesa_PointSize( GLfloat size ) } -#if _HAVE_FULL_GL +void GLAPIENTRY +_mesa_PointSize_no_error(GLfloat size) +{ + GET_CURRENT_CONTEXT(ctx); + point_size(ctx, size, true); +} + + +void GLAPIENTRY +_mesa_PointSize( GLfloat size ) +{ + GET_CURRENT_CONTEXT(ctx); + point_size(ctx, size, false); +} void GLAPIENTRY @@ -102,13 +112,12 @@ void GLAPIENTRY _mesa_PointParameterfv( GLenum pname, const GLfloat *params) { GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); /* Drivers that support point sprites must also support point parameters. * If point parameters aren't supported, then this function shouldn't even * exist. */ - ASSERT(!(ctx->Extensions.ARB_point_sprite + assert(!(ctx->Extensions.ARB_point_sprite || ctx->Extensions.NV_point_sprite) || ctx->Extensions.EXT_point_parameters); @@ -124,14 +133,9 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params) return; FLUSH_VERTICES(ctx, _NEW_POINT); COPY_3V(ctx->Point.Params, params); - ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 || - ctx->Point.Params[1] != 0.0 || - ctx->Point.Params[2] != 0.0); - - if (ctx->Point._Attenuated) - ctx->_TriangleCaps |= DD_POINT_ATTEN; - else - ctx->_TriangleCaps &= ~DD_POINT_ATTEN; + ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0F || + ctx->Point.Params[1] != 0.0F || + ctx->Point.Params[2] != 0.0F); break; case GL_POINT_SIZE_MIN_EXT: if (params[0] < 0.0F) { @@ -171,7 +175,7 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params) * differ. In ARB_point_sprite the POINT_SPRITE_R_MODE is * always ZERO. NV_point_sprite adds the S and R modes. */ - if (ctx->Extensions.NV_point_sprite) { + if (_mesa_is_desktop_gl(ctx) && ctx->Extensions.NV_point_sprite) { GLenum value = (GLenum) params[0]; if (value != GL_ZERO && value != GL_S && value != GL_R) { _mesa_error(ctx, GL_INVALID_VALUE, @@ -190,12 +194,11 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params) } break; case GL_POINT_SPRITE_COORD_ORIGIN: - /* This is not completely correct. GL_POINT_SPRITE_COORD_ORIGIN was - * added to point sprites when the extension was merged into OpenGL - * 2.0. It is expected that an implementation supporting OpenGL 1.4 - * and GL_ARB_point_sprite will generate an error here. + /* GL_POINT_SPRITE_COORD_ORIGIN was added to point sprites when the + * extension was merged into OpenGL 2.0. */ - if (ctx->Extensions.ARB_point_sprite) { + if ((ctx->API == API_OPENGL_COMPAT && ctx->Version >= 20) + || ctx->API == API_OPENGL_CORE) { GLenum value = (GLenum) params[0]; if (value != GL_LOWER_LEFT && value != GL_UPPER_LEFT) { _mesa_error(ctx, GL_INVALID_VALUE, @@ -220,9 +223,8 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params) } if (ctx->Driver.PointParameterfv) - (*ctx->Driver.PointParameterfv)(ctx, pname, params); + ctx->Driver.PointParameterfv(ctx, pname, params); } -#endif @@ -237,8 +239,6 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params) void _mesa_init_point(struct gl_context *ctx) { - GLuint i; - ctx->Point.SmoothFlag = GL_FALSE; ctx->Point.Size = 1.0; ctx->Point.Params[0] = 1.0; @@ -249,10 +249,21 @@ _mesa_init_point(struct gl_context *ctx) ctx->Point.MaxSize = MAX2(ctx->Const.MaxPointSize, ctx->Const.MaxPointSizeAA); ctx->Point.Threshold = 1.0; - ctx->Point.PointSprite = GL_FALSE; /* GL_ARB/NV_point_sprite */ + + /* Page 403 (page 423 of the PDF) of the OpenGL 3.0 spec says: + * + * "Non-sprite points (section 3.4) - Enable/Disable targets + * POINT_SMOOTH and POINT_SPRITE, and all associated state. Point + * rasterization is always performed as though POINT_SPRITE were + * enabled." + * + * In a core context, the state will default to true, and the setters and + * getters are disabled. + */ + ctx->Point.PointSprite = (ctx->API == API_OPENGL_CORE || + ctx->API == API_OPENGLES2); + ctx->Point.SpriteRMode = GL_ZERO; /* GL_NV_point_sprite (only!) */ ctx->Point.SpriteOrigin = GL_UPPER_LEFT; /* GL_ARB_point_sprite */ - for (i = 0; i < Elements(ctx->Point.CoordReplace); i++) { - ctx->Point.CoordReplace[i] = GL_FALSE; /* GL_ARB/NV_point_sprite */ - } + ctx->Point.CoordReplace = 0; /* GL_ARB/NV_point_sprite */ }