fix bug rendering points with fragment program (see #11330)

This commit is contained in:
Brian
2007-06-22 09:47:30 -06:00
parent 1bf5076569
commit 1d52b6aaf4
2 changed files with 18 additions and 9 deletions

View File

@@ -1,8 +1,8 @@
/*
* Mesa 3-D graphics library
* Version: 6.1
* Version: 7.1
*
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -208,6 +208,14 @@ _swrast_choose_point( GLcontext *ctx )
GLboolean specular = (ctx->Fog.ColorSumEnabled ||
(ctx->Light.Enabled &&
ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR));
GLboolean attribs = (ctx->FragmentProgram._Current ||
ctx->Texture._EnabledCoordUnits ||
swrast->_FogEnabled ||
specular);
/*
* XXX this is a mess that should be cleaned up someday
*/
if (ctx->RenderMode==GL_RENDER) {
if (ctx->Point.PointSprite) {
@@ -218,7 +226,7 @@ _swrast_choose_point( GLcontext *ctx )
else
USE(sprite_point);
}
else if (ctx->Point.SmoothFlag) {
else if (ctx->Point.SmoothFlag && !attribs) {
/* Smooth points */
if (rgbMode) {
if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
@@ -237,7 +245,7 @@ _swrast_choose_point( GLcontext *ctx )
}
else if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
if (rgbMode) {
if (ctx->Texture._EnabledCoordUnits) {
if (attribs) {
if (ctx->Point.SmoothFlag) {
USE(atten_antialiased_rgba_point);
}
@@ -254,9 +262,7 @@ _swrast_choose_point( GLcontext *ctx )
USE(atten_general_ci_point);
}
}
else if ((ctx->Texture._EnabledCoordUnits
|| specular
|| swrast->_FogEnabled) && rgbMode) {
else if (attribs && rgbMode) {
/* textured, fogged */
USE(textured_rgba_point);
}

View File

@@ -1,6 +1,6 @@
/*
* Mesa 3-D graphics library
* Version: 6.5.3
* Version: 7.1
*
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
*
@@ -1178,7 +1178,10 @@ shade_texture_span(GLcontext *ctx, SWspan *span)
if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) {
convert_color_type(span, GL_FLOAT, 0);
}
interpolate_active_attribs(ctx, span, ~0);
if (span->primitive != GL_POINT) {
/* for points, we populated the arrays already */
interpolate_active_attribs(ctx, span, ~0);
}
span->array->ChanType = GL_FLOAT;
if (!(span->arrayMask & SPAN_Z))