state_point.c revision e0e0c19eefceaf5d4ec40f9466b58a771f50e799
70N/A/* Copyright (c) 2001, Stanford University
70N/A * All rights reserved
70N/A *
70N/A * See the file LICENSE.txt for information on redistributing this software.
911N/A */
761N/A
70N/A#include "state.h"
70N/A#include "state/cr_statetypes.h"
70N/A#include "state_internals.h"
70N/A
70N/Avoid crStatePointInit (CRContext *ctx)
70N/A{
70N/A CRPointState *p = &ctx->point;
70N/A CRStateBits *sb = GetCurrentBits();
70N/A CRPointBits *pb = &(sb->point);
70N/A int i;
70N/A
70N/A p->pointSmooth = GL_FALSE;
70N/A RESET(pb->enableSmooth, ctx->bitid);
70N/A p->pointSize = 1.0f;
70N/A RESET(pb->size, ctx->bitid);
70N/A#ifdef CR_ARB_point_parameters
70N/A p->minSize = 0.0f;
70N/A RESET(pb->minSize, ctx->bitid);
70N/A p->maxSize = CR_ALIASED_POINT_SIZE_MAX;
70N/A RESET(pb->maxSize, ctx->bitid);
70N/A p->fadeThresholdSize = 1.0f;
70N/A RESET(pb->fadeThresholdSize, ctx->bitid);
70N/A p->distanceAttenuation[0] = 1.0f;
70N/A p->distanceAttenuation[1] = 0.0f;
70N/A p->distanceAttenuation[2] = 0.0f;
70N/A RESET(pb->distanceAttenuation, ctx->bitid);
70N/A#endif
70N/A#ifdef CR_ARB_point_sprite
70N/A p->pointSprite = GL_FALSE;
493N/A RESET(pb->enableSprite, ctx->bitid);
70N/A for (i = 0; i < CR_MAX_TEXTURE_UNITS; i++) {
70N/A p->coordReplacement[i] = GL_FALSE;
851N/A RESET(pb->coordReplacement[i], ctx->bitid);
70N/A }
911N/A#endif
911N/A
911N/A RESET(pb->dirty, ctx->bitid);
911N/A
70N/A /*
70N/A *p->aliasedpointsizerange_min = c->aliasedpointsizerange_min;
70N/A *p->aliasedpointsizerange_max = c->aliasedpointsizerange_max;
70N/A *p->aliasedpointsizegranularity = c->aliasedpointsizegranularity;
70N/A *p->smoothpointsizerange_min = c->smoothpointsizerange_min;
70N/A *p->smoothpointsizerange_max = c->smoothpointsizerange_max;
70N/A *p->smoothpointgranularity = c->smoothpointgranularity;
70N/A */
70N/A}
493N/A
70N/Avoid STATE_APIENTRY crStatePointSize(GLfloat size)
70N/A{
493N/A CRContext *g = GetCurrentContext();
70N/A CRPointState *p = &(g->point);
70N/A CRStateBits *sb = GetCurrentBits();
70N/A CRPointBits *pb = &(sb->point);
70N/A
70N/A if (g->current.inBeginEnd)
{
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glPointSize called in begin/end");
return;
}
FLUSH();
if (size <= 0.0f)
{
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glPointSize called with size <= 0.0: %f", size);
return;
}
p->pointSize = size;
DIRTY(pb->size, g->neg_bitid);
DIRTY(pb->dirty, g->neg_bitid);
}
void STATE_APIENTRY crStatePointParameterfARB(GLenum pname, GLfloat param)
{
CRContext *g = GetCurrentContext();
if (g->current.inBeginEnd)
{
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glPointParameterfARB called in begin/end");
return;
}
FLUSH();
crStatePointParameterfvARB(pname, &param);
}
void STATE_APIENTRY crStatePointParameterfvARB(GLenum pname, const GLfloat *params)
{
CRContext *g = GetCurrentContext();
CRPointState *p = &(g->point);
CRStateBits *sb = GetCurrentBits();
CRPointBits *pb = &(sb->point);
if (g->current.inBeginEnd)
{
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glPointParameterfvARB called in begin/end");
return;
}
FLUSH();
switch (pname) {
case GL_DISTANCE_ATTENUATION_EXT:
if (g->extensions.ARB_point_parameters) {
p->distanceAttenuation[0] = params[0];
p->distanceAttenuation[1] = params[1];
p->distanceAttenuation[2] = params[2];
DIRTY(pb->distanceAttenuation, g->neg_bitid);
}
else
{
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glPointParameterfvARB invalid enum: %f", pname);
return;
}
break;
case GL_POINT_SIZE_MIN_EXT:
if (g->extensions.ARB_point_parameters) {
if (params[0] < 0.0F) {
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glPointParameterfvARB invalid value: %f", params[0]);
return;
}
p->minSize = params[0];
DIRTY(pb->minSize, g->neg_bitid);
}
else
{
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glPointParameterfvARB invalid enum: %f", pname);
return;
}
break;
case GL_POINT_SIZE_MAX_EXT:
if (g->extensions.ARB_point_parameters) {
if (params[0] < 0.0F) {
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glPointParameterfvARB invalid value: %f", params[0]);
return;
}
p->maxSize = params[0];
DIRTY(pb->maxSize, g->neg_bitid);
}
else
{
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glPointParameterfvARB invalid enum: %f", pname);
return;
}
break;
case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
if (g->extensions.ARB_point_parameters) {
if (params[0] < 0.0F) {
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glPointParameterfvARB invalid value: %f", params[0]);
return;
}
p->fadeThresholdSize = params[0];
DIRTY(pb->fadeThresholdSize, g->neg_bitid);
}
else
{
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glPointParameterfvARB invalid enum: %f", pname);
return;
}
break;
default:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glPointParameterfvARB invalid enum: %f", pname);
return;
}
DIRTY(pb->dirty, g->neg_bitid);
}
void STATE_APIENTRY crStatePointParameteri(GLenum pname, GLint param)
{
GLfloat f_param = (GLfloat) param;
crStatePointParameterfvARB( pname, &f_param );
}
void STATE_APIENTRY crStatePointParameteriv(GLenum pname, const GLint *params)
{
GLfloat f_param = (GLfloat) (*params);
crStatePointParameterfvARB( pname, &f_param );
}