Consolidate point size computation, clamping in get_size().

Also, apply user-defined clamp limits to point size even when not using
attentuation or program-computed size.
This commit is contained in:
Brian 2007-11-22 09:31:16 -07:00
parent ccb1c9df00
commit 0fd679a190

View file

@ -46,6 +46,38 @@
} while(0)
/**
* Get/compute the point size.
* The size may come from a vertex shader, or computed with attentuation
* or just the glPointSize value.
* Must also clamp to user-defined range and implmentation limits.
*/
static INLINE GLfloat
get_size(const GLcontext *ctx, const SWvertex *vert, GLboolean smoothed)
{
GLfloat size;
if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
/* use vertex's point size */
size = vert->pointSize;
}
else {
/* use constant point size */
size = ctx->Point.Size;
}
/* always clamp to user-specified limits */
size = CLAMP(size, ctx->Point.MinSize, ctx->Point.MaxSize);
/* clamp to implementation limits */
if (smoothed)
size = CLAMP(size, ctx->Const.MinPointSizeAA, ctx->Const.MaxPointSizeAA);
else
size = CLAMP(size, ctx->Const.MinPointSize, ctx->Const.MaxPointSize);
return size;
}
/**
* Draw a point sprite
*/
@ -68,18 +100,7 @@ sprite_point(GLcontext *ctx, const SWvertex *vert)
span.z = (GLuint) (vert->attrib[FRAG_ATTRIB_WPOS][2] + 0.5F);
span.zStep = 0;
/* compute size */
if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
/* use vertex's point size */
/* first, clamp attenuated size to the user-specifed range */
size = CLAMP(vert->pointSize, ctx->Point.MinSize, ctx->Point.MaxSize);
}
else {
/* use constant point size */
size = ctx->Point.Size;
}
/* clamp to non-AA implementation limits */
size = CLAMP(size, ctx->Const.MinPointSize, ctx->Const.MaxPointSize);
size = get_size(ctx, vert, GL_FALSE);
/* span init */
INIT_SPAN(span, GL_POINT);
@ -237,18 +258,7 @@ smooth_point(GLcontext *ctx, const SWvertex *vert)
span.z = (GLuint) (vert->attrib[FRAG_ATTRIB_WPOS][2] + 0.5F);
span.zStep = 0;
/* compute size */
if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
/* use vertex's point size */
/* first, clamp attenuated size to the user-specifed range */
size = CLAMP(vert->pointSize, ctx->Point.MinSize, ctx->Point.MaxSize);
}
else {
/* use constant point size */
size = ctx->Point.Size;
}
/* clamp to AA implementation limits */
size = CLAMP(size, ctx->Const.MinPointSizeAA, ctx->Const.MaxPointSizeAA);
size = get_size(ctx, vert, GL_TRUE);
/* alpha attenuation / fade factor */
if (ctx->Multisample.Enabled) {
@ -371,18 +381,7 @@ large_point(GLcontext *ctx, const SWvertex *vert)
span.z = (GLuint) (vert->attrib[FRAG_ATTRIB_WPOS][2] + 0.5F);
span.zStep = 0;
/* compute size */
if (ctx->Point._Attenuated || ctx->VertexProgram.PointSizeEnabled) {
/* use vertex's point size */
/* first, clamp attenuated size to the user-specifed range */
size = CLAMP(vert->pointSize, ctx->Point.MinSize, ctx->Point.MaxSize);
}
else {
/* use constant point size */
size = ctx->Point.Size;
}
/* clamp to non-AA implementation limits */
size = CLAMP(size, ctx->Const.MinPointSize, ctx->Const.MaxPointSize);
size = get_size(ctx, vert, GL_FALSE);
/* span init */
INIT_SPAN(span, GL_POINT);